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 配置步骤

  1. 源码准备

    • 从官网下载Tomcat 9.0.45源码
    • 复制confwebapps目录到新文件夹catalina-home
  2. Maven配置

    • 添加pom.xml文件(内容见原文)
    • 配置国内镜像源(阿里云等)
  3. 测试文件

    • ./test/trailers下添加ResponseTrailers.java
    • ./test/util下添加CookieFilter.java
  4. 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

请求处理流程:

  1. Connector接收请求
  2. ProtocolHandler的Processor组件解析协议并生成Request对象
  3. Adaptor将Request传递到Container

3.2 关键解析函数

URL解析主要受两个函数影响:

1. parsePathParameters()函数

位置org.apache.catalina.connector.CoyoteAdapter

功能:处理URL中的分号(;)参数

处理逻辑

  1. 检查URL中是否包含分号
  2. 如果存在分号,提取分号后的参数值(pv)
  3. 将分号后的路径与参数值进行覆盖操作
  4. 返回处理后的URI

示例
输入:/123;456/../index.jsp
处理过程:

  • 分号位置:4
  • 处理后:/123/../index.jsp

2. normalize()函数

功能:规范化URL路径

处理逻辑

  1. 将反斜杠(\)替换为正斜杠(/)
  2. 将双斜杠(//)替换为单斜杠(/)
  3. 移除/./中的点(.)
  4. 处理/../进行目录回溯

特殊处理

  • 对URL编码后的字符进行解码(decodedURI())
  • 支持URL编码输入

示例
输入:/123/../index.jsp
处理过程:

  • 目录回溯:/index.jsp

3.3 处理顺序

Tomcat对URL的处理顺序为:

  1. 先执行parsePathParameters处理分号
  2. 再执行normalize处理斜杠和点

四、安全利用场景

4.1 绕过安全设备

场景:安全设备基于后缀白名单进行过滤

攻击方式

/sql_vuln/id=1+and+1=1;favicon.ico

绕过原理

  1. 安全设备看到.ico后缀放行
  2. Tomcat解析后实际路径为/sql_vuln/id=1+and+1=1

4.2 绕过访问限制

场景:后端通过请求路径判断权限

攻击方式

/;/admin 或 /aaa/../admin

绕过原理

  1. 权限检查看到的是原始路径/;/admin,不等于/admin
  2. Tomcat解析后实际路径为/admin

4.3 相关漏洞案例

  1. Shiro < v1.5.2:身份认证绕过(CVE-2020-1957)
  2. Shiro < v1.5.3:身份认证绕过(CVE-2020-11989)
  3. Shiro < v1.6.0:身份认证绕过(CVE-2020-13933)

五、防御建议

  1. 输入验证:对所有传入的URL路径进行严格验证
  2. 规范化处理:在处理路径前先进行规范化
  3. 权限检查:基于规范化后的路径进行权限验证
  4. 安全设备:配置安全设备解析规则与服务器一致
  5. 框架更新:及时更新存在相关漏洞的框架版本

六、总结

Tomcat的URL解析特性主要体现在对特殊字符序列的处理上,特别是分号和路径回溯符号的组合使用。理解这些特性对于Web应用安全至关重要,既能帮助开发人员编写更安全的代码,也能帮助安全人员识别潜在的风险点。在实际开发和安全评估中,应当充分考虑这些解析特性可能带来的安全影响。

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 绕过安全设备 场景 :安全设备基于后缀白名单进行过滤 攻击方式 : 绕过原理 : 安全设备看到 .ico 后缀放行 Tomcat解析后实际路径为 /sql_vuln/id=1+and+1=1 4.2 绕过访问限制 场景 :后端通过请求路径判断权限 攻击方式 : 绕过原理 : 权限检查看到的是原始路径 /;/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应用安全至关重要,既能帮助开发人员编写更安全的代码,也能帮助安全人员识别潜在的风险点。在实际开发和安全评估中,应当充分考虑这些解析特性可能带来的安全影响。