일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- summarize()
- arrange()
- mutate()
- distinct()
- groupe_by()
- select()
- 대칭형 알고리즘
- samp;e_frac()
- AES
- dplyr
- proc contents
- sample_n()
- filter()
- Today
- Total
Gae Ko's Blog
los:xavis 본문
[코드분석]
<?php
include "./config.php";
login_chk();
dbconnect();
↑DB와 연결을 위한 코드
if(preg_match('/prob|_|\.|\(\)/i', $_GET[pw])) exit("No Hack ~_~");
if(preg_match('/regex|like/i', $_GET[pw])) exit("HeHe");
↑preg함수를 통한 필터링
$query = "select id from prob_xavis where id='admin' and pw='{$_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>";
↑첫번째 쿼리 실행
$_GET[pw] = addslashes($_GET[pw]);
↑addslashes함수 이용
$query = "select pw from prob_xavis where id='admin' and pw='{$_GET[pw]}'";
$result = @mysql_fetch_array(mysql_query($query));
↑두번째 쿼리 실행
if(($result['pw']) && ($result['pw'] == $_GET['pw'])) solve("xavis");
↑문제의 포인트
[내 풀이]
코드를 보니
- preg함수를 통해 필터링하는데 특히 regex와 like를 필터링
- 첫번째 쿼리가 실행되기만 하면 hello 어쩌고 라고 출력
- 두번째 쿼리실행과 문제의 포인트를 통해 blind injection임을 알 수 있음
즉, id='admin'인 정확한 pw값을 구하여야 문제가 풀림
일반적인 blind injection문제 해결법처럼 pw의 길이를 구하고 정확한 pw값을 구하면 된다. 라고 생각했는데
길이부터가 구하기가 만만치 않을 거 같은 느낌이 들었다. 왜냐면 0-20까지 다 해보았는데 나오지 않았기 때문이다...
이건 하나하나 구하는건 분명 아님을 예상한다.
like를 필터링하는 것을 보니 .... 혹시 문자패턴을 아용해 검색하는 like연산자를 이용하는 것처럼 푸는게 아닐까...?
- hex화해서 length를 찍어본다
-
'웹해킹 > [los] Lord of SQL' 카테고리의 다른 글
los:nightmare (0) | 2017.09.03 |
---|---|
los:succubus (0) | 2017.09.03 |
los:zombie_assassin (0) | 2017.09.03 |
los : assassin (0) | 2017.08.26 |
los : giant (0) | 2017.08.17 |