카테고리 없음
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
'"""))