<? 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>
개인적으로 이 문제에 대한 설명은 이 홈페이지가 가장 잘 되어 있는 것 같다.