-
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 '"""))