这一篇主要总结一下sqlilabs中advanced injection中的用到的各种绕过,也就是less21-less38。
目录
1)数据编码
2)特殊字符、语法关键字过滤
3)存储型注入
4)特殊字符转义与宽字节注入
5)防火墙保护与http参数污染
数据编码
这个是最简单的,就是在普通注入的基础上用响应的编码方式编码一下payload即可,比如sqlilabs上这两个靶站都是用的base64编码。
特殊字符、语法关键字过滤
出现了的过滤与绕过方式:
1)注释符号被过滤:可以采用以 or 'a'='b 结尾的方式绕过。其实注释本来的作用也就是闭合语句,只要抓住这个核心目标就行。比如如果目标参数是双引号包裹的,就可以用 or "a"="b 结尾来绕过。值得注意的是,由于'-'是注释的一部分也被过滤掉了,会带来其它的一些副作用,因为'-'同时也是减号和负号。
2)空格被过滤:可以用%a0来替代空格分割语句。
3)and和or被过滤:可以用&&和||来替代。值得注意的是,这里也会产生一些副作用,比如password会被过滤成passwd,解决这个副作用的方法是双写or,也就是改用passwoorrd,passwoorrd中or被过滤掉之后就变成了password。
4)union和select等被过滤:根据过滤的具体实现方式,可以尝试用sElect,uniOn等来代替。
以less-26a为例展示一个注入脚本:
im