늘모자란, 개발 :: [webhacking.kr] Challenge 60

늘모자란, 개발

들어가면 들어가자마자 Access Denied가 반겨준다.

<?
sleep(1);

if(eregi("[0-9]",$_COOKIE[PHPSESSID])) exit("Access Denied<br><a href=index.phps>index.phps</a>");

if($_GET[mode]=="auth")
{
echo("Auth~<br>");
    $f=@file("readme/$_SESSION[id].txt");
    for($i=0;$i<=strlen($f);$i++)
        {
        $result.=$f[$i];
        }
    if(eregi("$_SESSION[id]",$result))
    {
    echo("Done!");
    @unlink("readme/$_SESSION[id].txt");
    @clear();
    exit();
    }
}


$f=@fopen("readme/$_SESSION[id].txt","w");
@fwrite($f,"$_SESSION[id]");
@fclose($f);

if($_SERVER[REMOTE_ADDR]!="127.0.0.1")
{
sleep(1);
@unlink("readme/$_SESSION[id].txt");
}

?>


Sleep 이 있는걸 보아 exec time을 또 재야될 삘이다.
PHPSESSID에 0-9가 있으면 디나이라는데 이건 진짜 말도 안된다. 어떻게 세션에 숫자가 없을 수가 있지 하는 생각을 가지며 일단은.. 차분히 생각을 해보자..

잘보면 호스트가 아닐 경우에 1초간 기다렸다가 session[id].txt를 지운다고 되어 있다. 1초보다 내가 빨리 리퀘스트 주면 되지 않을까?
지워지기 전에 읽게 하면 나의 승리인것 같다.

브라우저로 빨리 쏘게 하고 싶은데 페이지 자체 sleep 이 있기때문에,

일단 쿠키의 PHPSESSID를 aaaaaaaaaaaaaaaaaa로 전부 수정했다.
그리고 인증을 딴상태에서 python script를 계속 해당페이지를 호출하게 해놓고,
다시 쿠키의 PHPSESSID를 bbbbbbbbbbbbbbbbbb로 바꾸고 브라우저로 들어가서 auth를 호출하게 했다.

Auth~<br>Done!<script>alert('Congratulation!');</script><center><h1><br><br><hr>
<font color=gray>You have cleared the 60 problems.</font><br><br><font color=gre
en><b>Score + 300</b></font><br><hr></h1></center>


개인적으로 이 문제에 대한 설명은 이 홈페이지가 가장 잘 되어 있는 것 같다.
2016/04/04 01:49 2016/04/04 01:49