정보보안/워게임
[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