Notice
Recent Posts
Recent Comments
Link
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Archives
Today
Total
관리 메뉴

아모에요

[webhacking.kr] old-08 본문

카테고리 없음

[webhacking.kr] old-08

dys4nt 2023. 6. 14. 13:50
<?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_USER_AGENT 값에서 from을 필터링한다.

HTTP_USER_AGENT 값이 db에 저장되어있지 않으면 agent=$_SERVER['HTTP_USER_AGENT],ip=$_SERVER['REMOTE_ADDR'],id='guest'를 db에 저장한다.

 

여기서 agent 값을 마음대로 조작하여 sqli를 발생시킬 수 있다.

 

User-Agent를 dys4nt','127.0.0.1','admin')#로 변경하고

User-Agent를 dys4nt로 변경하면 문제가 풀리게 된다.