DINGA DINGA
article thumbnail
Published 2021. 10. 2. 13:14
[Challenge(Old)] old-35 (35) WEB/Webhacking.kr
728x90

https://webhacking.kr/challenge/web-17/

 

Challenge 35

 

webhacking.kr

 

초기 화면이다.

소스코드를 살펴보았다.

 

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

phone과 id를 입력받게 되어 있다.

 

phone에는 *, /, =, select, #, ;으로 필터링이 걸려 있고,

id는 admin이 필터링 되며, 값이 5를 넘지 않아야 한다.

 

id, 사용자의 ip, phone은 insert문을 통해 입력이 되고,

id='admin', ip=아이피일 때 ip가 일치하면 문제가 해결된다.

 

phone 부분을 통해 두 가지 정보를 insert 하기 위해

1), ('admin', '내 아이피', 1 와 같이 입력했다.

 

Clear!

728x90

'WEB > Webhacking.kr' 카테고리의 다른 글

[Challenge(Old)] old-53 (35)  (0) 2021.10.09
[Challenge(Old)] old-46 (30)  (0) 2021.10.02
[Challenge(Old)] old-08 (35)  (0) 2021.09.25
[Challenge(Old)] old-07 (30)  (0) 2021.09.25
[Challenge(Old)] old-05 (30)  (0) 2021.09.19