본문 바로가기
CTF, 워게임 문제 풀이/webhacking.kr

Webhacking.kr 8번 문제 풀이

by secumark 2022. 8. 23.
728x90

 

 

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>

 

agent, ip, count_ck, db, result, ck 등의 변수를 쓰고 있다. 

지금 별다른 버튼은 보이지 않고, /from/i는 정규식 표현, agent는 검색 대상 문자열이다. agent가 있으면 Access Denied를 하는거 같고,, count_ck[0]이 70보다 같거나 크면 delete from chall8이라는 값을 출력하는 듯. 참고로 count_ck는 db에서 select count(id) from chall8을 하는 것으로 .. 보인다. 그리고 ck[0]가 admin일때 solve(8)을 하며 문제가 풀리는거 같다. 그게 아니면 query error 또는 insert into~ 이 문자가 출력되는듯하다.

목표는 ck[0]의 값을 admin으로 설정하는 것.

 

일단.. user_agent가 from이 들어가면 안되는걸로 보인다. 

 

 

흠..

 

(고민의 시간)

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)");
}

아래에 있는 이 부분을 잘 봤어야 한다. 결국 이 DB는 agent, ip, guest이렇게 세 개의 필드로 구성되어 있기 때문에 이 db에 admin을 추가해주면 되겠다. 어차피 ip랑 id는 고정되어 있는 값이고.. agent만 바꿔주면 되는데,, admin, 0, admin 뭐.. 이런식으로 추가면 되려나.. sql문 너무 어려워서 눈물이 좔좔

 

admin','0','admin'), ('guest

 

 

엥 done! (8/70)으로 바꼈다.

그럼.. 그럼 이제 ch에 admin이 들어가면 되는데..

여기서 좀 .. 헷갈렸던게 select id from chall8 where agent='".addslashes($_SERVER['HTTP_USER_AGENT'])."'"

여기서 addsl~ 이 부분을 고쳐주면 되는거 같긴한데 user-agent 부분에 그냥 admin이라고 무작정 넣어도 되는지.. 뭔가 이해가 잘 안됐다.

 

시원하게 해결은 못했다.. 다시 복습해야지

 

728x90

댓글