화면은 아주 단순하다.
소스를 보자
별거 없고 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>
<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 |