ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • <Webhacking.kr> old-26
    Wargame/Webhacking.kr 2021. 12. 12. 22:05

    old-26

    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
Designed by Tistory.