
이제 다짜고짜 틀렸다고 하는건 놀랍지도 않다. index.phps를 보자.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <hr>
Challenge 33-1<br>
<script>document.write( "<a href=http://webhacking.kr<?=$_SERVER[PHP_SELF]?>s><?=$_SERVER[PHP_SELF]?>s</a>" );</script> <hr>
<?
if ($_GET[get]== "hehe" )
{
echo( "<a href=###>Next</a>" );
}
else
{
echo( "Wrong" );
}
?>
|
사실 뭘 위한 문젠지 진짜 모르겠는데..
$_SERVER의 PHP_SELF는 자기 자신을 가리키는 것이다.
저대로 출력하면 이런 모양이 나온다.
좀 보기에도 이상하긴한데... 문제가 나타나는건 get인자로 hehe를 받으면 된다고 한다.
그러면 그냥.. 현재 경로에 ?get=hehe 를 적어주면 Next로 넘어갈 수 있다. 이러면 클리어인줄 알았는데, next를 누르니 다음 문제가 나왔다.
진짜 놀랠뻔했다. 이렇게 끝나면 안되는게 맞지 암
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <hr>
Challenge 33-2<br>
<script>document.write( "<a href=http://webhacking.kr<?=$_SERVER[PHP_SELF]?>s><?=$_SERVER[PHP_SELF]?>s</a>" );</script> <hr>
<?
if ($_POST[post]== "hehe" && $_POST[post2]== "hehe2" )
{
echo( "<a href=##>Next</a>" );
}
else
{
echo( "Wrong" );
}
?>
|
옳거니 이 문제는 get 과 post를 단디 알고 있나 보려고 낸 문제인가보다.
POST값은 브라우저로 보내기 참 거시기하므로 디버거 도구를 사용하기로 한다.
대강 이런 모양이다.
1 2 3 4 5 6 | POST http:
Host: webhacking.kr
Content-Type: application/x-www-form-urlencoded
Cookie: PHPSESSID={}; kk=1
post=hehe&post2=hehe2
|
그러면 주소가 또 하나 뜬다. 또 index.phps를 봐야한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <hr>
Challenge 33-3<br>
<script>document.write( "<a href=http://webhacking.kr<?=$_SERVER[PHP_SELF]?>s><?=$_SERVER[PHP_SELF]?>s</a>" );</script> <hr>
<?
if ($_GET[myip]==$_SERVER[REMOTE_ADDR])
{
echo( "<a href=##.php>Next</a>" );
}
else
{
echo( "Wrong" );
}
?>
|
내 아이피를 myip에 넣어서 적어주면 될 것 같다.
근데 그럼 또 나온다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <hr>
Challenge 33-4<br>
<script>document.write( "<a href=http://webhacking.kr<?=$_SERVER[PHP_SELF]?>s><?=$_SERVER[PHP_SELF]?>s</a>" );</script> <hr>
<?
if ($_GET[password]==md5( time ()))
{
echo( "<a href=###>Next</a>" );
}
else
{
echo( "hint : " . time ());
}
?>
|
타임스탬프를 찍어주는데 여기서 잠깐 멈칫했다.
time은 계속 변하는데 어떻게 맞추나. 근데 잘생각해보면 그냥 몇십초 땡겨서 새로고침 하고 있으면 되는거였다. 허무...
md5(time()+10) 을 해줘서 얻은값으로 새로고침하고 있으면 또 Next가 나온다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <hr>
Challenge 33-5<br>
<script>document.write( "<a href=http://webhacking.kr<?=$_SERVER[PHP_SELF]?>s><?=$_SERVER[PHP_SELF]?>s</a>" );</script> <hr>
<?
if ($_GET[imget] && $_POST[impost] && $_COOKIE[imcookie])
{
echo( "<a href=###>Next</a>" );
}
else
{
echo( "Wrong" );
}
?>
|
POST, GET, COOKIE다 있어야 통과 시켜준다고 한다
1 2 3 4 5 6 | POST http:
Host: webhacking.kr
Content-Type: application/x-www-form-urlencoded
Cookie: PHPSESSID={}; kk=1;imcookie=hi
impost=1
|
요렇게 하면 3종을 한방에 넘길 수 있다. 또 Next...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <hr>
Challenge 33-6<br>
<script>document.write( "<a href=http://webhacking.kr<?=$_SERVER[PHP_SELF]?>s><?=$_SERVER[PHP_SELF]?>s</a>" );</script> <hr>
<?
if ($_COOKIE[test]==md5( "$_SERVER[REMOTE_ADDR]" ) && $_POST[kk]==md5( "$_SERVER[HTTP_USER_AGENT]" ))
{
echo( "<a href=###>Next</a>" );
}
else
{
echo( "hint : $_SERVER[HTTP_USER_AGENT]" );
}
?>
|
cookie의 test값에 나의 아이피를 md5,
post값으로 md5화한 나의 http user agent를 실어 보내면 된다.
이제 끝날때좀 됐다고 생각하지만 안끝났다. 아직있다
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <hr>
Challenge 33-7<br>
<script>document.write( "<a href=http://webhacking.kr<?=$_SERVER[PHP_SELF]?>s><?=$_SERVER[PHP_SELF]?>s</a>" );</script> <hr>
<?
$_SERVER[REMOTE_ADDR]=str_replace( "." , "" ,$_SERVER[REMOTE_ADDR]);
if ($_GET[$_SERVER[REMOTE_ADDR]]==$_SERVER[REMOTE_ADDR])
{
echo( "<a href=###>Next</a>" );
}
else
{
echo( "Wrong<br>" .$_GET[$_SERVER[REMOTE_ADDR]]);
}
?>
|
아이피에서 .을 빼고 변수에 넣는데 얘를 변수명으로 쓰고 싶은 모양이다.
요즘은 $_SERVER에 들어가는 변수값은 다시 할당 해줄 수 있다는게 포인트다. 결국 변한건 고대로 변하기때문에, if에서 원하는 값은 전부 똑같은 값이다. 아이피니까 따로 올리진 않겠다..
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | <hr>
Challenge 33-8<br>
<script>document.write( "<a href=http://webhacking.kr<?=$_SERVER[PHP_SELF]?>s><?=$_SERVER[PHP_SELF]?>s</a>" );</script> <hr>
<?
extract($_GET);
if (!$_GET[addr]) $addr=$_SERVER[REMOTE_ADDR];
if ($addr== "127.0.0.1" )
{
echo( "<a href=###>Next</a>" );
}
else
{
echo( "Wrong" );
}
?>
|
extract는 전에도 한번 나왔지만 그냥 변수로 쓰겠다는거라 큰 의미는 없다.
$_GET[addr]에 값이 할당되어 있지 않으면 $addr에 원격 아이피, 즉 내 아이피를 넣는다고 말하고 있으므로
$_GET[addr] = 127.0.0.1; 해주어 패스하자
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | <hr>
Challenge 33-9<br>
<script>document.write( "<a href=http://webhacking.kr<?=$_SERVER[PHP_SELF]?>s><?=$_SERVER[PHP_SELF]?>s</a>" );</script> <hr>
<?
for ($i=97;$i<=122;$i=$i+2)
{
$ch=chr($i);
$answer.=$ch;
}
if ($_GET[ans]==$answer)
{
echo( "<a href=###>Next</a>" );
}
else
{
echo( "Wrong" );
}
?>
|
97부터 122까지의 아스키코드를 출력하라는건데 요 아스키코드들은 왠만하면 다 알것 같다. 바로 알파벳 소문자다.
근데 2씩 뛰고 있다. 2씩 뛰면 이런 모양이 되겠지?
acegikmoqsuwy
넣어주고 넘어간다. 벌써 10번.. 이제 끝나겠지 하는 막연한 생각을 가져본다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | <hr>
Challenge 33-10<br>
<script>document.write( "<a href=http://webhacking.kr<?=$_SERVER[PHP_SELF]?>s><?=$_SERVER[PHP_SELF]?>s</a>" );</script> <hr>
<?
$ip=$_SERVER[REMOTE_ADDR];
for ($i=0;$i<= strlen ($ip);$i++)
{
$ip=str_replace($i,ord($i),$ip);
}
$ip=str_replace( "." , "" ,$ip);
$ip=substr($ip,0,10);
@mkdir( "answerip/$ip" );
$answer=$ip*2;
$answer=$ip/2;
$answer=str_replace( "." , "" ,$answer);
$pw= "###" ;
$f= fopen ( "answerip/$ip/$answer.$ip" , "w" );
fwrite ($f, "Password is $pw\n\nclear ip : $_SERVER[REMOTE_ADDR]" );
fclose ($f);
?>
|
좀 읽어야되는 길이가 나와싸.
ip길이만큼 돌면서 해당하는 숫자를 ord해주고 .을 없애는둥 여러 공정을 거치는데 요대로 폴더가 만들어지는것 같고.
구해지는데로 그냥 경로를 넣어주면된다. 내가 매번 말하지만 요런걸 일일히 다 하고 있을 필요가 없다. PHP는 깔기 쉬우니 그냥 해보는게 시간을 절약하는 길이다... ㅠㅠ
어쨌든 넣으면 끝난다. 쓸데없이 길고 점수도 짠... 문제..