常见的绕过思路
在真实环境中,有时我们会遇见一些过滤、函数禁用等情况,这个时候,如果想要进行注入,我们就要掌握一些基本的绕过方式:
- 等价替换: ||------or 、&&------and 、 |--------xor
- 双写绕过 :aandnd (and -1=-1 、 and -1=-2)
- 大小写绕过:oorR
- URL、16进制等编码绕过(也可以是url的二次编码)
- 内敛注释绕过
- 参数污染
- 分块传输
- 模糊测试(利用字典来进行测试,看有那些被过滤)等
- 脏数据(影响长度)
过滤注释符的情况下:使用union来进行union语句拼接结合xml报错来进行数据的注出;
遇到and/or过滤的情况下:双写/大小写/等价替换;
- 遇到空格过滤时:等价替换:
%09-----tab键(水平) 、 %0a -----新建一行,回车 、 %0b------tab键(垂直) 、 %0c------新的一页 、 %0d-------return功能 、 %a0--------空格 、 %00------空字节 、 //-------注释代替空格 、 /!**/-------内敛注释 、 ()---------包裹参数 、 ``-----反引号包裹参数
其他绕过方式
- 绕过单引号过滤:16进制编码、宽字节方式
- 绕过order by过滤:使用union select 1,2,3
- 绕过union select 过滤:union distinct select
- 绕过=号过滤:like、rlike
- 绕过select后的空格过滤:可以使用单引号将select后面的参数包裹
- union distinct select ‘1’,2,3
- union distinct (select ‘1’,2,3)
- 绕过from+空格的过滤:from{x 表名}
- 绕过><:in 、between and
- 绕过逗号过滤:join、from pos for len (代表从pos个开始读取len长度的字串)绕过union select * from (select 1)a join (select 2)b join(select 3)c join(select 4)d 等价与 union select 1,2,3,4 from pos for len
- 绕过sleep函数:benchmark函数替换,benchmark可以测试某些特定操作的执行速度,参数是需要执行的次数和表达式,第一个参数是次数,第二个是表达式:benchmark(1000000000,1)
防御思路
- 代码防御:
黑名单
白名单
字符过滤
规范输出
- 配置层
开启GPC(magic_quotes_gpc)
使用UTF-8
- 物理层
WAF
云防护
IPS
- WAF
软WAF:主机预先安装防护软件,对访问的请求进行过滤、判断,再去进行响应请求;
硬WAF:独立的防护设备,流量指向主机,先经过设备过滤。判断。拦截,再去响应请求;
云WAF:在云端的WAF,请求先经过云端服务器在指向主机;
- WAF的作用
检测异常请求以及协议,拒绝非法HTTP请求。
白名单:允许白名单的ip、用户输入等,用来稳定web应用;
黑名单过滤非法ip,输入等,适合用来处理已知的问题;
对状态管理进行会话保护;
cookies的保护;
信息泄露的保护;