먼저 첫 화면은 auth칸을 클릭 가능하게 해 놓았다.
눌러보니 Access_Denied! 이라고 뜬다.
소스를 보니
index.phps로 들어가 보라고 한다.
<html>
<head>
<title>Challenge 7</title>
</head>
<body>
<!--
db에는 val=2가 존재하지 않습니다.
union을 이용하세요
-->
<?
$answer = "????";
$go=$_GET[val];
if(!$go) { echo("<meta http-equiv=refresh content=0;url=index.php?val=1>"); }
$ck=$go;
$ck=str_replace("*","",$ck);
$ck=str_replace("/","",$ck);
echo("<html><head><title>admin page</title></head><body bgcolor='black'><font size=2 color=gray><b><h3>Admin page</h3></b><p>");
if(eregi("--|2|50|\+|substring|from|infor|mation|lv|%20|=|!|<>|sysM|and|or|table|column",$ck)) exit("Access Denied!");
if(eregi(' ',$ck)) { echo('cannot use space'); exit(); }
$rand=rand(1,5);
if($rand==1)
{
$result=@mysql_query("select lv from lv1 where lv=($go)") or die("nice try!");
}
if($rand==2)
{
$result=@mysql_query("select lv from lv1 where lv=(($go))") or die("nice try!");
}
if($rand==3)
{
$result=@mysql_query("select lv from lv1 where lv=((($go)))") or die("nice try!");
}
if($rand==4)
{
$result=@mysql_query("select lv from lv1 where lv=(((($go))))") or die("nice try!");
}
if($rand==5)
{
$result=@mysql_query("select lv from lv1 where lv=((((($go)))))") or die("nice try!");
}
$data=mysql_fetch_array($result);
if(!$data[0]) { echo("query error"); exit(); }
if($data[0]!=1 && $data[0]!=2) { exit(); }
if($data[0]==1)
{
echo("<input type=button style=border:0;bgcolor='gray' value='auth' onclick=
alert('Access_Denied!')><p>");
echo("<!-- admin mode : val=2 -->");
}
if($data[0]==2)
{
echo("<input type=button style=border:0;bgcolor='gray' value='auth' onclick=
alert('Congratulation')><p>");
@solve();
}
?>
<!--
index.phps
-->
</body>
<head>
<title>Challenge 7</title>
</head>
<body>
<!--
db에는 val=2가 존재하지 않습니다.
union을 이용하세요
-->
<?
$answer = "????";
$go=$_GET[val];
if(!$go) { echo("<meta http-equiv=refresh content=0;url=index.php?val=1>"); }
$ck=$go;
$ck=str_replace("*","",$ck);
$ck=str_replace("/","",$ck);
echo("<html><head><title>admin page</title></head><body bgcolor='black'><font size=2 color=gray><b><h3>Admin page</h3></b><p>");
if(eregi("--|2|50|\+|substring|from|infor|mation|lv|%20|=|!|<>|sysM|and|or|table|column",$ck)) exit("Access Denied!");
if(eregi(' ',$ck)) { echo('cannot use space'); exit(); }
$rand=rand(1,5);
if($rand==1)
{
$result=@mysql_query("select lv from lv1 where lv=($go)") or die("nice try!");
}
if($rand==2)
{
$result=@mysql_query("select lv from lv1 where lv=(($go))") or die("nice try!");
}
if($rand==3)
{
$result=@mysql_query("select lv from lv1 where lv=((($go)))") or die("nice try!");
}
if($rand==4)
{
$result=@mysql_query("select lv from lv1 where lv=(((($go))))") or die("nice try!");
}
if($rand==5)
{
$result=@mysql_query("select lv from lv1 where lv=((((($go)))))") or die("nice try!");
}
$data=mysql_fetch_array($result);
if(!$data[0]) { echo("query error"); exit(); }
if($data[0]!=1 && $data[0]!=2) { exit(); }
if($data[0]==1)
{
echo("<input type=button style=border:0;bgcolor='gray' value='auth' onclick=
alert('Access_Denied!')><p>");
echo("<!-- admin mode : val=2 -->");
}
if($data[0]==2)
{
echo("<input type=button style=border:0;bgcolor='gray' value='auth' onclick=
alert('Congratulation')><p>");
@solve();
}
?>
<!--
index.phps
-->
</body>
</html>
소스를 보니 union을 사용해서 풀으라고 적어 놓았다.
소스를 보면 val값에 다가 값을 넣어서 get방식으로 보내는 것인데
필터링으로 다양한 값들을 걸러준다.
그리고 rand값 1~5 중 하나를 택하여
괄호의 갯수가 바뀌어 진다.
그리고 " select lv from lv1 where lv=($go)"
구문이니까
$go 즉 val값에다가 injection을 해 주는 문제이다.
먼저 val = 1) union만 입력하니
cannot use space가 뜬다.
공백은 금지한다고 위의 소스에 적혀있었다.
그래서 union을 괄호 안에다 붙이니 nice try가 뜬다.
그런데 select를 넣으니 오류가 뜬다;;;
공백을 우회해도 마찬가지 이다.
다른 정답을 봐도 이런 방향으로 가는게 맞는데
아마 이걸 봐서는 최근에 서버에 오류가 있는것 같다.
찝찝하게 스톱!!
'WebHacking > Webhacking.kr' 카테고리의 다른 글
Webhacking.kr 46번 (0) | 2018.01.12 |
---|---|
Webhacking.kr 22번 (0) | 2018.01.11 |
Webhacking.kr 8번 (0) | 2018.01.10 |
Webhacking.kr 11번 (0) | 2018.01.09 |
Webhacking.kr 3번 (0) | 2018.01.09 |