728x90
반응형

300점인 60번 문제를 풀어보자.

첫 화면에서 idx 값이 39315로 주어져 있고, Access Denied가 반환된다.

소스코드를 살펴보자.

 if(!is_numeric($_COOKIE['PHPSESSID'])) exit("Access Denied<br><a href=./?view_source=1>view-source</a>");

쿠키 PHPSESSID가 숫자가 아니면 exit()하게 된다.

$_GET['mode']의 값이 auth 이면 file_get_contents()함수를 이용해 ./readme/{$_SESSION['idx']}.txt 파일을 문자열로 읽어들인다.

39315가 ./readme/{$_SESSION['idx']}.txt에 존재한다면 문제를 해결된다. 

 

세션값을 1로 바꾸고, ?mode=auth로 request해보자.

Auth~ 가 반환된다.

그러나 접속하는 client 주소가 '127.0.0.1' 아닐 경우 sleep(1) 1초 뒤 unlink()함수를 통해 파일이 삭제된다.

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

파일을 읽기 위해 서로 다른 웹브라우저와 다른 세션값을 이용했다.(세션이 같다면 같은 프로세스로 인식하기 때문)

이용 Web browser : 크롬, Firefox

 

1) Firefox 세션 값 설정

url : webhacking.kr/challenge/web-37/?mode=auth

 

2) 크롬 세션 값 설정

url : webhacking.kr/challenge/web-37/?mode=auth

 

3) Firefox에서 request한 뒤, 파일이 삭제되기 전에 1초 내로 크롬에서도 request 시도

해당 문제에서는 Race Condition를 이용하였다.

- Race Condition 이란?

한정된 자원을 동시에 이용하려는 여러 프로세스가 자원의 이용을 위해 경쟁을 벌이는 현상이다.

프로세스, 스레드에서 사용되는 자원이 공유된 상태일 경우 자주 발생하기 때문에 프로세스, 스레드에서 공유된 자원을 동시에 사용되지 않게 해야한다.

Race Condition은 DoS, 데이터 손상, 권한 상승 등의 취약성이 발생될 수 있고, C, C++, Java, C# 등 다양한 언어에서 발생하며, 시스템 바이너리 뿐만 아니라 Web 서비스에서도 발생한다.

728x90
반응형

'CTF & WarGame > webhacking.kr' 카테고리의 다른 글

[webhacking.kr] 61번 문제  (0) 2020.03.17
[webhacking.kr] 59번 문제  (0) 2020.03.17
[webhacking.kr] 58번 문제  (0) 2020.03.16
[webhacking.kr] 57번 문제  (0) 2020.03.16
[webhacking.kr] 56번 문제  (0) 2020.03.16

+ Recent posts