728x90
<?php
$agent=trim(getenv("HTTP_USER_AGENT"));
$ip=$_SERVER['REMOTE_ADDR'];
if(preg_match("/from/i",$agent)){
  echo("<br>Access Denied!<br><br>");
  echo(htmlspecialchars($agent));
  exit();
}
$db = dbconnect();
$count_ck = mysqli_fetch_array(mysqli_query($db,"select count(id) from chall8"));
if($count_ck[0] >= 70){ mysqli_query($db,"delete from chall8"); }

$result = mysqli_query($db,"select id from chall8 where agent='".addslashes($_SERVER['HTTP_USER_AGENT'])."'");
$ck = mysqli_fetch_array($result);

if($ck){
  echo "hi <b>".htmlentities($ck[0])."</b><p>";
  if($ck[0]=="admin"){
    mysqli_query($db,"delete from chall8");
    solve(8);
  }
}

if(!$ck){
  $q=mysqli_query($db,"insert into chall8(agent,ip,id) values('{$agent}','{$ip}','guest')") or die("query error");
  echo("<br><br>done!  ({$count_ck[0]}/70)");
}
?>

HTTP 메시지의 헤더에 보면 HTTP_USER_AGENT가 있다. 클라이언트의 브라우저 정보를 담고 있다.

HTTP_USER_AGENT를 가지고 db에서 id를 조회 후 admin이면 문제가 풀린다.

db에 없는 HTTP_USER_AGENT 정보라면 insert 문을 실행한다.

admin을 insert 후 조회한다면 문제가 풀릴 것이다.

Burp Suite를 이용해 메시지를 가로챈 후 User-Agent를 수정한다.

a', '1','admin'), ('b 를 입력하면 insert 문은 다음과 같이 완성된다.

insert into chall8(agent,ip,id) values('a','1','admin'),('b','내 ip','guest')

하나의 insert 문으로 두 개의 정보를 삽입한다. 그리고 나서 a라는 user-agent 정보를 이용해 조회하면 admin이 반환된다.

새롭게 메시지를 가로채고 User-Agent를 a로 바꾸어 전송한다.

728x90

'webhacking.kr' 카테고리의 다른 글

old-10  (0) 2023.02.20
old-09  (0) 2023.02.20
old-07  (0) 2023.02.18
old-06  (0) 2023.02.18
old-05  (0) 2023.02.18

+ Recent posts