-
<Webhacking.kr> old-26Wargame/Webhacking.kr 2021. 12. 12. 22:05
view-source를 통해 페이지 소스 코드를 살펴보면
<?php include "../../config.php"; if($_GET['view_source']) view_source(); ?><html> <head> <title>Challenge 26</title> <style type="text/css"> body { background:black; color:white; font-size:10pt; } a { color:lightgreen; } </style> </head> <body> <?php if(preg_match("/admin/",$_GET['id'])) { echo"no!"; exit(); } $_GET['id'] = urldecode($_GET['id']); if($_GET['id'] == "admin"){ solve(26); } ?> <br><br> <a href=?view_source=1>view-source</a> </body> </html>
GET 방식으로 전달받는 id에서 "admin"이란 문자열을 필터링한다.
만약 "admin" 문자열이 포함되어있으면 "no!"라는 메시지를 출력하고 종료된다.
그리고 id는 id를 urldecode()로 처리한 값이다.
이 값이 "admin"과 같다면 문제가 풀린다.
URL은 ASCII 코드를 이용하고 인터넷을 통해서만 전송할 수 있다.(#을 %23으로 하는 것처럼)
따라서, 브라우저는 전송 데이터를 URL encoding하여 전송하게 된다.
또한 PHP 문서에 따르면, $_GET 및 $_REQUEST는 자동으로 urldecode()를 수행한다고 나와있다.
그럼 이 문제에서는 urldecode()를 2번 하게 된다.
GET으로 전달받은 id의 값이 "admin"이면 되기 때문에
"admin"에 urlencode()를 두 번하면 된다.
URL encoding 방식은 ASCII 코드표에서 매칭 되는 hex 값 앞에 "%"를 붙이면 된다.
그럼 admin을 URL encoding 하면 %61%64%6D%69%6E가 된다.
이 값을 한 번 더 URL encoding 하면 %2561%2564%256D%2569%256E가 나오게 된다.
이 값을 이용해
?id=%2561%2564%256D%2569%256E를 입력하면
문제를 해결할 수 있다.
'Wargame > Webhacking.kr' 카테고리의 다른 글
<Webhacking.kr> old-25 (0) 2021.12.19 <Webhacking.kr> old-33 (0) 2021.12.15 <Webhacking.kr> old-27 (0) 2021.12.12 <Webhacking.kr> old-23 (0) 2021.12.06 <Webhacking.kr> old-24 (0) 2021.12.06