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 32 33 34 | <? 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를 호출하게 했다.
1 2 3 | 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> |
개인적으로 이 문제에 대한 설명은 이 홈페이지가 가장 잘 되어 있는 것 같다.