从锐捷某系统鸡肋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
初步测试思路
-
业务逻辑漏洞测试:
- 尝试任意用户注册(已关闭)
- 测试忘记密码接口信息泄露(仅返回学号对应真实姓名)
-
已知漏洞测试:
- 尝试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对长数据处理缺陷
- 在关键字符串前插入大量字符或注释
- 更严格的拦截规则:
详细绕过步骤
绕过系统自带过滤
-
发现部分标签可绕过尖括号过滤:
<input> <!-- 可绕过 --> <script> <!-- 被拦截 --> -
构造嵌套标签逃逸:
<input <table><a>- 浏览器解析时会多出一个
>,形成有效标签
- 浏览器解析时会多出一个
绕过WAF-A
- 构造不包含敏感字符的payload:
<input<table><embed/src="data:text/html;base64,PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg==">- 使用base64编码绕过
alert检测
- 使用base64编码绕过
绕过WAF-B
-
发现WAF-B对长数据处理的缺陷:
<input<table> -
最终有效payload:
<input<table/embed/src="data:text/html;base64,PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg==">- 添加额外字符/注释使WAF处理超时或忽略
0x03 防御建议
对系统开发者的建议
- 对所有用户输入进行严格过滤和编码
- 设置Cookie的HttpOnly属性
- 实现Content Security Policy (CSP)
- 对错误信息进行统一处理,避免直接回显
对WAF配置的建议
- 避免仅依赖关键字过滤
- 实现完整的HTML/JS解析能力
- 对数据URI进行严格检查
- 优化长数据处理逻辑,防止绕过
0x04 总结
本案例展示了从发现一个看似鸡肋的XSS漏洞,到深入研究并绕过多层WAF防护的完整过程。关键点包括:
- 利用系统过滤不完整的HTML标签实现初步绕过
- 通过嵌套标签和属性构造逃逸上下文
- 使用base64编码绕过关键字检测
- 利用WAF对长数据处理的缺陷实现最终绕过
这种研究思路和方法可以应用于其他系统的WAF绕过测试中,具有通用参考价值。