Tomcat任意文件上传漏洞CVE-2017-12615:原理、复现与防御

Tomcat PUT文件上传漏洞CVE-2017-12615复现与安全配置分析 Web应用安全中,中间件配置不当是常见的高危风险点。以Apache Tomcat为例,其作为广泛使用的Servlet容器,默认安全配置旨在平衡功能与风险。当管理员为支持WebDAV等需求,将`readonly`参数设为`false`以启用PUT方法时,若未同步部署严格的文件类型过滤机制,便可能引入文件上传漏洞。其技术原理在于,攻击者可利用特定版本Tomcat对请求文件名后缀校验的逻辑缺陷,通过构造如`shell.jsp/`或`shell.jsp `(含空格)等特殊格式,绕过对`.jsp`等可执行脚本的拦截, 阅读详情

1. 项目概述

最近在整理一些经典的Web漏洞案例,CVE-2017-12615这个Tomcat任意文件上传漏洞总是绕不开。它虽然是个老洞,但原理和利用方式非常典型,对于理解中间件安全、文件上传绕过以及Windows系统特性都很有帮助。很多朋友在复现这个漏洞时,常常卡在一些细节上,比如环境搭建不对、PUT请求没生效,或者上传了JSP文件却执行不了。今天我就结合自己多次复现的经验,把这个漏洞从头到尾拆解一遍,不仅告诉你“怎么做”,更重点讲清楚“为什么这么做”,以及实际操作中会遇到哪些坑,怎么解决。无论你是刚入门安全的新手,还是想巩固基础的老手,这篇内容都能让你对这个漏洞有更透彻的理解。

2. 漏洞原理深度剖析

2.1 漏洞根源:PUT方法与Windows文件系统特性的碰撞

CVE-2017-12615的核心问题,出在Apache Tomcat对HTTP PUT请求的处理逻辑与Windows操作系统文件系统特性的一个危险结合点上。要理解它,我们得先拆开来看。

首先,HTTP PUT方法本身是用于向指定URI上传资源的。在Tomcat的默认配置中, conf/web.xml 文件里对 DefaultServlet 的配置有一个关键参数: readonly 。它的默认值是 true 。当 readonly 为 true 时,Tomcat会拒绝处理PUT和DELETE请求,这是一种安全限制。然而,如果开发人员或管理员为了某些特定的RESTful API功能,手动将这个值改为 false ,就等于为攻击者打开了一扇门——Tomcat会开始处理PUT请求,允许客户端向服务器上传文件。

但这还不够。如果仅仅是可以上传文件,那最多算个配置不当,还谈不上高危漏洞。真正的“助攻”来自Windows文件系统。在Windows环境下,文件路径的解析有一些特殊的“特性”或者说“兼容性处理”。其中最关键的两个是:

  1. 末尾空格/点号自动去除 :Windows API在处理文件路径时,会自动去除文件名末尾的空格( )和点号( . )。例如,你请求创建 shell.jsp (末尾有个空格),系统实际创建的文件名会是 shell.jsp 。
  2. NTFS流文件(Alternate Data Streams, ADS) :NTFS文件系统支持一种叫“数据流”的特性,格式为 文件名:流名 。其中 ::$DATA 是一个特殊的流名,代表文件的主数据流。当系统遇到 shell.jsp::$DATA 这样的路径时,它会将其解析为创建名为 shell.jsp 的普通文件。

Tomcat在7.0.0到7.0.79版本(Windows环境)中,对PUT请求上传的文件名安全检查逻辑存在缺陷。它没有充分考虑Windows的这些特性,导致安全检查(比如检查文件名是否以 .jsp 或 .jspx 结尾)与实际文件创建操作之间存在差异。攻击者可以利用这个差异,绕过Tomcat对JSP文件上传的拦截。

2.2 安全校验与文件创建的“时间差”

我们来模拟一下攻击者上传 shell.jsp/ (注意末尾斜杠)时,Tomcat内部可能发生的过程:

  1. 请求接收与安全检查 :Tomcat收到PUT /shell.jsp/ 的请求。它的安全校验模块会检查请求的URL路径。由于路径以 / 结尾,在某些实现逻辑中,可能不会将其识别为一个直接的 .jsp 文件请求,或者校验逻辑存在疏漏,认为这是一个目录路径,从而“放行”。
  2. 传递给文件系统 :Tomcat将经过(不完整)校验后的路径 shell.jsp/ 交给底层的Java文件API去创建文件。
  3. Windows文件系统介入 :Java调用Windows系统API创建文件。Windows API看到路径 shell.jsp/ ,它发现末尾是一个斜杠,这不符合文件命名规范。为了兼容性,它可能会尝试“修正”这个路径。一种常见的行为是,系统在创建文件时,如果遇到这种被视为无效字符或目录指示符的情况,可能会将其忽略或进行某种规范化处理,最终在磁盘上创建出名为 shell.jsp 的文件,而末尾的 / 没有被保留为文件名的一部分。
  4. 结果 :安全检查针对的是 shell.jsp/ ,而磁盘上实际创建的是 shell.jsp 。一个WebShell就这样被成功上传到了Web应用的根目录下。

shell.jsp%20 (空格URL编码)和 shell.jsp::$DATA 的绕过原理类似,都是利用了Tomcat校验环节和Windows文件系统实际创建环节对同一字符串解析不一致的“时间差”。这个漏洞之所以影响Windows环境,正是因为这些特殊的文件系统行为在Linux/Unix上不存在或表现不同。

注意 :很多文章只说了“加斜杠/空格/::$DATA可以绕过”,但没讲清楚根本原因。理解这个“校验vs执行”的差异,是掌握此类文件上传漏洞的关键。以后遇到其他中间件或应用,也要思考它的安全检查点在哪里,文件最终落盘的操作又在哪里,两者之间是否有空隙可钻。

3. 漏洞复现环境搭建详解

3.1 环境选择与工具准备

复现漏洞,首要任务是搭建一个与漏洞匹配的环境。CVE-2017-12615影响的是Tomcat 7.0.0到7.0.79,并且需要运行在Windows上且 readonly 设置为 false 。为了复现方便,我们通常不会去真的找一个Windows服务器安装旧版Tomcat修改配置,而是使用Docker。Vulhub项目提供了现成的、配置好的漏洞环境镜像,极大简化了步骤。

你需要准备以下工具:

  1. 一台安装Docker和Docker Compose的Linux主机 (如Kali Linux、Ubuntu或CentOS)。这是我们的实验环境。在Windows上直接运行Docker也可以,但可能涉及网络模式等额外配置,用Linux更纯粹。
  2. Burp Suite Community/Professional版 :用于拦截和修改HTTP请求。这是手动复现的核心工具。
  3. 浏览器 :用于访问目标Tomcat和触发WebShell。
  4. 冰蝎(Behinder)或蚁剑(AntSword) :用于连接上传的JSP WebShell,进行可视化交互。准备其中一个即可,我演示会用冰蝎。
  5. 文本编辑器 :用于编写和查看POC/EXP脚本。

首先,从GitHub上拉取Vulhub的漏洞环境库:

git clone https://github.com/vulhub/vulhub.git
cd vulhub/tomcat/CVE-2017-12615

进入对应目录后,使用 docker-compose 启动环境:

docker-compose up -d

这个命令会从Docker Hub拉取预先构建好的漏洞镜像(一个包含了存在漏洞的Tomcat 7.x的Linux容器,但模拟了Windows环境下 readonly=false 的配置),并在后台运行。

3.2 环境验证与关键配置确认

启动完成后,用 docker ps 查看容器是否正常运行,并记下容器的ID或名称。接着,我们最好验证一下漏洞环境的关键配置是否就绪。

# 查看运行的容器
docker ps
# 假设容器ID是 abc123def,进入容器shell
docker exec -it abc123def /bin/bash
# 进入Tomcat配置目录,查看web.xml
cd /usr/local/tomcat/conf/
cat web.xml | grep -A 5 -B 5 readonl
Tomcat PUT方法任意文件上传漏洞(CVE-2017-12615)原理与实战复现 在Web应用安全领域,文件上传漏洞是常见的攻击向量之一,攻击者通过构造恶意请求向服务器写入文件,进而获取系统控制权。其原理往往与服务器对HTTP请求的处理机制和文件系统权限配置相关。从技术价值看,深入理解这类漏洞有助于构建纵深防御体系,提升应用安全性。在Java Web开发中,Apache Tomcat作为广泛使用的Servlet容器,其安全配置直接影响应用安全。CVE-2017-12615正是Tomcat因DefaultServlet的readonly参数配置不当,导致攻击者可利用HTTP PUT方法绕过 阅读详情

相关推荐

Tomcat安全深度解析:从高危漏洞原理到纵深防御实战

Web应用安全是保障线上业务稳定运行的核心基础,其关键在于理解常见攻击面与防御原理。Servlet容器作为Java Web应用的运行环境,其配置与实现细节直接决定了应用的安全水位。通过剖析远程代码执行(RCE)、文件包含等经典漏洞的形成机制,可以揭示不安全的配置、默认服务暴露和权限过大的共性风险。这些安全问题的技术价值在于,它们将抽象的威胁转化为具体的加固措施,例如通过最小化暴露面、强化身份验证和输入校验来构建纵深防御体系。在Tomcat这类广泛使用的Servlet容器中,针对CVE-2017-12615(

436

Tomcat安全攻防实战:从漏洞复现到纵深防御体系构建

Web应用服务器是承载在线业务的核心基础设施,其安全性直接关系到服务的可用性与数据安全。以Apache Tomcat为代表的Java应用服务器,通过Servlet容器和JSP引擎处理动态请求,其配置与运行机制是系统安全的关键环节。深入理解其工作原理,有助于识别因默认配置、协议设计或权限管理不当引发的安全风险,例如信息泄露、远程代码执行等。这些漏洞原理的掌握,对于构建有效的防御体系具有重要价值,能够帮助开发与运维人员在真实生产环境中实施精准加固。本文聚焦Tomcat安全,通过剖析CVE-2017-12615文

weixin_33738982的博客 1328

Tomcat CVE-2017-12615漏洞复现核心条件与协议级原理

HTTP PUT方法是Web服务器处理资源创建的标准语义,但在Tomcat 7.0.0–7.0.79中,因readonly配置误设、路径拼接未校验及协议栈直通等设计缺陷,导致PUT请求可直接写入JSP文件并执行——这并非简单上传漏洞,而是HTTP方法语义与文件系统操作耦合引发的协议级风险。其技术价值在于揭示了传统WAF难以识别的‘合法请求+非法意图’攻击模式,广泛应用于红队渗透、CTF靶场构造与中间件安全加固验证。实际应用需严格满足三大前提:特定版本范围、readonly="false"显式配置、原始HTT

weixin_30735745的博客 662

新手必看:用Vulfocus靶场复现CVE-2017-12615等经典漏洞的保姆级避坑指南

本文为新手提供使用Vulfocus靶场复现CVE-2017-12615等经典漏洞的详细指南,涵盖环境配置、常见问题解决方案及实战技巧。通过避坑要点和分步操作说明,帮助读者高效掌握漏洞复现技能,特别适合网络安全初学者快速入门。

weixin_30376509的博客 431

Tomcat CVE-2017-12615漏洞:Windows下PUT请求文件上传绕过与Webshell利用

在Web应用安全领域,中间件安全配置是防御体系的重要基石。其核心原理在于通过严格的访问控制机制,限制用户对服务器资源的直接操作,例如默认禁止HTTP PUT、DELETE等可能修改资源的方法。当管理员为启用特定功能(如WebDAV)而调整配置时,就可能引入安全风险。CVE-2017-12615漏洞正是这一场景的典型体现,其技术价值在于揭示了Tomcat在Windows环境下,路径规范化逻辑与安全检查逻辑不一致导致的校验旁路问题。攻击者可利用Windows文件系统特性,通过构造包含特殊字符(如末尾斜杠、空格或

weixin_33980459的博客 381

Tomcat CVE-2017-12615漏洞原理与实战复现:从任意文件上传到RCE

在Web应用安全领域,任意文件上传漏洞是一种常见的高危风险,其核心原理在于应用程序未能对用户上传的文件进行充分的安全校验,导致攻击者可以上传恶意脚本文件。这种漏洞的利用通常涉及绕过文件类型检查、路径过滤等安全机制,最终实现远程代码执行(RCE)。其技术价值在于深刻揭示了应用层逻辑缺陷与服务器配置不当相结合可能引发的严重后果。典型的应用场景包括存在文件上传功能的Web应用、配置不当的中间件服务器等。本文聚焦于Apache Tomcat中间件中的一个经典案例——CVE-2017-12615漏洞,该漏洞正是由于T

weixin_31648507的博客 374

Tomcat安全漏洞深度解析:从CVE-2017-12615利用到防御实战

在Web应用安全领域,中间件作为承载业务的核心组件,其安全性直接关系到整个系统的稳定。Tomcat作为Java Web应用部署的事实标准,其广泛使用也使其成为攻击者重点关注的攻击面。漏洞利用通常遵循信息收集、权限提升到远程代码执行的攻击链,其中PUT方法任意文件上传等高危漏洞,常因默认配置不当而被利用。通过深入分析CVE-2017-12615等经典漏洞的利用原理,可以揭示攻击者如何通过构造特殊请求绕过安全限制,实现WebShell上传。从防御视角,需结合代码加固、网络隔离与持续监控,构建纵深防御体系。本文聚

weixin_42525738的博客 263

新手必看:用Vulfocus靶场复现CVE-2017-12615等漏洞的保姆级避坑指南

本文详细介绍了如何使用Vulfocus靶场复现CVE-2017-12615等漏洞的保姆级指南,包括环境搭建、常见问题排查和实战演练。通过Vulfocus这一开源漏洞集成靶场,安全爱好者可以安全、高效地掌握漏洞复现的核心技巧,提升网络安全实战能力。

weixin_30954265的博客 350

Tomcat CVE-2017-12615漏洞深度解析:从PUT方法到文件上传绕过

文件上传漏洞是Web安全领域的常见威胁,通常源于服务器对用户输入验证不严。其核心原理在于攻击者通过构造恶意请求,绕过服务器对文件类型、扩展名或路径的检查机制,将可执行脚本上传至服务器。从技术价值看,这类漏洞直接威胁服务器安全,可能导致远程代码执行。在应用场景中,中间件配置不当往往是漏洞利用的关键入口。以Tomcat中间件为例,其处理HTTP PUT请求时,若readonly参数配置为false,结合文件名解析逻辑缺陷,攻击者可通过斜杠结尾或Windows流特性等方式绕过限制,实现任意文件上传,这正是CVE-

weixin_34357928的博客 400

Tomcat漏洞实战复现:从CVE-2017-12615到Ghostcat的深度解析

在Web安全领域,漏洞复现是连接理论知识与工程实践的核心桥梁,尤其对于Tomcat这类广泛使用的Java Web服务器。理解漏洞原理不仅需要掌握其触发机制,更需通过环境搭建、利用构造和结果分析等实战环节,将抽象概念转化为具体防御能力。从配置不当导致的PUT文件上传漏洞,到涉及AJP协议的文件读取漏洞,再到因弱口令引发的后台部署风险,每一个经典案例都揭示了特定的攻击模式与配置疏忽。通过亲手复现CVE-2017-12615和CVE-2020-1938等漏洞,安全工程师和开发人员能够以攻击者视角审视系统,深入理解

weixin_33694620的博客 311

手工复现Tomcat漏洞:从CVE-2017-12615到CVE-2020-1938的实战剖析

在Web应用安全领域,中间件漏洞是攻击者常利用的突破口。其原理往往源于默认配置不当、协议设计缺陷或输入验证缺失,例如文件上传、反序列化与协议未授权访问等常见漏洞模式。理解这些漏洞的技术价值在于,能够从防御视角逆向剖析攻击链,从而更有效地实施安全加固。在Java Web服务中,Apache Tomcat作为广泛使用的中间件,其历史漏洞如CVE-2017-12615(PUT方法任意文件上传)和CVE-2020-1938(AJP协议未授权文件读取)具有典型代表性。通过手工复现这些漏洞,安全人员可以深入掌握Tomc

weixin_32736961的博客 346

【实战演练】从Vulhub靶场到原理剖析:Tomcat三大经典漏洞深度复现

本文深入剖析Tomcat三大经典漏洞(CVE-2020-1938、CVE-2017-12615及弱密码漏洞),通过Vulhub靶场实战演示漏洞复现过程。从环境搭建到原理分析,再到防御方案,提供全面的安全加固建议,帮助安全研究人员和企业有效防范中间件安全风险。

weixin_33744854的博客 331

从零搭建中间件漏洞靶机:实战复现Tomcat、Nginx、WebLogic核心漏洞

中间件作为连接应用程序与操作系统的桥梁,其安全性直接关系到整个Web应用的稳定。理解中间件漏洞的原理,是构建纵深防御体系的基础。从配置错误到反序列化漏洞,其核心往往源于对用户输入验证不足或默认配置不当。掌握这些漏洞的利用与防御,对于提升系统安全水位、应对高级持续威胁具有重要价值。本文聚焦于文件上传漏洞、Log4j2漏洞等常见攻击面,通过亲手搭建包含Apache Tomcat任意文件上传、Nginx解析漏洞及WebLogic XML反序列化漏洞的靶机环境,将抽象的安全概念转化为可操作的工程实践。读者可在隔离的

weixin_33896726的博客 493

配电网故障重构/孤岛划分/故障恢复

程序主要复现《基于GA_BFGS算法的配电网故障恢复性重构研究_郑海广》,采用matlab编程软件实现,依据网络结构和DG供电方式对配电网进行孤岛划分,将含有 DG 的配电网拓扑结构看成一个树,搭建成连通图模型,使得将孤岛的划分变成了求取最小生成树,以网损和开关开断次数作为目标,采用 IEEE33 节点配电网为算例,通过遗传算法寻优计算,从而得到最佳的重构方案。

zhangxd212489的博客 2500

GraphRAG 踩坑记录

GraphRAG踩坑记录

yufanwenshu的博客 4351

避免bank conflict的使用共享内存的矩阵转置。及其循环展开。转置前后都是行主序,中间共享内存中是列主序

为了避免bank conflict,可以使用padding的方式将数组中的每一行各自占据一个bank,这样每个线程读取不同行的数据时就不会发生bank conflict。padding的方式是在每行数据后面添加一定数量的空数据,使得每行的字节数恰好是bank的整数倍,这样就能保证每行数据各自占据一个bank。具体来说,当一个线程访问共享内存中的一个元素时,GPU会根据该元素在共享内存中的地址计算出其所在的bank,然后将该元素从该bank中读取出来。

weixin_55035144的博客 2144

手把手教你学Simulink--H桥逆变器的PWM控制设计与仿真

本文详细介绍了如何在Simulink环境中设计和仿真一个基于PWM控制的H桥逆变器。H桥逆变器广泛应用于电机驱动、UPS和可再生能源系统等领域,通过PWM技术可以有效控制输出电压的幅度和频率,减少谐波失真,提高系统效率和稳定性。文章首先介绍了所需的工具和环境,包括MATLAB/Simulink和SimscapeElectrical工具箱。接着,详细阐述了从定义任务需求、创建Simulink项目、建立基础电气模型、集成传感器模型、实现PWM控制算法到设置仿真参数和运行仿真的完整步骤。最后,文章总结了通过Sim

MHD0815的博客 719

淘系商品的成长密码:历史与趋势透视

本文分析了淘系商品的发展历程,从早期的市场探索到如今的行业领先地位,深入探讨了技术创新、供应链优化、用户需求洞察等关键因素在淘系商品成功中的作用。通过对平台不断完善商品生态、提升购物体验和服务的过程分析,文章总结了淘系商品在竞争激烈的市场中如何通过创新应对挑战并推动电商行业的进步。未来,随着消费趋势变化和新兴模式的兴起,淘系商品将在更大范围内发挥其市场影响力。

曾经“等你生日那天”都遥远得像未来,如今却可欢愉的挥手说“下个十年见” 6万+

AI + 药物临床试验研发赛道

研究日期:2026-07-09 | 研究主题:AI + 药物临床试验研发赛道 | 聚焦岗位:Agent 平台架构师 / AI 工程架构师。

AI天才研究院 146

【SpringBoot 4.x 第2节】夯爆了,学习 Spring Boot 4.x 前,需要具备哪些 Java 基础?

🏆 本文收录于 《滚雪球学 Spring Boot 4.x》 专栏。 本专栏面向 有一点 Java 基础,但没有系统学过 Spring Boot 的读者,采用“滚雪球式学习法”:先跑通、再理解、再重构、再上线,最终带你从第一个 Hello API 一路完成一个可部署、可监控、可扩展的后端项目。

**My Coding Family** 4569

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

上一篇: AIGC技术边界识别与产品化实践指南
下一篇: 昇腾CANN ATC工具:AI模型转换与优化实战指南
congdou5265
博客等级 码龄10年 5粉丝 395原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值