通过返回的数据,要么为真要么为假,true和false
靶场less-5
比如如果查寻到则返回页面为真
如果查询失败则没有返回
使其报错
使其不报错
我们控制or后面的条件使其返回我们想要的数据
?id=1222’ or 1 %23
?id=1222’ or 0 %23
substr(要截取的字符串,截取字符串的起始位置,偏移量)
当我们截取字符串与这个字符不等时则返回空
如果相等则返回正确
查看版本信息
第一个字符5
第二个字符.
第三个字符5
以此类推
可以用偏移量判断
查询数据库的第一个字符串
?id=1222’ or (select substr(table_name,1,1) from information_schema.tables where table_schema = database() limit 0,1) = ‘e’ %23
但是这种方法很我们很难判断他的范围
所以我们将查询结果转换为ascii码进行判断
http://172.16.58.244:83/Less-5/?id=1222’ or (select ascii(substr(table_name,1,1)) from information_schema.tables where table_schema = database() limit 0,1) > 1 %23
大于100,不大于102
换成等于号再试
ascii编码是101
我们利用python查询一下ascii编码
这里介绍几个python的函数
chr作用是将一个十进制整型数据转换成 ASCII 码表中对应的单个字符
otc 作用是将一个十进制整型数据转换成八进制表示的字符串。
bin 作用是将一个十进制整型数据转换成二进制表示的字符串。
hex 作用是将一个十进制整型数据转换成十六进制表示的字符串
ord 作用是将一个 ASCII 码表中的单个字符转换成对应的十进制整型数据
chr(101)
查到第一个字符是e
第二个字符同样的方法
109是m
通过这种方式逐一判断
但这种方式还是很慢
我们用bp抓包进行查询
发送到intruder
intruder是一个用来做包的重放的,经常用来做暴力破解
target是我们要渗透的地址和端口
positions是我们要渗透的包
首先先clear
sniper表示只能设置一个包
我们要渗透的是发过来的109的这个数据
添加上变量
然后再payloads里面设置payload type为numbers
从1到128,间隔1
使用intruder start attack爆破
对比长度找到该字符串
其他位置的字符串只需要改对应的位置就行
battering ram能接受两个参数
设置两个变量,然后payload 值只能设置一个,意思就是他俩发送的内容都是一样的
1,1:2,2:3,3……
pitchfork 能给两个变量分别配置两个参数
发的是n个包(最少的那个)分别取得这两个字典得数据
比如我上面的配置
最后得结果就是15个包,取得payload分别是两个字典里的
cluster bomb就是组合所有可能性进行发包
就是
当第一个值为payload1的第一个值时,跑完第二字典的所有第二个值再跑payload1的第二个值
像我们之前的值它就要跑1920遍字典
最后得到结果
判断这个表名称只有6个,再用python的chr函数分别查询这几个字符
得到这个表名称为emails