Webhacking.kr - web60
web60
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
<?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");
}
?>
Solution
1
2
3
4
5
race condition 문제
remote_addr이 127.0.0.1이 아니므로 파일이 삭제됨.
그러나 그 사이에 2초라는 시간이 있고, 그 시간동안 읽어내면 됨.
따라서 크롬, 파이어폭스로 각각 로그인하고 쿠키 값도 서로 다른 숫자로 설정하여
실행하면 성공함
This post is licensed under CC BY 4.0 by the author.