일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 문제풀이
- 포렌식
- 시스템
- 블록체인
- kangsecu
- webhacking
- 웹해킹
- 포너블
- 프로그래밍
- 자료구조
- hacking
- 정보보호
- 정보보안
- 워게임
- 보안
- webhacking.kr
- 해킹
- 선린인터넷고등학교
- xcz
- nefus
- C언어
- 네퓨즈
- Pwnable
- DVP
- CTF
- 코드게이트
- wargame.kr
- 버그헌팅
- 버그바운티
- WarGame
- Today
- Total
kangsecu's B1og
[webhacking.kr] pro 46 문제풀이 본문
[webhacking.kr] pro 46 문제를 풀어보도록 하겠습니다. 문제에 들어가면 아래와같은 화면이 출력됩니다.
SQL INJECTION이라고 합니다. 무작정 1을 입력해봤습니다. 그랬더니 위 사진과 같이 출력됩니다. 그럼 이제 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 42 43 | <html> <head> <title>Challenge 46</title> </head> <body> <form method=get action=index.php> level : <input name=lv value=1><input type=submit> </form> <? if(time()<1256900400) exit(); ?> <!-- index.phps --> <? $_GET[lv]=str_replace(" ","",$_GET[lv]); $_GET[lv]=str_replace("/","",$_GET[lv]); $_GET[lv]=str_replace("*","",$_GET[lv]); $_GET[lv]=str_replace("%","",$_GET[lv]); if(eregi("union",$_GET[lv])) exit(); if(eregi("select",$_GET[lv])) exit(); if(eregi("from",$_GET[lv])) exit(); if(eregi("challenge",$_GET[lv])) exit(); if(eregi("0x",$_GET[lv])) exit(); if(eregi("limit",$_GET[lv])) exit(); if(eregi("cash",$_GET[lv])) exit(); $q=@mysql_fetch_array(mysql_query("select id,cash from members where lv=$_GET[lv]")); if($q && $_GET[lv]) { echo("$q[0] information<br><br>money : $q[1]"); if($q[0]=="admin") @solve(); } ?> </body> </html> | cs |
이렇게 코드가 있습니다. 코드를 확인해보면 union,select,from,challenge,0x,limit,cash 이lv값에 파라미터로 들어가면 exit함수가 실행됩니다.
또한 공백, /,*,%가 들어오면 str_replace함수로 필터링이 됩니다. 그리고 값이 admin이면 문제가 해결됩니다.
Exploit Vector
lv에 파라미터로 admin값을 넣어주어야합니다. 근데 앞에 쿼리를 거짓으로 만들어주고 공백을 우회하며 admin값을 대입해야합니다.
하지만 그냥 admin을 넣으니까 안되는걸 봐서는 magic_quotes_gpc가 설정되있는것 같습니다. 그래서 char을 이용하여 우회를 해야합니다.
Exploit
아주간단합니다. 앞에 쿼리에 거짓을 위해서 2값을 넣어준후, or연산자를 이용하여 id=admin값을 넣어주어야합니다.
그런데 magic_quotes_gpc 설정을 우회하기 위하여 '가 없는 char과 아스키코드를 이용하여 admin값을 넣어주어야합니다.
또한 공백은 %0a를 이용하여 str_replace를 우회해야합니다. 그렇다면 최종 쿼리문은 2%0aor%0aid=char(97,100,109,105,110) 입니다.
짜잔
webhacking.kr pro 46 Clear!
'Web Hacking > webhakcing.kr' 카테고리의 다른 글
[webhacking.kr] pro 49 문제풀이 (2) | 2018.02.24 |
---|---|
[webhacking.kr] pro 48 문제풀이 (0) | 2018.02.24 |
[webhacking.kr] pro 12 문제풀이 (4) | 2018.02.23 |
[webhacking.kr] pro 16 문제풀이 (2) | 2018.02.23 |
[webhacking.kr] pro 5 문제풀이 (0) | 2018.02.22 |