<문제>
<풀이>
문제 사이트에 접속하면 처음으로 보이는 페이지이다.
get source를 클릭해서 코드를 확인한다.
<?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 코드를 확인할 수 있다.
사용자의 입력값이 select 문에 들어가서 실행된다.
select 문만 보면 sql injection을 시도해보고 싶지만
사용자의 입력값이 mysqli_real_escape_string()함수를 통해 가공되기 때문에 단순한 sql injection은 먹히지 않을 것이다.
FLAG가 출력되는 조건을 확인해보면
select 문 결과 조회된 계정이 존재하야 하고
$id가 guest 혹은 blueh4g이 아니어야 한다.
<!--
you have blocked accounts.
guest / guest
blueh4g / blueh4g1234ps
-->
소스코드에 위와 같이 guest와 blueh4g 두 개의 계정 정보가 제공되고 있다.
guest계정으로 로그인을 해본다.
역시 your account is blocked 라는 문구가 뜬다.
sql 문에서는 대소문자 구분을 하지 않기 때문에 guest 를 Guest로 바꾸어 다시 로그인을 시도해보았다.
로그인에 성공하고 플래그가 출력되었다.
'드림핵' 카테고리의 다른 글
[드림핵 워게임] [wargame.kr] strcmp (0) | 2023.08.19 |
---|---|
[드림핵 워게임] [wargame.kr] type confusion (0) | 2023.08.19 |
[드림핵 워게임] [wargame.kr] tmitter (0) | 2023.08.19 |
[드림핵 워게임] NoSQL-CouchDB (0) | 2023.08.15 |
[드림핵 워게임] XSS Filtering Bypass (0) | 2023.08.15 |