반응형
문제소스 :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
<?php
include "./config.php";
login_chk();
$db = dbconnect();
$_GET['id'] = strrev(addslashes($_GET['id']));
$_GET['pw'] = strrev(addslashes($_GET['pw']));
if(preg_match('/prob|_|\.|\(\)/i', $_GET[id])) exit("No Hack ~_~");
if(preg_match('/prob|_|\.|\(\)/i', $_GET[pw])) exit("No Hack ~_~");
$query = "select id from prob_zombie_assassin where id='{$_GET[id]}' and pw='{$_GET[pw]}'";
echo "<hr>query : <strong>{$query}</strong><hr><br>";
$result = @mysqli_fetch_array(mysqli_query($db,$query));
if($result['id']) solve("zombie_assassin");
highlight_file(__FILE__);
?>
|
cs |
$_GET['id'] = strrev(addslashes($_GET['id']));
$_GET['pw'] = strrev(addslashes($_GET['pw']));
id와 pw를 addslashes로 아래 문자에 \을 붙여준다. https://www.w3schools.com/php/func_string_addslashes.asp
- single quote (')
- double quote (")
- backslash (\)
- NULL (%00)
그리고 strrev으로 문자열을 뒤집는다.
이전 문제처럼 쿼리에서 id = ' 부터 pw =' 까지를 문자열 취급하게 만들면 될 것 같다.
https://mandu-mandu.tistory.com/315
id='' and pw=''
두번째 싱글쿼트 앞에 \가 붙게 하여 문자열 취급하도록 해야 한다.
id에 \와 '을 제외한 나머지 " 또는 NULL (%00)을 넣어보자
" -> \" -> "\
id='"\' and pw = ''
\가 뒤로 오면서 '가 문자열 취급되고, " 은 ' 안에 있기 때문에 문자열 취급된다.
이제 pw=' or 1#' 로 만들어주면 된다. strrev함수로 인해 뒤집어서 입력해주면 된다.
반응형
'WAR GAME > Lord of SQLi' 카테고리의 다른 글
LORD OF SQL INJECTION [xavis] 풀이 (0) | 2019.11.12 |
---|---|
LORD OF SQL INJECTION [nightmare] 풀이 (0) | 2019.11.09 |
LORD OF SQL INJECTION [SUCCUBUS] 풀이 (0) | 2019.11.07 |
LORD OF SQL INJECTION [assassin] 풀이 (0) | 2019.11.06 |
LORD OF SQL INJECTION [GIANT] 풀이 (0) | 2019.11.05 |