-
[Webhacking.kr] 60번 풀이Wargame/webhacking.kr (old) 2019. 5. 11. 03:42
접근이 거부되었다.
소스를 보자.
sleep()
입력된 초 만큼 소스 실행 지연
unlink()
웹 서버에 존재하는 파일 삭제
소스를 해석해보면, 1초 후 소스가 실행되는데 쿠키 PHPSESSID의 값에 숫자가 존재하면 접근이 거부된다.
readme 디렉터리에 \$_SESSION[id].txt라는 파일을 생성하고, 파일 내용으로 $_SESSION[id]를 적는다.
만약, 접근한 클라이언트의 IP주소가 127.0.0.1이 아니면 1초 후 생성한 파일을 삭제한다.
get방식으로 auth 값을 입력해주었을 경우에는 readme/\$_SESSION[id].txt 파일의 내용을
result 변수에 저장하고, result의 값이 $_SESSION[id]와 같으면 Done!을 페이지에 띄우고,
\$_SESSION[id].txt 파일을 삭제하고 문제가 풀린다.
결론적으로 get 방식으로 auth를 요청하면 문제가 쉽게 풀린다.
일단 접근 거부를 해결해보자.
PHPSESSID값을 숫자가 없는 test로 설정해주었다.
쿠키 값이 변경되었기 때문에 다시 로그인을 해주어야 한다.
다시 로그인 한 후 문제로 접근하면 접근이 허용되어 hi가 출력되고, 쿠키 값은 그대로 test이다.
auth를 요청해보자.
나의 IP주소가 127.0.0.1이 아니라 1초가 지나면 해당 파일이 삭제되어
result 변수에 값이 저장되지 않아 문제가 풀리지 않는다.
\$_SERVER[REMOTE_ADDR]의 값을 변경할 수는 없기 때문에 파일이 생성된 후
1초 안에 auth를 요청하는 방법을 찾아보자.
Race Condition이란?
두 개 이상의 프로세스가 한정된 자원에 동시에 접근하기 위해 경쟁하는 상태
프로세서들이 여러번 번갈아가며 실행되는 과정에서 실행 순서가 바뀔 수도 있어 실행 결과가 달라지는
상황이 발생할 수 있다.
[ Race Condition ] http://searchstorage.techtarget.com/definition/race-condition
Race Conditon을 이용하여 하나의 프로세스는 파일을 생성하고,
다른 하나의 프로세스는 auth를 요청해 파일이 삭제되기 전에 파일을 읽어주면 된다.
여기서 주의할 점은 쿠키 값을 같게 설정해주면 같은 프로세스로 인식된다.
따라서 서로 다른 쿠키의 값을 설정해주어야 한다.
서로 다른 쿠키 값이 필요하기때문에 두 개의 브라우저를 사용한다.
(Chrome : EditThisCookie, Internet Explorer : Cooxie Toolbar)
Cooxie Toolbar를 이용하여 PHPSESSID의 값을 aaaa로 변경하였다.
60번 문제에 접근함과 동시에 파일이 생성되기 때문에 Internet Explorer에서 새로고침함과 동시에
Chrome을 이용하여 auth를 요청해주었다.
(Chrome에서는 미리 ?mode=auth를 입력해두고 있어야 한다.)파일이 삭제되기 전에 읽어오는 것에 성공하여 Done!이 출력되고 문제가 풀렸다.
'Wargame > webhacking.kr (old)' 카테고리의 다른 글
[Webhacking.kr] 61번 풀이 (0) 2019.05.11 [Webhacking.kr] 59번 풀이 (0) 2019.05.11 [Webhacking.kr] 58번 풀이 (0) 2019.05.11 [Webhacking.kr] 57번 풀이 (0) 2019.05.09 [Webhacking.kr] 56번 풀이 (0) 2019.05.09 댓글