WEB/webhacking.kr (old)

webhacking.kr 60번

hongjw 2020. 4. 11. 02:45

challenge 60 첫화면

view-source 코드해석하기 !

file_get_contents() : 전체파일을 문자열로 읽어들이는 함수

unlink() : 파일을 삭제하는 함수로, 성공하면 true를 반환하고 실패하면 false를 반환

 

$_COOKIE['PHPSESSID']의 값이 숫자가 아니면 Access Denied가 출력된다.

$_GET['mode']가 auth이고, ./readme/{$_SESSION['idx']}.txt 파일에 $_SESSION['idx']값이 들어있으면 파일이 삭제되고, 문제가 해결된다.

$_GET['mode']가 auth이 아니라면, ./readme/{$_SESSION['idx']}.txt 파일에 $_SESSION['idx']를 입력하고, 파일을 닫는다.그리고 만약 ip가 127.0.0.1아니면, ./readme/{$_SESSION['idx']}.txt파일이 삭제된다.

=> $_COOKIE['PHPSESSID']가 숫자이고, $_GET['mode']가 auth일 때 ./readme/{$_SESSION['idx']}.txt파일에 $_SESSION['idx']값이 있어야 문제가 풀린다.

 

여기서 $_GET['mode']이 auth가 아니면, 파일에 $_SESSION['idx']값이 입력되는 것을 이용해야한다. ip주소가 127.0.0.1이 아니기 때문에 파일이 삭제되겠지만, sleep함수로 인해 1초 뒤에 파일이 삭제되는 것을 알 수 있다.

그러므로 파일이 삭제되기 전에 요청을 보내면, 문제가 해결될 것이다 ! (race-condition 문제)

 

저는 파이썬으로 계속 요청을 보내고, 브라우저를 새로고침해서 풀었습니다 ٩(・ิᴗ・ิ๑)۶

import requests
import urllib3

urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)

url 	= "https://webhacking.kr/challenge/web-37/"
headers = { "Cookie" : "PHPSESSID=60" }
proxies = { "http" : "http://127.0.0.1:8888",
			"https": "https://127.0.0.1:8888" }

for i in range(100):
	res 	= requests.get(url=url, headers=headers, proxies=proxies, verify=False)

'WEB > webhacking.kr (old)' 카테고리의 다른 글

webhacking.kr 29번  (0) 2020.04.12
webhacking.kr 35번  (0) 2020.04.12
webhacking.kr 53번  (0) 2020.04.10
webhacking.kr 49번  (0) 2020.04.08
webhacking.kr 48번  (0) 2020.04.06