본문 바로가기
CTF, 워게임 문제 풀이/webhacking.kr

webhacking.kr 35번 문제

by secumark 2022. 9. 15.
728x90

 

소스코드 먼저 봤다.

 

<?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 부분에 123을 입력하고 add 했더니 url에 phone=123&id=guest라고 저장이 된다.

 

소스코드를 보면  /\*|\/|=|select|-|#|;/i 이렇게 hack이 불가능하게 설정해놨고

id 길이가 5보다 길면 그것도 no hack이 돼버린다;

id에 admin이라고 쓰면 you are not admin이라고 함..

 

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

 

여기서 isAdmin의 ip가 SERVER의 IP주소와 같으면..? 문제가 풀리나..보다

그리고 지금 테이블에 저장을 하고 있는거 같은데

  mysqli_query($db,"insert into chall35(id,ip,phone) values('{$_GET['id']}','{$_SERVER['REMOTE_ADDR']}',{$_GET['phone']})") or die("query error");
  echo 
"Done<br>";

id, server, get 이렇게 받고 있는건가..? 보면 phone부분에는 admin을 적어도 괜찮은거 같다. 

1111),('admin','내 ip주소','1234')

 

그리고 이때 마지막 ) 소괄호는 빼줘야 한다.

728x90

'CTF, 워게임 문제 풀이 > webhacking.kr' 카테고리의 다른 글

webhacking 38번 문제  (0) 2022.10.13
webhacking.kr 36번 문제  (0) 2022.09.15
webhacking.kr 34번 문제  (0) 2022.09.15
webhacking.kr 33번 문제  (1) 2022.09.13
webhacking.kr 32번 문제  (0) 2022.09.05

댓글