기능을 알 수 없는 페이지가 나왔다.

 

<?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
복사했습니다!