ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • webhacking.kr old-39
    카테고리 없음 2024. 6. 1. 09:01

     

     

     

     

    <?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>

     

    일단 혹시 admin이 정답일지 모르니 입력 -> 실패.

    어? 근데 잘 보니 sql에 ' 가 오타가 났는 지 닫혀 있지 않다.

    근데 '를 ''로 변환하기 때문에 저걸 어떻게 닫을 방법이 떠오르지 않는다.

    (저걸 닫아야 원하는 sql 구문을 인잭션할 텐데)

     

    substr을 잘 사용하면 '(quote)를 닫을 수 있을 거 같다.

    15자로 잘리기 때문에 quote의 개수를 홀수개로 만들 수 있을 거 같다.

     

    분명 id=1인 record가 있을 거 같은 데, 문제가 있다.

     

    1aaaaaaaaaaaaa'

    이런 식의 입력을 해봤자 id가 1aaaaaaaaaaaaa인 member는 없을 텐데...

     

    이것 저것 해보다가

    mysql에서 string 형을 int형으로 바꿀 때 개행 문자 같은 것을 생략하고 변환한다는 사실을 알게 됐다.

    print(len("""1
    
    
    
    
    
    
    
    
    
    
    
    
    '"""))

     

    댓글

Designed by Tistory.