[Webhacking.kr] 27번

2017. 9. 6. 23:52

SQL INJECTION 문제이다.


소스를 보자.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
<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>
<!-- index.phps -->
</body>
</html>
 
cs




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
<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


소스이다.


get방식으로 index.php에 입력에창에 적힌 값을 보내준다. 


get방식으로 보내지는 값의 이름은 no이고 이 no는 eregi 함수에 의해 필터링된다.


필터링되는 값으로 #, union, from, challenge, select, ( , \t, / limit, =. 0x 등이 있다.


그 뒤 쿼리로서 select id from challenge27_table where id='guest' and no=() 의 괄호안에 no값이 넣어서 입력된다.

만약 이 결과로 얻은 id가 guest이면 guest를 출력하고 admin이라면 solve를 출력한다.

(물론 아무것도 안되고 문법적으로 틀렸다면 query error를 출력한다)


admin이 아이디가 되게 SQL을 짜면 될것 같다.



일단 no에 숫자를 넣어서 출력되는 값이 있는지 보앗다.


no=0은 아무것도 출력되지 않았다.

no=1은 guest가 출력되었다.

no=2부터는 query error가 출력되었다.


아마 admin은 no=0으로 추정된다. (2도 될수 있다.)


이제 쿼리를 수정해보자.


괄호로 둘러싸여있으므로 수정할때에  no=0) or no=2 으로 괄호를 넣어서 최종적으로 and no=(0) or no=2)가 되게 해보았다.


하지만 이럴 경우 쿼리의 끝에 짝이 없는 )가 남아있어 오류가 생긴다.


이 경우를 회피하기 위해 주석처리인 --을 이용한다. (#도 주석처리지만 필터에 의해 막혀있다.)


그래서 최종적으로 입력되는 값은 아래와 같다.


no=0) or no=2 -- 


(참고로 -- 는 앞뒤로 공백을 넣어줘야 주석처리가 된다.)


하지만 위 값을 넣으면 no hack이라고 출력된다. '='값이 필터링되기 때문이다.

이것을 우회하기 위해서는 sql문법중 '='와 같은 역할을 하는 'like'를 이용하면 된다.


no=0) or no like 2 -- 


가 된다. 먼저 


0) or no like 0 -- 


을 넣어보았으나 query error가 떳다.


두번째로 


0) or no like 2 -- 


를 넣자 성공하였다. 성공~


클리어






You have cleared the 27 problems.

Score + 150



'Wargame > 웹해킹(Webhacking.kr)' 카테고리의 다른 글

[Webhacking.kr] 33번  (0) 2017.09.21
[Webhacking.kr] 32번  (0) 2017.09.18
[Webhacking.kr] 26번  (0) 2017.09.06
[Webhacking.kr] 25번  (0) 2017.09.06
[Webhacking.kr] 24번  (0) 2017.09.06

+ Recent posts