웹/webhacking.kr

webhacking.kr 35번

최경환의 해킹공부 2021. 3. 7. 03:46

35번을 들어가면 데이터를 입력할 수 있는 곳과 소스 코드를 확인할 수 있습니다.

이렇게 번호를 넣어서 추가하게 되면

완료되었다는 메시지와 함께 입력했던 데이터와 id의 값이 get 방식으로 전달 된 것을 확인할 수 있습니다. 이제 소스코드를 보겠습니다.

<?php
  include "../../config.php";
  if($_GET['view_source']) view_source();
?><html>
<head>
<title>Challenge 35</title>
<head>
<body>
<form method=get action=index.php>
phone : <input name=phone size=11 style=width:200px>
<input name=id type=hidden value=guest>
<input type=submit value='add'>
</form>
<?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>";
}

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

$phone_list = mysqli_query($db,"select * from chall35 where ip='{$_SERVER['REMOTE_ADDR']}'");
echo "<!--\n";
while($r = mysqli_fetch_array($phone_list)){
  echo htmlentities($r['id'])." - ".$r['phone']."\n";
}
echo "-->\n";
?>
<br><a href=?view_source=1>view-source</a>
</body>
</html>

소스코드를 보면 일단 항상 보던 필터링 부분이 있고, 문제를 풀리는 조건물을 보면 쿼리문을 통해 가져온 ip가 현재 문제를 푸는 사람의 ip와 같으면 문제가 풀리게 됩니다. 그리고 insert문을 보면 어렵지 않게 우리가 쿼리문을 조작해서 공격을 할 수 있다는 것 또한 알 수 있습니다.

 

그래서 phone의 값으로 1), ('admin','221.138.15.59','1234' 을 넣어주면 우리가 원하는 데이터를 db에 저장할 수 있는데 이는 insert 문을 실행할 때 (''),('') 이런식으로 연결하면 연결된 데이터들이 한 번에 db에 저장되게 됩니다. 이를 이용해서 넣어주면 위의 쿼리문에서 $_GET['phone']에 들어가게 되고 최종 쿼리문은 values ('guest','현재 ip',1),('admin','현재 ip','1234') 이런 쿼리문이 완성되게 되고, 결국 최종 목표인 id='admin', ip='현재 나의 ip'인 데이터가 삽입되게 되는 것입니다.

 

현재 저의 ip는 33번 문제에서도 첨부한 링크를 들어가서 ip를 확인했습니다.

ko.infobyip.com/

 

IP 주소 정보

위치, 날씨, 클라이언트 등록 및 더 많은 : IP 주소 및 브라우저에 대한 정보. 고급 인터넷 도구.

ko.infobyip.com

 

위에서 설명한 문을 넣어주기만 하면 문제가 해결됩니다.