[Webhacking.kr] 39번

2017. 9. 28. 22:34

문제다. 입력창과 제출버튼이 있다.


소스를 보자.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
<html>
<head>
<title>Chellenge 39</title>
</head>
<body>
<!-- index.phps -->
 
 
<form method=post action=index.php>
<input type=text name=id maxlength=15 size=30>
<input type=submit>
</form>
</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
27
28
29
30
<html>
<head>
<title>Chellenge 39</title>
</head>
<body>
 
<?
$pw="????";
if($_POST[id])
{
$_POST[id]=str_replace("\\","",$_POST[id]);
$_POST[id]=str_replace("'","''",$_POST[id]);
$_POST[id]=substr($_POST[id],0,15);
$q=mysql_fetch_array(mysql_query("select 'good' from zmail_member where id='$_POST[id]"));
if($q[0]=="good") @solve();
}
?>
 
<form method=post action=index.php>
<input type=text name=id maxlength=15 size=30>
<input type=submit>
</form>
</body>
</html>
 
cs


POST로 id를 받아서 필터링을 거쳐 query에 넣는다.


필터링으로는 \을 없애고, 싱글쿼터(')을 싱글쿼터 2개('')로 바꾼다.


그리고 substr(문자열, 시작index, 길이) 함수를 이용해 앞 15글자를 잘라서 $_POST[id]에 저장하고 다음 쿼리에 넣는다.


select 'good' from zmail_member where id='$_POST[id]


그리고 이 결과 q[0] 값이 "good"이라면 solve이다.


일단 제출값으로 아무값이나 넣어봤다... 오류가 뜬다. 

아마 위 쿼리문의 마지막 '(싱글쿼터)가 없어서 오류가 뜨는 것같다.


그런데 저 값이 필터링에 의해 바뀌어 버리니...;;


그런데 여기서 싱글 쿼터가 2개가 되는 이 상황에서 싱글쿼터를 1개로 만들 방법이 substr함수에 있다.

POST[id]값이 15자를 넘어가게 되면 0-15까지만 짤라서 사용하므로 만약 싱글쿼터가 15번째에 위치한다면 

replace에 의해 16번째에 생기게 된 싱글쿼터 하나가 짤리게 될 것이다.


이제 입력하자 admin+(공백)*9+'를 하면 될 것 같다.

admin         '






You have cleared the 39 problems.

Score + 100


참고로 admin말고도 (good          ')을 입력해도 성공한다.


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

[Webhacking.kr] 54번  (0) 2017.09.28
[Webhacking.kr] 47번 Mail Header injection  (0) 2017.09.28
[Webhacking.kr] 38번  (0) 2017.09.25
[Webhacking.kr] 33번  (0) 2017.09.21
[Webhacking.kr] 32번  (0) 2017.09.18

+ Recent posts