일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- samp;e_frac()
- summarize()
- dplyr
- mutate()
- arrange()
- AES
- groupe_by()
- sample_n()
- distinct()
- 대칭형 알고리즘
- select()
- filter()
- proc contents
- Today
- Total
Gae Ko's Blog
los : darkelf 본문
[코드분석]
<?php
include "./config.php";
login_chk();
dbconnect();
↑DB분석을 위한 코드
if(preg_match('/prob|_|\.|\(\)/i', $_GET[pw])) exit("No Hack ~_~");
if(preg_match('/or|and/i', $_GET[pw])) exit("HeHe");
↑preg_match를 통한 필터링. or 과 and 가 포함된 입력값은 필터링
$query = "select id from prob_darkelf where id='guest' 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>";
if($result['id'] == 'admin') solve("darkelf");
↑문제의 포인트
[내 풀이]
코드를 통해 id='admin'일 때 문제가 해결된다고 한다.
앞의 문제와 비슷한 유형이지만 필터링하는 문자열이 다르다.
앞에서는 공백을 필터링해서 공백대신 가능한 문자열로 대체해주었다.
그렇다면 이번 문제는 or 과 and 를 필터링하는 경우이므로 or 과 and를 대체해줄 문자열로 대신해주면 된다.
구글링해본 결과,
or 은 || 으로 and 는 && 로 대체하여 우회가능하다.
이상하게도 fail 하였다. ㅠㅠ
고민하다가 혹시나 하는 생각에 | 와 & 의 url 에서의 문자로 찾아보았다.
( url 인코딩 → | 은 %7c 그리고 & 은 %26 )
SUCCESS !!!
[p.s]
|| 과 && 를 인코딩한 문자열로 하지 않은 경우에 쿼리가 왜 중간이 잘려나갔는지 모르겠다. ㅠㅠ
이거 역시 내일 민지언니에게 물어봐야징 ㅎ.ㅎ
물어본 결과!!
&랑 #은 문자열 그대로 넣으면 인식은 못하더라고 한다. 아직 언니두 이유는 모르신다구 한다.
'웹해킹 > [los] Lord of SQL' 카테고리의 다른 글
los : troll (0) | 2017.08.16 |
---|---|
los : orge (0) | 2017.08.12 |
los : wolfman (0) | 2017.08.12 |
los : orc (0) | 2017.08.12 |
los : goblin (0) | 2017.08.10 |