ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • <Webhacking.kr> old-39
    Wargame/Webhacking.kr 2021. 12. 27. 15:54

    old-39

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

    <?php
      include "../../config.php";
      if($_GET['view_source']) view_source();
    ?><html>
    <head>
    <title>Chellenge 39</title>
    </head>
    <body>
    <?php
      $db = dbconnect();
      if($_POST['id']){
        $_POST['id'] = str_replace("\\","",$_POST['id']);
        $_POST['id'] = str_replace("'","''",$_POST['id']);
        $_POST['id'] = substr($_POST['id'],0,15);
        $result = mysqli_fetch_array(mysqli_query($db,"select 1 from member where length(id)<14 and id='{$_POST['id']}"));
        if($result[0] == 1){
          solve(39);
        }
      }
    ?>
    <form method=post action=index.php>
    <input type=text name=id maxlength=15 size=30>
    <input type=submit>
    </form>
    <a href=?view_source=1>view-source</a>
    </body>
    </html>

     

    $_POST['id'] = str_replace("\\","",$_POST['id']);

    POST로 전달받은 id에서 "\\"를 ""로 변환한다.

     

    $_POST['id'] = str_replace("'","''",$_POST['id']);

     $_POST['id']에서 "'"를 "''"로 변환한다.

     

    $_POST['id'] = substr($_POST['id'],0,15);

    $_POST['id']의 0부터 15개의 문자만 가져온다.

     

    $result = mysqli_fetch_array(mysqli_query($db,"select 1 from member where length(id)<14 and id='{$_POST['id']}"));

    $_POST['id']를 이용해 쿼리를 수행한다.

     

    if($result[0] == 1){
        solve(39);
    }

    위 쿼리를 수행한 결과가 1이면 문제가 풀린다.

     

    쿼리의 결과가 1이면 되고, 쿼리문을 살펴보면 싱글 쿼터의 짝이 맞지 않는다.

    따라서, 1 + 13개의 공백 + 싱글쿼터(')를 입력하면

    $_POST['id']가 "1             ''"로 싱글쿼터가 2개가 되지만 substr()이 0번째 부터 15개이므로 자동으로 걸러준다.

     

    즉, "1              '"을 입력하면

    "select 1 from member where length(id)<14 and id='{$_POST['id']}"에서

    "select 1 from member where length(id)<14 and id='1'"을 입력하면 두 조건 모두 참이 되어 결과값으로 1을 가진다.

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

    <Webhacking.kr> old-59  (0) 2021.12.28
    <Webhacking.kr> old-54  (0) 2021.12.27
    <Webhacking.kr> old-28  (0) 2021.12.25
    <Webhacking.kr> old-29  (0) 2021.12.21
    <Webhacking.kr> old-25  (0) 2021.12.19
Designed by Tistory.