아래는 old-08의 시작화면이다.
hi guest 문구와 view-source 링크밖에 없다.
링크를 클릭하면 아래와 같은 소스코드가 나온다.
<?php
include "../../config.php";
if($_GET['view_source']) view_source();
?><html>
<head>
<title>Challenge 8</title>
<style type="text/css">
body { background:black; color:white; font-size:10pt; }
</style>
</head>
<body>
<br><br>
<center>
<?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)");
}
?>
<a href=./?view_source=1>view-source</a>
</body>
</html>
일단 php코드를 해석해보자.
if($ck[0]=="admin"){
mysqli_query($db,"delete from chall8");
solve(8);
}
위 소스코드를 보아하니 $ck[0]가 admin이어야 문제를 해결할 수 있다.
$result = mysqli_query($db,"select id from chall8 where agent='".addslashes($_SERVER['HTTP_USER_AGENT'])."'");
$ck = mysqli_fetch_array($result);
여기서 $ck은 위의 쿼리를 전달한 결과이다.
결과로 admin을 얻으려면 admin의 agent가 필요하다.
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)");
}
이때 php 맨 마지막을 보면 $ck에 값이 없을 경우 agent, ip, id를 새로 삽입하는 것을 알 수 있다.
여기서 agent를 이용하면 우리가 원하는 admin 데이터를 삽입할 수 있을 것 같다.
즉 agent를 이용해서 admin 데이터를 새로 삽입한 후, agent를 새로 삽입한 admin에 해당하는 값으로 바꿔주면 해결할 수 있다.
그 결과
old-08 해결!
'Study > Web Hacking' 카테고리의 다른 글
[Webhacking.kr] old-46 (0) | 2021.09.25 |
---|---|
[Webhacking.kr] old-45 (0) | 2021.09.25 |
[Webhacking.kr] old-03 (0) | 2021.09.18 |
[Webhacking.kr] old-05 (0) | 2021.09.11 |
[Webhacking.kr] old-07 (0) | 2021.09.11 |