기능을 알 수 없는 페이지가 나왔다.
<?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");
}
?>
코드를 보니, 정해진 text의 내용과 내 세션이 같으면 flag를 획득할 수 있는 것으로 판단된다.
코드를 나눠서 분석을 하였다.
if(!is_numeric($_COOKIE['PHPSESSID'])) exit("Access Denied<br><a href=./?view_source=1>view-source</a>");
is_numeric 함수가 뭔지 몰라서 검색하니, 값이 숫자인지를 확인하는 함수였다.
위 코드는 쿠키값이 숫자가 아니면, Access Denied를 출력하는 코드였다.
PHPSESSID의 값을 1로 변경했더니, Access Denied가 출력이 안되었다.
$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");
}
쿠키 값이 숫자인 상태로 서버에 페이지를 요청하면, IP가 127.0.0.1이 아닌 접속은 1초 뒤에 생성된 세션이 들어있는 파일을 삭제한다.
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();
}
쿠키값이 숫자인 채로 Get메소드로 mode=auth
를 넘기면, 세션이 들어있는 파일을 읽어서 현재 세션과 같으면 Flag를 출력한다.
나는 1초라는 시간을 이용하기로 하였다.
두 개의 브라우저 세션 쿠키를 숫자로 변경하여, 웨일이 문제 페이지에 접속하여 파일을 생성 후 1초라는 로딩 시간동안 크롬에선 서버에 Get메소드로 ?mode=auth
를 전달하여 웨일 때문에 생성된 파일을 읽어들어서 Flag를 획득하였다.
이러한 방법이 레이스 공격이다.
'워게임 > webhacking.kr' 카테고리의 다른 글
[Webhacking.kr] Old - 8 Write Up (0) | 2021.05.28 |
---|---|
[Webhacking.kr] Old - 3 Write Up (0) | 2021.05.28 |
[Webhacking.kr] Old - 49 Write Up (0) | 2021.05.27 |
[Webhacking.kr] Old - 46 Write Up (0) | 2021.05.27 |
[Webhacking.kr] Old - 11 Write Up (0) | 2021.05.27 |