카테고리 없음
[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로 변경하면 문제가 풀리게 된다.