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

本文详细介绍了Tomcat PUT方法任意写文件漏洞(CVE-2017-12615),包括漏洞概述、受影响版本、复现步骤及修复方案。攻击者可以利用该漏洞上传jsp文件,实现远程命令执行。建议禁用PUT方法以防止此类攻击。

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

漏洞概述:

  • 如果Tomcat开启了PUT方法(默认关闭,有点鸡肋,但是有些页面需要PUT,无法关闭),则有可能存在远程命令执行漏洞,攻击者可以利用PUT方法上传jsp文件,从而造成远程命令执行,getshell等。

漏洞版本:

  • 7.0.0~7.0.79

漏洞搭建:

  • 利用vulhub漏洞平台(简单粗暴,一键生成漏洞!)进行快速搭建,cd 到tomcat目录,然后docker-compose up -d
  • 如图所示搭建成功,(靶机为8.5.19请忽视,漏洞存在7.0.0~7.0.79),漏洞走起!
  • 在这里插入图片描述

漏洞原理:

  • 由于conf/web.xml里readonly设置为false


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


漏洞复现:

  • 主流三个上传姿势,来一一验证

  • 第一个:/ ,由于Tomcat存在去掉最后的 / 的特性,此方法影响所有的Apache Tomcat 版本<

2017年9月19日,Apache Tomcat官方确认并修复了两个高危漏洞,其中包括远程代码执行漏洞CVE - 2017 - 12615。在一定条件下,攻击者可利用该漏洞,通过上传的JSP文件,在用户服务器上执行任意代码,从而导致数据泄露或获取服务器权限,存在高安全风险[^1]。 受影响的版本为Tomcat的7.0.0 - 7.0.79(7.0.81修复不完全)。该漏洞的形成部分原因是Tomcat配置不当,启用了PUT方法(例如将readonly参数由初始值设置为false),允许未经验证身份的用户上传文件,攻击者可借此上传webshell,使上传文件中的恶意JSP代码得以执行[^1][2][5]。 漏洞本质是Tomcat配置了可(readonly = false),允许往服务器文件,示例配置如下: ```xml <servlet> <servlet-name>default</servlet-name> <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class> <init-param> <param-name>debug</param-name> <param-value>0</param-value> </init-param> <init-param> <param-name>listings</param-name> <param-value>false</param-value> </init-param> <init-param> <param-name>readonly</param-name> <param-value>false</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> ``` 另外,DELETE等HTTP操作由DefaultServlet实现,直接构造请求上传JSP webshell通常不会成功。该漏洞利用了Windows下文件名解析的漏洞,通过构造特殊后缀名,绕过Tomcat检测,让Tomcat用DefaultServlet的逻辑处理请求,进而上传jsp webshell文件,主要有三种方法可绕过检测[^3][4]。 当存在漏洞Tomcat运行在Windows/Linux主机上,且启用了HTTP PUT请求方法(如将 “readonly” 初始化参数由默认值设置为 “false”)时,攻击者通过精心构造的攻击请求数据包向服务器上传包含任意代码的JSP的WebShell文件,JSP文件中的恶意代码将能被服务器执行,导致服务器上的数据泄露或获取服务器权限[^5]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值