0x00 前言
随着国家安全法的出台, 网络安全迎来发展的新时期, 越来越多企业或政府单位开始重视网络安全很多网站陆陆续续告别裸奔时代, 开始部署 web 应用防火墙 (WAF) 以应对网络攻击由此, 相关网站的安全性很大程度上取决于 WAF 的防护能力, WAF 攻防研究已成为安全从业人员的必修课之一
大多数 WAF 以规则匹配为基础进行安全防护, 少数 WAF 带有自学习能力, 规则维护成为 WAF 的核心近年来, 基于语义识别的 WAF 陆续出现, 对其防护能力的研究也成为大家关心的热点之一本文以 MySQL 为研究对象, 总结相关 WAF 注入绕过技术, 通过实战演练让大家了解各大 WAF 的相关特性, 最后从攻防角度对 WAF 安全进行总结
0x01 注入绕过技术总结
对已知的 WAF 相关绕过技术, 总结如下, 网上已有相关技巧的讲解, 这里就不一一演示, 不明白的可以自己查询相关资料:
在实际攻击场景中, 单一的绕过技巧往往无效, 需要我们综合利用各种绕过技术进行组合, 结合各自 WAF 特性不断进行推理, 才能真正实现绕过
0x02 注入点检测绕过
Bypass WAF 的第一步是识别注入点, 我们拿到一个 URL, 第一步判断参数是否有注入, 然后再进行后续的绕过简单的 and 1=1 and 1=2 判断肯定会被 WAF 拦截, 我们需转变思路进行绕过, 一般 WAF 为了平衡风险和业务的关系不会对下面数字型探测方式进行拦截, 否则会产生大量误报影响正常业务运行
本地测试环境:
如若 and 也会拦截, 可以直接在参数上进行类似判断操作, 如 id=1*0 id=1*2, 除了以上方法, 还有很多其它衍生出的识别绕过方法, 以 {op} 为例作演示, 其它的方法大家可以按照这种思路自行发挥:
安全狗:
百度云加速:
腾讯云:
阿里云:
当我们已确认注入点后, 下一步的目标是完全 Bypass WAF 出任意数据, 以下以安全狗 modsecurity 百度云加速 阿里云盾长亭雷池截止目前最新的版本为例, 这里只提供绕过的思路, 即如何利用已知技巧进行组合推理来绕过相关 WAF 防护, 出数据具体过程这里就不详解, 大家感兴趣的可以手动尝试
0x03 安全狗 Bypass
本地无 WAF 测试环境:
在对安全狗的绕过测试中发现, 只需利用一个 */ 闭合多个 /*! 即可绕过, 简单粗暴
http://192.168.20.123:81/user.php?id=-11/*!union/*!select/*!1,(select/*!password/*!from/*!test.user limit 0,1),3*/
0x04 Modsecurity Bypass
本地环境搭建 modsecurity 模块进行安全防护, 利用{op}/*!50000*/ 组合进行绕过
http://192.168.20.123/user.php?id=1 and{`version`length((select/*!50000schema_name*/from/*!50000information_schema.schemata*/limit 0,1))>0}
0x05 百度云加速 Bypass
利用 + 进行绕过
0x06 阿里云盾 Bypass
利用 +@自定义变量 {a key} 组合进行绕过
0x07 长亭雷池 Bypass
经过大量测试后, 发现雷池在处理 MySQL 注释符 /*! */ 识别时存在缺陷, 只需把攻击语句放在注释符中即可绕过
0x08 自动化 bypass
当我们挖掘出绕过相关 WAF 进行 SQL 注入的技巧后, 下一步就是编写脚本实现工具自动化注入以 sqlmap 为例, 我们编写 tamper 脚本实现注入自动化
0x09 WAF 防御
对已知或未知的安全问题进行防御是 WAF 功能的核心, 漏报及误报是衡量一个 WAF 产品好坏的重要指标, 具体落实到规则的及时更新 bypass 新技巧的及时响应另外, 还应综合利用拦截日志数据进行相关算法分析, 不断提高 WAF 的防护能力总结来说, 打造一款上乘的 WAF, 非一朝一日之功, 需长期的技术储备产品不断地更新迭代算法地持续优化, 才能把好防御这个重要的关口同时, 不断探索新的高效防护方法, 才能在攻防战中立于不败之地
0xa0 总结
从攻击者角度来看, 绕过 WAF 的基本方法其实不多, 如何把这些已知方法融合起来, 并结合各自 WAF 本身的防护特性, 不断进行推理, 成为突破 WAF 防护的关键当然, 自动化 Fuzz 才是 WAF Bypass 新技术产生的正道另外, 从个人的注入 Bypass 测试过程看, 绕过基于语义识别的 WAF 比绕过基于规则识别的 WAF 难得多, 值得我们挑战
从 WAF 产品角度来看, 衡量一个 WAF 好坏的标准是漏报率和误报率的高低, 但这些指标建立在以 WAF 不影响正常业务为前提测试中我发现, 基于规则的 WAF 对业务的耦合度往往较低, 不管是腾讯云 WAF 还是阿里云盾, 对用户的输入都较为敏感, 如参数中输入注释符请求就会被拦截而基于语义的 WAF 的和业务的耦合度较高, 误报率下降明显从测试结果来看, 基于语义识别的 WAF 相较传统 WAF 来说有较大优势, 值得我们学习和借鉴
从安全管理者角度来讲, 从以上测试过程可以看出, 不管是基于规则的 WAF 还是基于语义识别的 WAF, 都存在被都完全绕过的可能 WAF 的主要作用是提高攻击门槛, 但不能消灭攻击入侵事件, 解决安全问题的根本途径还得从代码层面着手进行修复
来源: https://juejin.im/post/5a93a9a25188257a6b061518