write-up(web)/webhacking.kr

[Webhacking.kr] old-08

chanchand 2023. 2. 27. 17:09
반응형

문제


<?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>

 

 

 

문제풀이


chall8 테이블에 agent, ip, id 컬럼이 존재하며, agent에는 HTTP_USER_AGENT, ip에는 REMOTE_ADDR이 들어간다.

id 개수가 70보다 같거나 많을 때, 테이블은 삭제된다.

 

select id from chall8 where agent='".addslashes($_SERVER['HTTP_USER_AGENT'])

해당하는 agent가 존재할 때, id값을 반환한다.

존재하면 id 값을 화면에 출력하고, 존재하지 않으면 insert문을 통해 추가한다.

이 때, id가 admin일 때 문제를 해결할 수 있다.

 

 

 

- admin id 추가

insert문의 id가 guest로 고정되어 있는데, 이를 조작하여 admin id를 추가할 수 있다.

insert into chall8(agent,ip,id) values ('test',1','admin'),('tt','{$ip}','guest')

 

- 조회

agent가 test인 id를 조회한다.

select id from chall8 where agent='test'

 

반응형

'write-up(web) > webhacking.kr' 카테고리의 다른 글

[Webhacking.kr] g00gle2  (0) 2023.09.21
[Webhacking.kr] RPG1  (0) 2023.09.21
[Webhacking.kr] old-07  (0) 2023.02.27
[Webhacking.kr] old-06  (0) 2023.02.19
[Webhacking.kr] old-05  (0) 2023.02.19