WAF防御思想

  • 攻击的特点

    • 攻击的二象性:已知攻击与未知攻击
    • 攻击的两个维度:形式与漏洞
  • WAF的核心原理:

    • 运用黑白思想
    • 特征匹配
    • 漏洞签名
    • 对匹配结果进行相应(拦截、记录)

WAF绕过

  • 架构
  • 规则缺陷/特性
  • 协议

安全狗MYSQL

超长数据包BYPASS

  • GET型请求转POST型
  • Content-Length头长度大于4008
  • 正常参数放置在脏数据后面,否则无效

空格替换BYPASS

  • 拒绝传统的%20 -> %09 %0a %0b %08
  • GET型转POST型

协议转换BYPASS

  • 使用表单请求中的multipart/form-data
  • 关键词换行

绕waf - 图1

云锁Mysql

规则缺陷特性

  • WAF资源限制角度

假如HTTP请求POST BODY太大,检测所有的内容,WAF集群消耗太大的CPU、内存资源。因此许多WAF只检测前面2M、或4M的内容。对于攻击者而然,只需要在POST BODY前面添加许多无用的数据,把攻击payload放在最后即可绕过WAF检测

非ASCII码字符

MYSQL特性

select id,contents,time from news where news_id=1[1]union[2]select[3]1,2,db_name() [4]from[5]admin

[1]

  • 可利用其他控制字符替换空格 %09,%0a,%0b,%0c,%0d,%20,%a0
  • 可利用注释符号 /**/ #test%0d%0a —+a
  • 可利用数学运算以及数据类型 news_id=1.1 news_id=1e0 news_id=\N

[2]

  • 可利用其他控制字符替换空格 %09,%0a,%0b,%0c,%0d,%20,%a0

  • 可利用注释符号 /**/ #test%0d%0a —+a

  • 可利用括号 union(select 1,2)

[3]

  • 可利用其他控制字符替换空格 %09,%0a,%0b,%0c,%0d,%20,%a0

  • 可利用注释符号 /**/ #test%0d%0a —+a

  • 可利用其他符号:+、-、~、!、@

云锁Mssql

HTTP协议兼容性

HTTP Method多样性

GET参数通过URL传递,POST放在Request Body中

但是GET请求中同样可以传输POST数据。

HTTP BODY兼容性

参数通过表单类型multipart/form-data进行提交