总结一些sql-labs中带有过滤关键字的关卡

Less23-28

Less-23

这关对注释符–+和#有过滤

因为id被单引号包裹

解决方法是通过构造payload来闭合单引号

爆数据库

爆表

爆列

如果采取报错注入的话,还有一种方法是通过or ‘1’=’1闭合单引号

如果用count(),group by,floor(rand(0)2)则要用and ‘1’=’1才会报错

延时注入

此处如果用or ‘1’=’1的话会导致后面恒为真,导致前面的sleep不被执行,所以应当换成and ‘1’=’1

Less-25

从源代码可以分析出对关键字or 和and有过滤,并且不区分大小写

由于只过滤一次,所以可以用复写关键字的方法注入关键字or和and

爆数据库

爆表

爆列

延时注入

报错注入

Less-25a

这关没有报出错误信息,所以考虑用延时注入

看出id没有被引号包裹

Less-26

从源代码分析出过滤了关键字and,or,/*,–,#,空格,/

解决方法:(1)双写and 和 or

​ (2)使用or ‘1’=’1 闭合单引号

​ (3) %09 TAB键(水平)

​ %0a 新建一行

​ %0b TAB键(垂直)

​ %0c 新的一页

​ %0d return功能

​ %a0 空格

替代空格,但经过尝试,window下以上所有字符都替代不了空格,迫于无奈只好将源码中过滤空格的语句注释

延时注入

报错注入

联合注入

Less-26a

这题没有报错信息,其余与上题一致

延时注入

看出id被(‘’)包裹

因为没有报错信息,所以无法用报错注入

于是用联合注入

爆库

爆表

爆列

Less-27

这关对关键字union和select有过滤

复写union,三写select或者大小写混合即可解决

这里id被单引号包裹

爆库

爆表

爆列

Less-27a

这关没有报错信息,输入id=1’

输入正确结果,因为id为int类型,所以说明id可能被双引号包裹

输入id=1”

查询不到结果,说明被双引号包裹

这关跟上一关一样,对关键字union和select进行了过滤,因为没有报错信息,所以不能用报错注入

联合注入

Less-28

Id被(‘’)包裹,这关没有报错信息,所以用联合注入

发现union和select 同时使用时就会被过滤掉,而且无视大小写

这里解决方法是复写union\sselect

Less-28a

这关只对union\sselect进行了过滤,无报错信息

复写+联合注入就解决了