본문 바로가기
Wargame/webhacking.kr

webhacking.kr 60번

by morae23 2019. 1. 29.

[Race Condition]

 

 

60번 문제를 열면 아래와 같이 Access Denied라는 문자열이 보인다.

 

 



 

 

Access Denied된 이유를 알기 위해 먼저 index.phps 코드를 보면 아래와 같다.

 

 



 

 

우선 쿠키 값에 숫자가 포함되어 있으면 Access Denied가 출력된다.

 

clear()를 호출하는 조건은

if($_GET[mode] == “auth”) 와 if(eregi(“$_SESSION”, $result)) 가 모두 참일 때 이다.

 

if 문 바깥의 코드를 보면

먼저 readme/$_SESSION[id].txt 파일을 생성한 뒤 $SESSION[id] 를 파일에 쓴다.

그 뒤 $_SERVER[REMOTE_ADDR]이 “127.0.0.1”과 같지 않으면 1초간 sleep()한 뒤 파일을 unlink()한다.

 

여기서 알 수 있는 사실은 파일이 생긴 뒤 unlink()되기 전, 즉 1초가 지나기 전에 접근하면 정상적으로 파일을 읽을 수 있다는 것이다.

따라서 서로 다른 쿠키 값을 가진 브라우저를 띄운 뒤 동시에 요청하면 된다.

 

 




 

 

먼저 chrome에서 쿠키 값을 sandsand로 바꾼 뒤 ?mode=auth로 접속하면

아래와 같이 Auth~라는 문자열이 출력된다.

 


 



 

 

safari도 함께 켜서 개발자도구의 console을 통해 쿠키 값을 sand로 바꿔준 뒤 두 브라우저를 이용하여 동시에 페이지에 접속하였다.


 

 



 


 

그 결과 clear할 수 있었다.



 

 



'Wargame > webhacking.kr' 카테고리의 다른 글

webhacking.kr 51번  (0) 2019.01.29
webhacking.kr 53번  (0) 2019.01.29
webhacking.kr 43번  (0) 2019.01.29
webhacking.kr 47번  (0) 2019.01.29
webhacking.kr 49번  (0) 2019.01.29

댓글