【深蓝实验室天魁战队】WAF的识别、检测、绕过原理与实战案例
字数 2575 2025-08-12 11:33:43

WAF的识别、检测与绕过技术详解

1. WAF基础概念

1.1 WAF简介

Web应用防火墙(WAF)是一种专门用于保护Web应用程序的安全解决方案,通过分析HTTP/HTTPS流量来识别和阻止恶意请求。

1.2 WAF检测原理

WAF主要通过以下方式检测攻击:

1.2.1 基于规则匹配

  • 使用正则表达式匹配攻击特征
  • 示例:匹配concat()函数但不会匹配字符concat
  • 绕过方法:利用解析差异,如concat ()(添加空格)

1.2.2 基于语义分析

  • 模拟执行输入参数并判断结果
  • 类似于webshell检测引擎
  • 绕过更复杂,需利用WAF引擎与后端服务器引擎的解析差异

1.2.3 RASP技术

  • 运行时应用自我保护技术
  • 示例:拦截所有PHP/JSP脚本文件的写入操作

1.3 WAF部署方式

  • DNS解析地址部署
  • 软件部署
  • 串联部署
  • 透明部署
  • 网桥部署
  • 反向代理部署
  • 旁路部署

2. WAF分类

2.1 云WAF

  • 通过DNS技术实现
  • 移交域名解析权进行防护
  • 请求先发送到云端节点检测

2.2 硬件WAF

  • 部署在Web服务器前
  • 过滤所有外部流量
  • 通过规则库匹配攻击特征

2.3 软件WAF

  • 安装在防护服务器上
  • 通过监听端口或Web容器扩展方式检测

2.4 其他WAF

  • 中间件自带WAF模块
  • 网站内置WAF
  • 开源WAF:Naxsi、OpenRASP、ModSecurity

3. WAF识别技术

3.1 识别工具

  • wafw00f:默认155个指纹
  • nmap:默认19个指纹
  • sqlmap:默认94个指纹

3.2 常见WAF识别示例

3.2.1 阿里云盾

def is_waf(self):
    schemes = [
        self.matchContent(r'error(s)?\.aliyun(dun)?\.(com|net)?'),
        self.matchCookie(r'^aliyungf_tc='),
        self.matchContent(r'cdn\.aliyun(cs)?\.com'),
        self.matchStatus(405)
    ]
    if all(i for i in schemes):
        return True
    return False

3.2.2 安全狗

def is_waf(self):
    schemes = [
        self.matchCookie(r'^safedog\-flow\-item='),
        self.matchHeader(('Server', 'Safedog')),
        self.matchContent(r'safedogsite/broswer_logo\.jpg'),
        self.matchContent(r'404\.safedog\.cn/sitedog_stat.html'),
        self.matchContent(r'404\.safedog\.cn/images/safedogsite/head\.png')
    ]
    if any(i for i in schemes):
        return True
    return False

3.2.3 腾讯云

def is_waf(self):
    schemes = [
        self.matchContent(r'waf\.tencent\-?cloud\.com/')
    ]
    if any(i for i in schemes):
        return True
    return False

3.2.4 云锁

def is_waf(self):
    schemes = [
        self.matchCookie(r'^yunsuo_session='),
        self.matchContent(r'class=\"yunsuologo\"')
    ]
    if any(i for i in schemes):
        return True
    return False

4. WAF拦截页面特征

4.1 云WAF拦截页面

  • 阿里云盾:https://errors.aliyun.com/images/TB1TpamHpXXXXaJXXXXeB7nYVXX-104-162.png
  • 腾讯云:进程名BaradAgent.exesgagent.exe
  • 360磐云:服务名QHWafUpdata,进程名360WebSafe.exe

4.2 硬件WAF拦截页面

  • 安恒明御WAF
  • 长亭SafeLine
  • 盛邦RayWAF

4.3 软件WAF拦截页面

  • 网站安全狗:服务名SafeDogCloudHelper
  • 云锁:监听端口5555,服务名YunSuoAgent
  • D盾:服务名d_safe

5. WAF绕过技术

5.1 架构层绕过

5.1.1 绕过云WAF寻找源站

  • 目标域名历史解析IP查询
    • site.ip138.com
    • ipchaxun.com
    • DNSDB: dnsdb.io/zh-cn/
  • 页面/js源码爬取IP
    • 工具:JSFinder
    • Burp敏感信息高亮插件
  • 暴露真实IP的边缘业务
    • 通过子域名定位真实IP
  • HOSTS碰撞
  • 其他思路:
    • SSL证书查询
    • 搜索引擎快照
    • GitHub源代码泄露
    • 子站攻击

5.2 资源限制绕过

5.2.1 填充垃圾字符

  • URI: /xxx?data=aaaaaaa...aaaaa&cmd=whaomi
  • SQL: 11111111...111111111' and 1=1 --1'/*aaa...aaa*/ and 1=1 --
  • Body: a=aaaaaaa- --&b=bbbb...&pay1oad=...
  • filename: name="uploaded"; filename222... ="xxxx.filename="x.txt"

5.2.2 高并发

  • 爆破模块持续发包
  • 结合payload字典进行fuzz

5.3 协议层绕过

  • 利用HTTPS协议(若WAF未配置SSL解密)
  • 利用chunk分块传输
  • 去掉请求头中的请求方法

5.4 规则层绕过

5.4.1 等价替换

  • 字符集编码绕过(IBM037、IBM500等)
  • 不同服务器支持的编码:
    • Nginx,uWSGI-Django-Python3: IBM037、IBM500等
    • Apache-TOMCAT8-JVM1.8-JSP: IBM037、IBM500等
    • IIS6、7.5、8、10 -ASPX: IBM037,IBM500等

5.4.2 字符干扰

  • 空字符
  • 注释符
  • 空白字符

5.4.3 特殊符号利用

  • MySQL注入允许符号:.,%.0,0,&\N,-.0,=\N,<0.,>0.,e0,^0.
  • MSSQL注入允许符号:%00-%20范围内的控制字符

6. WAF绕过实战案例

6.1 脏数据填充绕WAF

Content-Type: multipart/form-data;此处填充12187以上个字符Boundary=1750181627257789624103726579
Content-Type: multipart/form-data;Boundary此处填充12187以上个字符=1750181627257789624103726579

6.2 SQL注入绕WAF

  • 默认payload被拦截
  • 绕过payload: 1'+/*!33441and*/+1=1%23

6.3 双写filename绕WAF

  • 绕WAF传压缩文件技巧
  • 专业版传压缩文件可能无法利用,社区版Burp可规避

6.4 文件上传绕WAF思路

  1. 截断思路:filename前加%00、空格、换行
  2. 特殊字符:form-data;改为~form-data;
  3. 大小写敏感:content-Type改为content-type
  4. 畸形格式:删除form-data冒号及属性
  5. 空格思路:Content-Type : multipart/form-data ; boundary =
  6. 换行思路:filename=后换行,文件名每个字符换行
  7. 畸形数据包:删除content-Type: image/jpeg
  8. 特殊协议:通过chunked编码提交
  9. 转义符号:boundary="aa\ "bbb"
  10. 特殊字符扩展名:fi1ename=file_name: .php
  11. 重复参数:多个boundary或filename
  12. 特殊字符编码:使用ibm037、utf-32等编码

7. 参考资源

  1. WAF介绍:https://www.cnblogs.com/realjimmy/p/12937247.html
  2. WAF攻防研究之四个层次Bypass WAF:https://xz.aliyun.com/t/15/
  3. 编码导致的WAF安全性研究
  4. 隐藏资产探测:https://www.cnblogs.com/Rain99-/p/13756032.html
WAF的识别、检测与绕过技术详解 1. WAF基础概念 1.1 WAF简介 Web应用防火墙(WAF)是一种专门用于保护Web应用程序的安全解决方案,通过分析HTTP/HTTPS流量来识别和阻止恶意请求。 1.2 WAF检测原理 WAF主要通过以下方式检测攻击: 1.2.1 基于规则匹配 使用正则表达式匹配攻击特征 示例:匹配 concat() 函数但不会匹配字符 concat 绕过方法:利用解析差异,如 concat () (添加空格) 1.2.2 基于语义分析 模拟执行输入参数并判断结果 类似于webshell检测引擎 绕过更复杂,需利用WAF引擎与后端服务器引擎的解析差异 1.2.3 RASP技术 运行时应用自我保护技术 示例:拦截所有PHP/JSP脚本文件的写入操作 1.3 WAF部署方式 DNS解析地址部署 软件部署 串联部署 透明部署 网桥部署 反向代理部署 旁路部署 2. WAF分类 2.1 云WAF 通过DNS技术实现 移交域名解析权进行防护 请求先发送到云端节点检测 2.2 硬件WAF 部署在Web服务器前 过滤所有外部流量 通过规则库匹配攻击特征 2.3 软件WAF 安装在防护服务器上 通过监听端口或Web容器扩展方式检测 2.4 其他WAF 中间件自带WAF模块 网站内置WAF 开源WAF:Naxsi、OpenRASP、ModSecurity 3. WAF识别技术 3.1 识别工具 wafw00f:默认155个指纹 nmap:默认19个指纹 sqlmap:默认94个指纹 3.2 常见WAF识别示例 3.2.1 阿里云盾 3.2.2 安全狗 3.2.3 腾讯云 3.2.4 云锁 4. WAF拦截页面特征 4.1 云WAF拦截页面 阿里云盾: https://errors.aliyun.com/images/TB1TpamHpXXXXaJXXXXeB7nYVXX-104-162.png 腾讯云:进程名 BaradAgent.exe 、 sgagent.exe 等 360磐云:服务名 QHWafUpdata ,进程名 360WebSafe.exe 4.2 硬件WAF拦截页面 安恒明御WAF 长亭SafeLine 盛邦RayWAF 4.3 软件WAF拦截页面 网站安全狗:服务名 SafeDogCloudHelper 云锁:监听端口5555,服务名 YunSuoAgent D盾:服务名 d_safe 5. WAF绕过技术 5.1 架构层绕过 5.1.1 绕过云WAF寻找源站 目标域名历史解析IP查询 site.ip138.com ipchaxun.com DNSDB: dnsdb.io/zh-cn/ 页面/js源码爬取IP 工具:JSFinder Burp敏感信息高亮插件 暴露真实IP的边缘业务 通过子域名定位真实IP HOSTS碰撞 其他思路: SSL证书查询 搜索引擎快照 GitHub源代码泄露 子站攻击 5.2 资源限制绕过 5.2.1 填充垃圾字符 URI: /xxx?data=aaaaaaa...aaaaa&cmd=whaomi SQL: 11111111...111111111' and 1=1 --1'/*aaa...aaa*/ and 1=1 -- Body: a=aaaaaaa- --&b=bbbb...&pay1oad=... filename: name="uploaded"; filename222... ="xxxx.filename="x.txt" 5.2.2 高并发 爆破模块持续发包 结合payload字典进行fuzz 5.3 协议层绕过 利用HTTPS协议(若WAF未配置SSL解密) 利用chunk分块传输 去掉请求头中的请求方法 5.4 规则层绕过 5.4.1 等价替换 字符集编码绕过(IBM037、IBM500等) 不同服务器支持的编码: Nginx,uWSGI-Django-Python3: IBM037、IBM500等 Apache-TOMCAT8-JVM1.8-JSP: IBM037、IBM500等 IIS6、7.5、8、10 -ASPX: IBM037,IBM500等 5.4.2 字符干扰 空字符 注释符 空白字符 5.4.3 特殊符号利用 MySQL注入允许符号: .,%.0,0,&\N,-.0,=\N,<0.,>0.,e0,^0. MSSQL注入允许符号: %00-%20 范围内的控制字符 6. WAF绕过实战案例 6.1 脏数据填充绕WAF 6.2 SQL注入绕WAF 默认payload被拦截 绕过payload: 1'+/*!33441and*/+1=1%23 6.3 双写filename绕WAF 绕WAF传压缩文件技巧 专业版传压缩文件可能无法利用,社区版Burp可规避 6.4 文件上传绕WAF思路 截断思路:filename前加 %00 、空格、换行 特殊字符: form-data; 改为 ~form-data; 大小写敏感: content-Type 改为 content-type 畸形格式:删除 form-data 冒号及属性 空格思路: Content-Type : multipart/form-data ; boundary = 换行思路:filename=后换行,文件名每个字符换行 畸形数据包:删除 content-Type: image/jpeg 特殊协议:通过chunked编码提交 转义符号: boundary="aa\ "bbb" 特殊字符扩展名: fi1ename=file_name: .php 重复参数:多个boundary或filename 特殊字符编码:使用ibm037、utf-32等编码 7. 参考资源 WAF介绍:https://www.cnblogs.com/realjimmy/p/12937247.html WAF攻防研究之四个层次Bypass WAF:https://xz.aliyun.com/t/15/ 编码导致的WAF安全性研究 隐藏资产探测:https://www.cnblogs.com/Rain99-/p/13756032.html