반응형

Your idx is 36103


Access Denied

위 문구와 함께 소스보기가 있다.



<?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");
  }
?>
<html><head><title>Challenge 60</title></head><body><a href=./?view_source=1>view-source</a></body></html>


login_chk()함수를 사용하여 idx값을 생성해서 보여주는 걸로 보인다.

내 세션값이 숫자인지 확인하고 있다. 모두 숫자가 아니면 종료된다.

모두 숫자라면 1초의 텀을 주고 mode=auth이면 전체파일을 문자열로 읽어들이는 함수인 file_get_contents 함수를 이용해 result에 담고 idx값이 쓰여 있다면 성공이다.

아닐때는 idx를 이름으로 하는.txt를 열고 안에 idx값을 적는다.

클라이언트 주소가 루프백주소가 아니면 1초뒤 파일을 삭제한다.

순서를 보면 접근하고 1초의 텀이있는데 그사이 파일은 삭제될것이다.

파일이 삭제되기전에 auth=mode로 접근하여 파일을 읽어야 한다.

먼저 phpsessid를 모두 숫자로 바꾸어보자 로그아웃 되면 다시 로그인을 하고

?mode=auth에도 접근해보자 파일이 없어서 성공메세지는 뜨지않는다.

세션이 같다면 같은 프로세스로 인식할것이기 때문에 서로다른 세션의 값을 가지고 같은 요청을 보내야 할것같다.서로 다른 세션값으로 요청을 동시 보낼려면 여러가지 방법이 있는데 나는 vmware를 이용해 가상환경에서 숫자로된 세션을 설정후 접근하고 동시에 접근했더니 성공메세지가 떴다. 가상환경과 세션값은 달라야 하며 여기서도 역시 숫자로만 세션값을 설정해야한다. 

race condition에 관련된 문제인데 웹환경에서 이런식으로 구현한거같다.

보통은 시스템 해킹에 사용되는 방법인것으로 알고있다.






반응형

'보안 > webhacking' 카테고리의 다른 글

webhacking.kr old-61  (0) 2019.12.10
webhacking.kr old-59  (0) 2019.12.09
webhacking.kr old-58  (0) 2019.12.09
webhacking.kr old-56  (1) 2019.12.08
webhacking.kr old-55  (0) 2019.12.08
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기