Ye0ngJae

[HackCTF] "Login" 문제풀이 본문

정보보안/워게임

[HackCTF] "Login" 문제풀이

Ye0ngJae 2022. 3. 8. 17:37
728x90

문제

 

 

 

 

풀이

더보기

로그인을 하면 Flag 값을 볼 수 있는 것 같습니다.

 

<?php
highlight_FILE(__FILE__);
require_once("dbcon.php");

$id = $_GET['id'];
$pw = $_GET['pw'];
$pw = hash('sha256',$pw);

$sql = "select * from jhyeonuser where binary id='$id' and pw='$pw'";
$result = mysqli_fetch_array(mysqli_query($db,$sql));

if($result['id']){
        $_SESSION['id'] = $result['id'];
        mysqli_close($db);
        header("Location:welcome.php");
}
?>

 

소스코드를 보면 id와 pw를 받은 후 pw를 sha256 해쉬로 암호화 합니다. 그리고 

 

SELECT * FROM jhyeonuser WHERE binary id='$id' AND pw='$pw'

 

라는 내용의 SQL 쿼리문으로 DB에 전달합니다. 위 코드에서 입력값에 별다른 검증이 없는 것을 확인할 수 있습니다. 라는 것은 위 SQL 쿼리문 문자열에서 이스케이프하여 뒤 구문을 주석으로 만들어버리면 로그인이 이루어질 것입니다. 따라서

 

id에 

admin'#

 

라는 내용의 값을 넣고 pw에 아무 값이나 넣고 로그인을 진행하면

SQL Injection이 성공하여 Flag 값이 출력되는 것을 확인할 수 있습니다.

 

728x90

'정보보안 > 워게임' 카테고리의 다른 글

[HackCTF] "Home" 문제풀이  (0) 2022.03.08
[HackCTF] "Input Check" 문제풀이  (0) 2022.03.08
[HackCTF] "Read File" 문제풀이  (1) 2022.03.08
[HackCTF] "Guess me" 문제풀이  (0) 2022.03.08
[HackCTF] "보물" 문제풀이  (0) 2022.03.08