본문 바로가기

webhacking.kr

60

<?
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