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