반응형

폰을 입력하는창과 함께 소스보기가 있다.


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


해석해보자

get으로 폰과 id를 확인하고 필터링을 거치고 id값이 5보다 길면 역시 필터링되고잇다. admin으로 접근하는것또한 막고있다. 이과정을 거친후 id,ip주소,phone을 insert하고 있다.

isadmin라는 변수에는 id가 admin이면서 ip주소를 비교해 참이면 ip값을 받아와 저장하며 이 값이 현재ip주소와 같다면 성공한다고 되어있다. 

그리고 마지막 phone_list로 현재 ip주소에 해당하는 모든 정보들을 받아와 주석으로 표시해 주고있다.

위쿼리문을 참조해서 넣어보자

 1'),('admin',121.175.129.183,2

이렇게 넣어본다. querry error 가 뜬다. 대충 맞는 느낌이 든다.조금 수정해본다.

주소와 phone에 '를 씌워야 될거같다.

1),('admin','121.175.129.183','2' 

성공. 이번문제는 너무 쉽게 풀렷다...



반응형

'보안 > webhacking' 카테고리의 다른 글

webhacking.kr old-38  (0) 2019.12.02
webhacking.kr old-36  (0) 2019.12.01
webhacking.kr old-34  (0) 2019.12.01
webhacking.kr old-33  (0) 2019.12.01
webhacking.kr old-32  (0) 2019.12.01
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기