티스토리 뷰

Wargame/Webhacking.kr

Challenge 60

do9dark 2015. 9. 10. 04:00

페이지에 접근하면 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
댓글
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
링크
공지사항
Total
Today
Yesterday