먼저 첫 화면은 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]!=&& $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

+ Recent posts