<?
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");
}
?>
<html><head><title>Challenge 60</title></head><body>hi</body></html>
처음에 sleep(1)에서 삭제가 되기전에 그 파일을 열려고 했지만 실패했다. 검색 해본 결과 이유는 $_COOKIE[PHPSESSID]가 같을 경우 같은 쓰래드로 돌기 때문에 레이스 컨디션이 일어나지 않는다. 다른 브라우져에 $_COOKIE[PHPSESSID]를 다르게 설정 해 준 다음 mode=auth로 접속 하게 되면 $_SESSION[id]를 참조 하는 부분에서 레이스 컨디션이 일어나게 되고 나중에 실행한 브라우져에서 인증에 성공할 수 있게 된다.
'webhacking.kr' 카테고리의 다른 글
php wrapper 사용 (0) | 2016.05.11 |
---|---|
54 (0) | 2015.05.06 |