728x90
해당 문제의 내용은 다음과 같다
접속 정보 보기를 통해 문제 페이지에 접속하면 아래와 같은 화면을 볼 수 있었다.
우선 지금 할 수 있는 것이 없으니 get source 버튼을 눌러서 소스를 확인해보자
소스 코드에서 php 파일을 확인해보면 로그인에 성공하면 FLAG 값을 주는 것을 볼 수 있었다.
<?php
if (isset($_GET['view-source'])) {
show_source(__FILE__);
exit();
}
/*
create table user(
idx int auto_increment primary key,
id char(32),
ps char(32)
);
*/
if(isset($_POST['id']) && isset($_POST['ps'])){
include("./lib.php"); # include for $FLAG, $DB_username, $DB_password.
$conn = mysqli_connect("localhost", $DB_username, $DB_password, "login_filtering");
mysqli_query($conn, "set names utf8");
$id = mysqli_real_escape_string($conn, trim($_POST['id']));
$ps = mysqli_real_escape_string($conn, trim($_POST['ps']));
$row=mysqli_fetch_array(mysqli_query($conn, "select * from user where id='$id' and ps=md5('$ps')"));
if(isset($row['id'])){
if($id=='guest' || $id=='blueh4g'){
echo "your account is blocked";
}else{
echo "login ok"."<br />";
echo "FLAG : ".$FLAG;
}
}else{
echo "wrong..";
}
}
?>
php 코드 아래에 주석으로 사용자 정보를 알려주고 있다.
<!--
you have blocked accounts.
guest / guest
blueh4g / blueh4g1234ps
-->
로그인을 위 정보로 하면 flag 값을 주지만, id가 guest, blueh4g이면 계정이 막혔다는 문구가 표시된다.
이 부분에서 해당 페이지의 취약점을 찾을 수 있었다. 그 취약점은 if 문에서 발견할 수 있었다. 만약 id를 guest가 아닌 GUEST처럼 대문자로 넣으면, if문을 통과하여 db에 guest로 들어가게 된다.
따라서 아이디를 GUEST, 비밀번호를 guest로 설정하여 로그인을 하면
flag 값을 획득할 수 있었다.
문제풀이 성공!
[참고자료]
728x90
'CTF' 카테고리의 다른 글
[Suninatas] 1번 (1) | 2023.05.13 |
---|---|
[Dreamhack] error based sql injection (1) | 2023.05.10 |
[Dreamhack] session-basic (0) | 2023.05.02 |
[Dreamhack] mongoboard (0) | 2023.04.12 |
[Dreamhack] session (0) | 2023.04.12 |