从锐捷某系统鸡肋XSS到通用WAF绕过
字数 1284 2025-08-26 22:12:01

从锐捷某系统XSS漏洞到通用WAF绕过技术分析

0x01 漏洞挖掘过程

目标系统分析

  • 系统类型:校园网自助服务系统
  • 主要功能:Wifi入网认证
  • 技术栈:
    • 中间件:Apache-Coyote/1.1
    • Servlet版本:2.5
    • 应用服务器:JBoss-5.0/JBossWeb-2.1
    • 系统版本:RG-ENTERPRISE_4.21(p9)_Build20180606

初步测试思路

  1. 业务逻辑漏洞测试

    • 尝试任意用户注册(已关闭)
    • 测试忘记密码接口信息泄露(仅返回学号对应真实姓名)
  2. 已知漏洞测试

    • 尝试CVE-2017-12149(JBoss反序列化漏洞)未成功
    • 未发现/invoker/readonly路径

关键发现

  • 发现错误信息回显接口:
    • 移动端:/mobile/...
    • PC端:去掉mobile后的相同路径
  • 反射型XSS漏洞:
    • 通过错误信息回显接口触发
    • 会话Cookie未设置HttpOnly属性

0x02 XSS漏洞利用与WAF绕过技术

系统自带过滤机制

  • 过滤字符:'"<>\
  • 部分HTML标签可绕过过滤(如<input>

WAF类型分析

  1. WAF-A

    • 拦截规则:
      • on*开头的动作(如onclickonload
      • alert字符串
      • javascript:协议
    • 绕过技术:
      • 使用<input<table><embed>等嵌套标签
      • 利用embed标签的src属性执行base64编码的JS
  2. WAF-B(WiseGrid网关)

    • 更严格的拦截规则:
      • 拦截embed标签
      • 拦截src="data..."href="data..."
      • 拦截常见XSS payload
    • 绕过技术:
      • 利用WAF对长数据处理缺陷
      • 在关键字符串前插入大量字符或注释

详细绕过步骤

绕过系统自带过滤

  1. 发现部分标签可绕过尖括号过滤:

    <input> <!-- 可绕过 -->
    <script> <!-- 被拦截 -->
    
  2. 构造嵌套标签逃逸:

    <input <table><a>
    
    • 浏览器解析时会多出一个>,形成有效标签

绕过WAF-A

  1. 构造不包含敏感字符的payload:
    <input<table><embed/src="data:text/html;base64,PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg==">
    
    • 使用base64编码绕过alert检测

绕过WAF-B

  1. 发现WAF-B对长数据处理的缺陷:

    <input<table>
    
  2. 最终有效payload:

    <input<table/embed/src="data:text/html;base64,PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg==">
    
    • 添加额外字符/注释使WAF处理超时或忽略

0x03 防御建议

对系统开发者的建议

  1. 对所有用户输入进行严格过滤和编码
  2. 设置Cookie的HttpOnly属性
  3. 实现Content Security Policy (CSP)
  4. 对错误信息进行统一处理,避免直接回显

对WAF配置的建议

  1. 避免仅依赖关键字过滤
  2. 实现完整的HTML/JS解析能力
  3. 对数据URI进行严格检查
  4. 优化长数据处理逻辑,防止绕过

0x04 总结

本案例展示了从发现一个看似鸡肋的XSS漏洞,到深入研究并绕过多层WAF防护的完整过程。关键点包括:

  1. 利用系统过滤不完整的HTML标签实现初步绕过
  2. 通过嵌套标签和属性构造逃逸上下文
  3. 使用base64编码绕过关键字检测
  4. 利用WAF对长数据处理的缺陷实现最终绕过

这种研究思路和方法可以应用于其他系统的WAF绕过测试中,具有通用参考价值。

从锐捷某系统XSS漏洞到通用WAF绕过技术分析 0x01 漏洞挖掘过程 目标系统分析 系统类型:校园网自助服务系统 主要功能:Wifi入网认证 技术栈: 中间件:Apache-Coyote/1.1 Servlet版本:2.5 应用服务器:JBoss-5.0/JBossWeb-2.1 系统版本:RG-ENTERPRISE_ 4.21(p9)_ Build20180606 初步测试思路 业务逻辑漏洞测试 : 尝试任意用户注册(已关闭) 测试忘记密码接口信息泄露(仅返回学号对应真实姓名) 已知漏洞测试 : 尝试CVE-2017-12149(JBoss反序列化漏洞)未成功 未发现/invoker/readonly路径 关键发现 发现错误信息回显接口: 移动端: /mobile/... PC端:去掉 mobile 后的相同路径 反射型XSS漏洞: 通过错误信息回显接口触发 会话Cookie未设置HttpOnly属性 0x02 XSS漏洞利用与WAF绕过技术 系统自带过滤机制 过滤字符: ' 、 " 、 <> 、 \ 部分HTML标签可绕过过滤(如 <input> ) WAF类型分析 WAF-A : 拦截规则: on* 开头的动作(如 onclick 、 onload ) alert 字符串 javascript: 协议 绕过技术: 使用 <input<table><embed> 等嵌套标签 利用 embed 标签的 src 属性执行base64编码的JS WAF-B(WiseGrid网关) : 更严格的拦截规则: 拦截 embed 标签 拦截 src="data..." 和 href="data..." 拦截常见XSS payload 绕过技术: 利用WAF对长数据处理缺陷 在关键字符串前插入大量字符或注释 详细绕过步骤 绕过系统自带过滤 发现部分标签可绕过尖括号过滤: 构造嵌套标签逃逸: 浏览器解析时会多出一个 > ,形成有效标签 绕过WAF-A 构造不包含敏感字符的payload: 使用base64编码绕过 alert 检测 绕过WAF-B 发现WAF-B对长数据处理的缺陷: 最终有效payload: 添加额外字符/注释使WAF处理超时或忽略 0x03 防御建议 对系统开发者的建议 对所有用户输入进行严格过滤和编码 设置Cookie的HttpOnly属性 实现Content Security Policy (CSP) 对错误信息进行统一处理,避免直接回显 对WAF配置的建议 避免仅依赖关键字过滤 实现完整的HTML/JS解析能力 对数据URI进行严格检查 优化长数据处理逻辑,防止绕过 0x04 总结 本案例展示了从发现一个看似鸡肋的XSS漏洞,到深入研究并绕过多层WAF防护的完整过程。关键点包括: 利用系统过滤不完整的HTML标签实现初步绕过 通过嵌套标签和属性构造逃逸上下文 使用base64编码绕过关键字检测 利用WAF对长数据处理的缺陷实现最终绕过 这种研究思路和方法可以应用于其他系统的WAF绕过测试中,具有通用参考价值。