Web Hacking/webhacking.kr 풀이

old39 write-up

박연준 2024. 1. 10. 21:35

문제 정보

https://webhacking.kr/challenge/bonus-10/

 

Chellenge 39

 

webhacking.kr

 

 

풀이

 

문제에 접속하면 입력폼과 view-source를 클릭하도록 되어있다.

view-source 에서 제공되는 소스코드는 다음과 같다.

분석해보면 먼저 가장 아래 부분에 form 태그로 index.php 파일에 post 메소드를 통해서 id 이름의 text 폼이 존재한다. 

위에 있는 php 소스 코드는 post로 전송되는 id 값에 str_replace 함수를 이용해서 \\을 공백으로 치환하고 '를 ''(싱글 쿼터 2개)으로 치환한다. 또한 substr 함수를 이용해서 id의 값을 0의 위치부터 15의 위치까지 뽑아온다.

마지막으로 result 변수에 요청 쿼리가 참일 경우 solve인 것을 알 수 있다.

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

 

 

 

먼저 아래의 $result[0]의 값이 1이 되어야 하기 때문에 id에 어떤 값이 입력되어야 하는지 보면, 요청되는 쿼리는 member 테이블의 컬럼이 1을 조회하고 있다. 조건으로는 id의 길이가 14보다 작고 id=[전송되는 id값] 이라고 한다.

$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);
    }
  }

 

잘 보면 요청되는 id 값의 뒤에 싱글쿼리가 하나 빠져있는 걸 볼 수 있다. 이를 통해서 어떻게 작성할건지 생각해보면 컬럼이 그냥 1이므로 id는 id로 맞춰주고 싱글쿼리를 무조건 작성해야 요청이 올바르게 작성될 수 있다. substr 함수는 0부터 15개의 문자를 나타내므로 id            '이렇게 작성해주면 뒤에 또 작성되는 싱글쿼리가 substr 함수에 의해서 짤리게 될 것이다.

 

 

'Web Hacking > webhacking.kr 풀이' 카테고리의 다른 글

old-32 write-up  (0) 2024.01.10
old-06 write-up  (0) 2024.01.10
old-38 write-up  (0) 2024.01.10
old-24 write-up  (0) 2024.01.10
old-16 write-up  (0) 2024.01.10