화면은 아주 단순하다.

소스를 보자

별거 없고 index.phps로 들어가라고 한다.

들어가 보자.


<html>
<head>
<title>Challenge 8</title>
<style type="text/css">
body { background:black; color:white; font-size:10pt; }
</style>
</head>
<body>
<br><br>
<center>USER-AGENT

<?

$agent
=getenv("HTTP_USER_AGENT");
$ip=$_SERVER[REMOTE_ADDR];

$agent=trim($agent);

$agent=str_replace(".","_",$agent);
$agent=str_replace("/","_",$agent);

$pat="/\/|\*|union|char|ascii|select|out|infor|schema|columns|sub|-|\+|\||!|update|del|drop|from|where|order|by|asc|desc|lv|board|\([0-9]|sys|pass|\.|like|and|\'\'|sub/";

$agent=strtolower($agent);

if(
preg_match($pat,$agent)) exit("Access Denied!");

$_SERVER[HTTP_USER_AGENT]=str_replace("'","",$_SERVER[HTTP_USER_AGENT]);
$_SERVER[HTTP_USER_AGENT]=str_replace("\"","",$_SERVER[HTTP_USER_AGENT]);

$count_ck=@mysql_fetch_array(mysql_query("select count(id) from lv0"));
if(
$count_ck[0]>=70) { @mysql_query("delete from lv0"); }


$q=@mysql_query("select id from lv0 where agent='$_SERVER[HTTP_USER_AGENT]'");

$ck=@mysql_fetch_array($q);

if(
$ck)

echo(
"hi <b>$ck[0]</b><p>");
if(
$ck[0]=="admin")

{
@
solve();
@
mysql_query("delete from lv0");
}


}

if(!
$ck)
{
$q=@mysql_query("insert into lv0(agent,ip,id) values('$agent','$ip','guest')") or die("query error");
echo(
"<br><br>done!  ($count_ck[0]/70)");
}


?>

<!--

index.phps

-->

</body> </html>

소스를 보면 우선 user_agent값을 불러와서 .과 /를 _로 치환하고

pat이라는 것으로 필터링을 해준다.

그리고 또 치환을 하고 user_agent값으로 lv0으로 부터 id를 가져와서

만약 그 값이 존재하는 지를 보고

그 값이 admin이면 클리어 해준다.

그 값이 없으면 들어온 값의 user_agent값과 ip값 그리고 guest로 새로 lv0에 집어넣는다.

이때 우리는 $agent값을 sql injection 해 주어 admin 값을 삽입해 주면 될 것 같다.

우선 burp suite으로 보내는 값을 잡아와 보니

user-agent 란이 보인다.


이 값을 sql injection할 값으로 바꾸어 주어

내가 admin으로 만들때 넣어줄 user-agent값을 기억해 준다.


그리고 내 값을 아까 insert 시킨 user-agent값으로 넣어주면


8번 클리어!!!!


'WebHacking > Webhacking.kr' 카테고리의 다른 글

Webhacking.kr 22번  (0) 2018.01.11
Webhacking.kr 7번  (0) 2018.01.11
Webhacking.kr 11번  (0) 2018.01.09
Webhacking.kr 3번  (0) 2018.01.09
Webhacking.kr 5번  (0) 2018.01.08

+ Recent posts