[Webhacking.kr(old)]-60
처음 페이지에 접속하면 아래와 같은 화면을 볼 수 있다.
view-source를 클릭하여 소스를 확인한다.
<?php
include "../../config.php";
if($_GET['view_source']) view_source();
login_chk();
echo "Your idx is {$_SESSION['idx']}<hr>";
if(!is_numeric($_COOKIE['PHPSESSID'])) exit("Access Denied<br><a href=./?view_source=1>view-source</a>");
sleep(1);
if($_GET['mode']=="auth"){
echo("Auth~<br>");
$result = file_get_contents("./readme/{$_SESSION['idx']}.txt");
if(preg_match("/{$_SESSION['idx']}/",$result)){
echo("Done!");
unlink("./readme/{$_SESSION['idx']}.txt");
solve(60);
exit();
}
}
$p = fopen("./readme/{$_SESSION['idx']}.txt","w");
fwrite($p,$_SESSION['idx']);
fclose($p);
if($_SERVER['REMOTE_ADDR']!="127.0.0.1"){
sleep(1);
unlink("./readme/{$_SESSION['idx']}.txt");
}
?>
<html><head><title>Challenge 60</title></head><body><a href=./?view_source=1>view-source</a></body></html>
아래 쪽 if문을 살펴보면 REMOTE_ADDR
의 값이 127.0.0.1
이 아닐경우 sleep(1)
함수를 실행시킨 후 unlink하는 부분이 존재한다.
if($_SERVER['REMOTE_ADDR']!="127.0.0.1"){
sleep(1);
unlink("./readme/{$_SESSION['idx']}.txt");
}
?mode=auth
로 접속하게 되면 /readme/[idx].txt 의 값을 읽어올 수 있다.
하지만 PHPSSID의 값이 숫자가 아닐 경우 AccessDenied가 반환되므로 값을 숫자로 바꿔준 후 새로운 세션을 하나 더 만들어주고 두개의 세션 모두 로그인을 해준다.
이후 /
경로에 한번 접속한 후 다른세션으로 빠르게 /?mode=auth
로 접속하면
문제를 풀이할 수 있다.
댓글남기기