문제 15번 - assassin
query : select id from prob_assassin where pw like ''
<?php
include "./config.php";
login_chk();
$db = dbconnect();
if(preg_match('/\'/i', $_GET[pw])) exit("No Hack ~_~");
$query = "select id from prob_assassin where pw like '{$_GET[pw]}'";
echo "<hr>query : <strong>{$query}</strong><hr><br>";
$result = @mysqli_fetch_array(mysqli_query($db,$query));
if($result['id']) echo "<h2>Hello {$result[id]}</h2>";
if($result['id'] == 'admin') solve("assassin");
highlight_file(__FILE__);
?>
일단 다른 문제들과 같이 php 코드가 주어져있다.
먼저 필터링 함수를 확인하면 pw를 받는 변수에 '를 필터링하고 i를 통해 대소문자를 구별하지 않는다는 것을 알 수 있다.
<?php
if(preg_match('/\'/i', $_GET[pw])) exit("No Hack ~_~");
?>
clear 조건을 확인하기 위해 조건문 코드를 확인해보니 id가 admin이어야 하는데 admin의 pw를 구하고 그 pw의 id에 해당하는 값을 가져오는 query를 확인할 수 있다. 따라서 id가 admin인 pw를 구해야한다.
<?php
$query = "select id from prob_assassin where pw like '{$_GET[pw]}'";
echo "<hr>query : <strong>{$query}</strong><hr><br>";
$result = @mysqli_fetch_array(mysqli_query($db,$query));
if($result['id']) echo "<h2>Hello {$result[id]}</h2>";
if($result['id'] == 'admin') solve("assassin");
highlight_file(__FILE__);
?>
query문에서 또 확인할게 있는데 pw = 이 아니라 pw like 라는 것이다. 이런 경우 활용가능한 방법이 있는데 %를 이용하는 것이다.
like "a%"는 a로 시작하는 경우를 의미하고 (a 뒤에 문자열이 더 있는 상황),
like "%a"는 a로 끝나는 경우를 의미하고,
like "%a%"는 문자열 중간에 a가 포함되어 있는 경우이다.
첫번째 a%를 이용하여 하나씩 pw를 찾아보았다.
첫번째 자리에 9를 넣으니 hello guest가 출력되는 것을 확인할 수 있었다.
두번째 자리는 첫번째 자리를 알고 있으니 90%, 91% 이런식으로 입력해보았다.
바로 90%에서 hello guest를 출력하였다.
세번째 자리에서 2를 입력하니 hello guest가 hello admin으로 바뀌며 클리어 화면이 떴다.
아마 id는 guest와 admin이 있고 guest의 비밀번호가 90까지는 똑같으며 admin보다 순서가 앞에 있다는 것을 유추할 수 있다. (아래 표와 같이)
id | pw |
guest | 90______ |
admin | 902_____ |
solve
https://los.rubiya.kr/chall/assassin_14a1fd552c61c60f034879e5d4171373.php?pw=902%
'write-up > LOS write-up' 카테고리의 다른 글
LOS (Lord of SQL injection) 문제 17번 zombie_assassin write-up (0) | 2021.07.10 |
---|---|
LOS (Lord of SQL injection) 문제 16번 succubus write-up (0) | 2021.07.10 |
LOS (Lord of SQL injection) 문제 14번 giant write-up (0) | 2021.07.07 |
LOS (Lord of SQL injection) 문제 13번 bugbear write-up (0) | 2021.07.07 |
LOS (Lord of SQL injection) 문제 12번 darkknight write-up (2) | 2021.07.07 |