문제 페이지는 해당 페이지와 같다.
해당 페이지에는 phone 입력창과 view-source 링크가 존재한다.
입력창에 임의의 숫자 1234 를 입력하여 추가한다.
URL 을 통해 id 가 guest로 추가되는 것을 확인할 수 있다.
view-source 링크를 통해 페이지 소스 코드를 확인한다.
php 부분을 중심으로 해당 코드를 해석해본다.
<?php
$db = dbconnect();
if($_GET['phone'] && $_GET['id']){
if(preg_match("/\*|\/|=|select|-|#|;/i",$_GET['phone'])) exit("no hack");
if(strlen($_GET['id']) > 5) exit("no hack");
if(preg_match("/admin/i",$_GET['id'])) exit("you are not admin");
mysqli_query($db,"insert into chall35(id,ip,phone) values('{$_GET['id']}','{$_SERVER['REMOTE_ADDR']}',{$_GET['phone']})") or die("query error");
echo "Done<br>";
}
상단 부분을 통해 GET 방식으로 전송되는 id 파라미터의 값에 admin을 입력할 수 없다는 것을 알았다.
phone에 어떠한 값을 넣으면 insert into chall35(id,ip,phone) value..... 를 이용하여 데이터베이스에 값을 저장한다.
$isAdmin = mysqli_fetch_array(mysqli_query($db,"select ip from chall35 where id='admin' and ip='{$_SERVER['REMOTE_ADDR']}'"));
if($isAdmin['ip'] == $_SERVER['REMOTE_ADDR']){
solve(35);
mysqli_query($db,"delete from chall35");
}
id=admin and ip=myip 라는 값을 가진 데이터가 있다면, 문제가 풀린다는 것을 알 수 있다.
해당 문제를 풀기위하여 SQL 의 insert 구문을 조작하여 admin 사용자의 정보를 추가해야 한다.
insert into chall35(id,ip,phone) values('guest','ip','1234'),('admin','나의 ip','1234')
상단의 SQL 구문 처럼 입력되도록 phone 입력창에 1234),('admin','나의 ip',1234 을 입력하여 추가 하면 해당 문제가 풀리는 것을 확인할 수 있다.
'프로젝트 > Webhacking.kr' 카테고리의 다른 글
[Webhacking.kr] Challenge(old) 38번 문제 (0) | 2021.07.14 |
---|---|
[Webhacking.kr] Challenge(old) 36번 문제 (0) | 2021.07.13 |
[Webhacking.kr] Challenge(old) 28번 문제 (0) | 2021.07.13 |
[Webhacking.kr] Challenge(old) 23번 문제 (0) | 2021.07.13 |
[Webhacking.kr] Challenge(old) 22번 문제 (0) | 2021.07.13 |