Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 자료구조
- webhacking
- 문제풀이
- 버그바운티
- 해킹
- 코드게이트
- 시스템
- CTF
- WarGame
- 프로그래밍
- kangsecu
- Pwnable
- 블록체인
- nefus
- 선린인터넷고등학교
- 네퓨즈
- 워게임
- hacking
- 보안
- 정보보호
- 포렌식
- DVP
- webhacking.kr
- wargame.kr
- 정보보안
- C언어
- xcz
- 버그헌팅
- 포너블
- 웹해킹
Archives
- Today
- Total
kangsecu's B1og
[webhacking.kr] pro 18 문제풀이 본문
[webhacking.kr] pro 18번 문제를 풀어보도록 하겠습니다. (이것도 결국 오래전에 풀고 풀이는 이제야..)
문제에 들어가면 아예 sqli라고 알려줍니다!
index.phps를 눌러 코드를 확인하도록 하겠습니다.
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 32 33 34 35 36 37 38 39 40 41 | <html> <head> <title>Challenge 18</title> <style type="text/css"> body { background:black; color:white; font-size:10pt; } input { background:silver; } a { color:lightgreen; } </style> </head> <body> <br><br> <center><h1>SQL INJECTION</h1> <form method=get action=index.php> <table border=0 align=center cellpadding=10 cellspacing=0> <tr><td><input type=text name=no></td><td><input type=submit></td></tr> </table> </form> <a style=background:gray;color:black;width:100;font-size:9pt;><b>RESULT</b><br> <? if($_GET[no]) { if(eregi(" |/|\(|\)|\t|\||&|union|select|from|0x",$_GET[no])) exit("no hack"); $q=@mysql_fetch_array(mysql_query("select id from challenge18_table where id='guest' and no=$_GET[no]")); if($q[0]=="guest") echo ("hi guest"); if($q[0]=="admin") { @solve(); echo ("hi admin!"); } } ?> </a> <br><br><a href=index.phps>index.phps</a> </cener> </body> </html> | cs |
이렇게 간단한 php코드가 있습니다. 코드를 분석해보도록 하겠습니다.
GET방식으로 no파라미터를 받습니다. 그리고 no에 eregi안에 있는 문자들이 있다면 no hack이라는 문장이 출력되며 필터링됩니다.
GET방식으로 받은 no를 mysql에 넣어 값을 비교합니다. 그 후, 만약 값이 guest면 hi guest가 출력되고, admin이면 문제가 해결되며 hi admin !이 출력됩니다.
Exploit Vector
아주 간단한 sqli문제 입니다. 입력폼에 1을 입력하니 hi guest가 출력됩니다. 그렇다면 2나 3을 입력해보고싶죠?
그래서 2를 대입해봤더니, 아무런 결과도 나오지 않습니다. 그래서 게싱으로(사실 limit...로 이미 풀은 상태라..)no에 2를 넣으려고 or연산자를 사용하였습니다.
그런데 no=123 or no=2를 넣으려 했는데 eregi에서 공백조차 필터링을 해서 공백을 우회해서 대입해야합니다. 그래서 공백을 우회하기 위하여 %0a를 사용하였습니다.
Exploit(이거 진짜 이렇게 해야하나..)
쿼리를 no=123%0aor%0ano=2를 대입하여 문제를 해결하였습니다.
이렇게 넣었습니다.
webhacking.kr pro 18 Clear!
'Web Hacking > webhakcing.kr' 카테고리의 다른 글
[webhacking.kr] pro 5 문제풀이 (0) | 2018.02.22 |
---|---|
[webhacking.kr]pro 4 문제풀이 (0) | 2018.02.22 |
[webhacking.kr]pro 14 문제풀이 (2) | 2018.02.20 |
[webhacking.kr]pro 28 문제풀이 (0) | 2018.02.01 |
[webhacking.kr]pro34 문제풀이 (0) | 2018.02.01 |