티스토리 뷰
페이지에 접근하면 Access Denied와 함께 소스 파일을 제공한다.
소스 파일을 보면 $_COOKIE[PHPSESSID]에 0~9의 값이 있을 경우 Access Denied가 발생하는 것을 볼 수 있다.
따라서 쿠키값을 문자로만 구성하여 적용시키고 다시 로그인을 하면 Access Denied 대신에 hi라는 문구를 볼 수 있다.
GET 파라미터로 mode=auth가 있을 경우 Auth~를 출력한 다음 readme/$_SESSION[id].txt 파일의 내용을 $result에 담는다.
그리고 $result게 담긴 값과 $_SESSION[id] 값이 같을 경우 Done! 이라는 표시와 함께 문제를 해결할 수 있다.
mode=auth가 없을 경우에는 readme/$_SESSION[id].txt 파일을 만들어서 접속한 사용자의 $_SESSION[id] 값을 기록한 다음 접속한 사용자가 로컬이 아닐 경우 sleep(1) 뒤에 만든 파일을 다시 제거한다.
즉, 일반적으로 페이지에 접속하여 파일을 생성하고 삭제하기 전의 시간에 mode=auth을 요청하게 되면 파일이 삭제되기 전이기 때문에 해당 파일을 읽어들여서 문제를 풀 수 있다. 이 문제는 레이스 컨디션과 유사하다.
따라서, 파이썬 스크립트로 파일을 계속해서 생성하도록 반복하고 쿠키 값을 다른 값으로 변경하여 다시 로그인 한 다음 mode=auth을 요청하게 되면 문제를 풀 수 있다.
(abcd 쿠키 값을 가진 세션을 유지하기 위해서 아래의 파이썬 코드를 실행하고 브라우저에서는 쿠키 값을 다른 값으로 변경하게 되면 기존에 쿠키 값은 계속해서 유효하게 사용할 수 있다.)
다른 방법으로는 서로 다른 웹브라우저를 이용하여(쿠키 값이 서로 달라야 한다.) 서로 동시에 접근하여 문제를 풀 수 있다.
#!/usr/bin/python # -*- coding: utf-8 -*- # do9dark import httplib for i in range(0,1000): url = "/challenge/web/web-37/" cookie = {'Cookie':'PHPSESSID=abcd'} conn = httplib.HTTPConnection('webhacking.kr') conn.request('GET',url,'',cookie) data = conn.getresponse().read() conn.close() print data | cs |
'Wargame > Webhacking.kr' 카테고리의 다른 글
*** All Clear *** (0) | 2015.09.10 |
---|---|
Challenge 61 (0) | 2015.09.10 |
Challenge 59 (0) | 2015.09.10 |
Challenge 58 (0) | 2015.09.09 |
Challenge 57 (0) | 2015.09.08 |
Challenge 56 (0) | 2015.09.07 |
Challenge 55 (0) | 2015.09.06 |
Challenge 54 (0) | 2015.09.06 |
Challenge 53 (0) | 2015.09.06 |
Challenge 52 (0) | 2015.09.06 |