일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- filter()
- distinct()
- 대칭형 알고리즘
- arrange()
- select()
- mutate()
- proc contents
- dplyr
- sample_n()
- AES
- summarize()
- samp;e_frac()
- groupe_by()
- Today
- Total
Gae Ko's Blog
los : wolfman 본문
[코드분석]
<?php
include "./config.php";
login_chk();
dbconnect();
↑DB와 연결을 위한 코드
if(preg_match('/prob|_|\.|\(\)/i', $_GET[pw])) exit("No Hack ~_~");
if(preg_match('/ /i', $_GET[pw])) exit("No whitespace ~_~");
↑preg_match를 통해 필터링. 두번째줄에서 공백이 들어간 입력값은 필터린된다는 뜻
$query = "select id from prob_wolfman 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("wolfman");
↑문제의 포인트
[내 풀이]
코드를 통해 id가 admin일 때 문제가 해결된다고 한다.
앞에서 los : cobolt 문제처럼 pw=' or 1 and id='admin' 하면 공백이 포함되었기 때문에 preg_match를 통해 필터링된다.
그래서 공백문자를 필터링하는 경우를 구글링해보니
select * from table 라는 쿼리와 select(*)from(table) 이라는 쿼리가 동일하다는 점을 사용하여 ( )를 사용하라고 하여,
pw=%27(or)1(and)id=%27admin%27%23 하였더니 fail 되었다. ㅠㅠ
뭐지 뭐지 이런 방법이 아닌가 라는 생각을 하던 중에 민지언니가 알려준 힌트를 보았다.
"힌트를 주자면 5번 문제에서 필터링하는 공백은 %20이야. 그리고 mysql에서는 ;이 나올때까지는 엔터나 탭이나 뭘 쳐도 상관이 없어"
한번 교육서버의 내 db를 들어가 언니 말대로 실행해 보았다.
공백대신 엔터를 입력해도 동일하다라는 것을 알게 되었다.
구글링을 통해 url에서 enter키가 %0d%0a 임을 알게 되어 공백부분에 %0d%0a로 대체해보았다.
( #은 맨 뒤 ' 을 주석처리하기위해 존재)
우아 SUCCESS!!
이번 문제는 비록 언니의 힌트를 보고 깨달았지만 바로 풀려서 기분이 너무 좋당 !!
[p.s]
아까 괄호 ( ) 를 공백 대신으로 했던 경우 왜 실패했는지 잘 모르겠다...ㅠ
이것도 내일 민지언니에게 물어봐야겠다 ㅎ.ㅎ
물어본 결과!!
preg_match를 통해 필터링하는 첫번째 부분에서 (와 ) 를 필터링한다고 나와있었기 때문에 실패한 것 ( 바보 ㅠ)
[참고]
다음 문제 풀다가 알아낸 정보 !
- 공백 필터링을 우회할 수 있는 문자
1) /**/ : 주석을 통해 공백을 대체할 수 있음 ex) pw='/**/or/**/1=1%23
2) +( 또는 %2B) : 문자+ 를 통해 공백을 대체할 수 있음 ex) pw='+or+1=1%23
3) ( ) : 괄호를 통해 공백을 대체할 수 있음 ex) pw='(or)1=(1)%23
4) %09, %0b, %0c, %0d, %0a 등등
'웹해킹 > [los] Lord of SQL' 카테고리의 다른 글
los : orge (0) | 2017.08.12 |
---|---|
los : darkelf (0) | 2017.08.12 |
los : orc (0) | 2017.08.12 |
los : goblin (0) | 2017.08.10 |
los : cobolt (0) | 2017.08.09 |