http://rubiya.kr/sqli/prob15.php
<?php
include "./dbconn.php";
include "./solve.php";
if(preg_match('/\'/i', $_GET[pw])) exit("No Hack ~_~");
$query = "select id from prob15 where pw like '{$_GET[pw]}'";
echo "<hr>query : <strong>{$query}</strong><hr><br>";
$result = @mysql_fetch_array(mysql_query($query));
if($result['id']) echo "<h2>Hello {$result[id]}</h2>";
if($result['id'] == 'admin') solve();
highlight_file(__FILE__);
?>
내가모르는 like의 새로운 기능이 있는줄 알고 못풀다가 adm1nkyj 님의 도움을 받아서 클리어....
결과가 admin이면 클리어. 결과를 union으로 만들거나 admin 내부의 값이 나와야 되는데...
'가 막혀있어서 union은 쓸수 없다. like의 와일드카드문자인 %를 입력해보면 hello guest가 뜨고,
다른건 없다. admin이라는 문자열을 만드는게 아니라면 테이블에 admin관련 pw가 있다고 생각해볼
수 있다.
ex)
mysql> select * from prob;
+-------+-------+
| id | pw |
+-------+-------+
| admin | 1234 |
| guest | guest |
+-------+-------+
2 rows in set (0.00 sec)
mysql>
요런식. admin이 검색되게 하려면 like검색시 admin의 pw를 포함되도록 하면 됨.
like의 _는 한글자 대체 와일드카드이고, %는 여러 글자 대체 와일드카드.
여러 글자 와일드카드.
와일드카드는 앞뒤로 써도 적용되므로
단순히 admin이 검색되게 하려면 admin의 pw중에 한 글자만 알아도 된다.
예로 admin의 pw가 'abcde'라고 하면 pw like '%a%'처럼 a가 포함되어있으면 출력하라는 식으로
쿼리 구성 가능. 한글자 한글자 돌리다보면 '%d%'째에 admin이 출력된다.
http://rubiya.kr/sqli/prob15.php?pw=%d%
query : select id from prob15 where pw like '%d%'
'webhacking > sql, sql injection' 카테고리의 다른 글
rubiya.kr 19번. (0) | 2014.09.10 |
---|---|
mysql hex()함수에 관해서 (0) | 2014.09.06 |
webhacking.kr 13번. (2) | 2014.09.04 |
rubiya.kr 20번. (0) | 2014.09.04 |
mysql max,min함수 (0) | 2014.08.31 |