문제페이지는 해당 페이지와 같다.

입력창이 하나가 존재하고 view-source 라는 링크가 존재한다.
view-source 링크를 통해 해당 페이지의 소스코드를 확인한다.

<?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);
}
}
?>
소스코드 중 상단의 코드를 중심으로 해석한다.
POST 형식으로 id 파라미터 값을 받아와 str_replace 함수를 이용하여 \\ 는 공백으로, ' (작은 따음표) 는 '' (작은따옴표 2개) 로 치환하고 substr 함수를 이용하여 15글자까지 제외한 부분은 자른다.
그리고 연결한 db의 member 테이블에서 id 파라미터 값이 14보다 작고 POST 형식으로 받아온 id 파라미터 값과 같은 경우 1을 출력하여 $result 변수에 저장한다.
이때 변수에 1이 저장되면 문제가 풀린다는 것을 알 수 있다.
여기서 주의해야 하는 부분은 $result 변수에 저장될 결과값을 만드는 쿼리 구문이다.
mysqli_fetch_array(mysqli_query($db,"select 1 from member where length(id)<14 and id='{$_POST['id']}"));
상단 구문의 마지막 부분인 id ='{$_POST['id'] } 부분에서 작은 따옴표가 닫히지 않은 것을 확인할 수 있다.
그렇기 때문에 작은 따옴표를 하나 더 추가해야한다. 하지만 작은 따옴표 하나는 두개로 치환 되기 때문에 마지막 하나는 substr() 함수로 잘리게 15번째 칸에 작성되어야 한다.
최종적으로 입력창에 (1 + 공백 13개 + 작은따옴표) 를 입력하면 문제가 풀린다.



'프로젝트 > Webhacking.kr' 카테고리의 다른 글
[Webhacking.kr] Challenge(old) 42번 문제 (0) | 2021.07.14 |
---|---|
[Webhacking.kr] Challenge(old) 41번 문제 (0) | 2021.07.14 |
[Webhacking.kr] Challenge(old) 38번 문제 (0) | 2021.07.14 |
[Webhacking.kr] Challenge(old) 36번 문제 (0) | 2021.07.13 |
[Webhacking.kr] Challenge(old) 35번 문제 (0) | 2021.07.13 |