[Webhacking.kr] old-08

[Webhacking.kr] old-08

아래는 old-08의 시작화면이다.

hi guest 문구와 view-source 링크밖에 없다.

링크를 클릭하면 아래와 같은 소스코드가 나온다.

Challenge 8 body { background:black; color:white; font-size:10pt; } Access Denied!"); 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 ".htmlentities($ck[0]).""; 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("done! ({$count_ck[0]}/70)"); } ?> view-source

일단 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("done! ({$count_ck[0]}/70)");

}

이때 php 맨 마지막을 보면 $ck에 값이 없을 경우 agent, ip, id를 새로 삽입하는 것을 알 수 있다.

여기서 agent를 이용하면 우리가 원하는 admin 데이터를 삽입할 수 있을 것 같다.

즉 agent를 이용해서 admin 데이터를 새로 삽입한 후, agent를 새로 삽입한 admin에 해당하는 값으로 바꿔주면 해결할 수 있다.

그 결과

old-08 해결!

from http://pd6156.tistory.com/188 by ccl(A) rewrite - 2021-09-18 22:01:07