카테고리 없음

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












'"""))