tomcat容器url解析特性研究
字数 1922 2025-08-29 08:30:36
Tomcat容器URL解析特性深入分析与安全研究
一、前言
Tomcat作为广泛使用的Java Web容器,在处理URL路径时具有某些特殊特性,特别是对/;/、/./、/../、/..;/等特殊字符序列的处理方式。这些特性在某些情况下可能导致安全风险,如绕过安全设备或访问控制机制。本文将通过源码分析深入探讨Tomcat的URL解析机制。
二、环境搭建
2.1 所需工具
- JDK 8
- Maven 3.6
- IntelliJ IDEA 2020.2
- Tomcat 9.0.45源码
2.2 配置步骤
-
源码准备:
- 从官网下载Tomcat 9.0.45源码
- 复制
conf和webapps目录到新文件夹catalina-home下
-
Maven配置:
- 添加
pom.xml文件(内容见原文) - 配置国内镜像源(阿里云等)
- 添加
-
测试文件:
- 在
./test/trailers下添加ResponseTrailers.java - 在
./test/util下添加CookieFilter.java
- 在
-
IDEA配置:
- 将项目导入IDEA
- 设置Language level为JDK 8
- 标记
catalina-home为Sources,test为Tests - 配置启动入口为
org.apache.catalina.startup.Bootstrap
三、Tomcat URL解析机制分析
3.1 核心组件
Tomcat处理请求涉及两个核心组件:
- Connector:处理外部Socket连接
- Container:加载和管理Servlet
请求处理流程:
- Connector接收请求
- ProtocolHandler的Processor组件解析协议并生成Request对象
- Adaptor将Request传递到Container
3.2 关键解析函数
URL解析主要受两个函数影响:
1. parsePathParameters()函数
位置:org.apache.catalina.connector.CoyoteAdapter
功能:处理URL中的分号(;)参数
处理逻辑:
- 检查URL中是否包含分号
- 如果存在分号,提取分号后的参数值(pv)
- 将分号后的路径与参数值进行覆盖操作
- 返回处理后的URI
示例:
输入:/123;456/../index.jsp
处理过程:
- 分号位置:4
- 处理后:
/123/../index.jsp
2. normalize()函数
功能:规范化URL路径
处理逻辑:
- 将反斜杠(
\)替换为正斜杠(/) - 将双斜杠(
//)替换为单斜杠(/) - 移除
/./中的点(.) - 处理
/../进行目录回溯
特殊处理:
- 对URL编码后的字符进行解码(
decodedURI()) - 支持URL编码输入
示例:
输入:/123/../index.jsp
处理过程:
- 目录回溯:
/index.jsp
3.3 处理顺序
Tomcat对URL的处理顺序为:
- 先执行
parsePathParameters处理分号 - 再执行
normalize处理斜杠和点
四、安全利用场景
4.1 绕过安全设备
场景:安全设备基于后缀白名单进行过滤
攻击方式:
/sql_vuln/id=1+and+1=1;favicon.ico
绕过原理:
- 安全设备看到
.ico后缀放行 - Tomcat解析后实际路径为
/sql_vuln/id=1+and+1=1
4.2 绕过访问限制
场景:后端通过请求路径判断权限
攻击方式:
/;/admin 或 /aaa/../admin
绕过原理:
- 权限检查看到的是原始路径
/;/admin,不等于/admin - Tomcat解析后实际路径为
/admin
4.3 相关漏洞案例
- Shiro < v1.5.2:身份认证绕过(CVE-2020-1957)
- Shiro < v1.5.3:身份认证绕过(CVE-2020-11989)
- Shiro < v1.6.0:身份认证绕过(CVE-2020-13933)
五、防御建议
- 输入验证:对所有传入的URL路径进行严格验证
- 规范化处理:在处理路径前先进行规范化
- 权限检查:基于规范化后的路径进行权限验证
- 安全设备:配置安全设备解析规则与服务器一致
- 框架更新:及时更新存在相关漏洞的框架版本
六、总结
Tomcat的URL解析特性主要体现在对特殊字符序列的处理上,特别是分号和路径回溯符号的组合使用。理解这些特性对于Web应用安全至关重要,既能帮助开发人员编写更安全的代码,也能帮助安全人员识别潜在的风险点。在实际开发和安全评估中,应当充分考虑这些解析特性可能带来的安全影响。