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 |