tomcat相关漏洞复现

tomcat相关漏洞复现

前言

因为在实际渗透过程中,发现许多tomcat服务器,每次都没利用成功,不知道是因为菜,还是实际不满足漏洞版本及相关配置,在这里做个复现,归纳吧。(有个ddos的,怕把电脑搞炸,就不复现了,然后复现的都是比较新的,旧的感觉都会有补丁,用不上,实际懒)

介绍

Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。由于有了Sun 的参与和支持,最新的Servlet 和JSP 规范总是能在Tomcat 中得到体现。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。

目录结构

  • bin-----存放Tomcat的脚本文件,例如启动、关闭
  • conf----Tomcat的配置文件,例如server.xml和web.xml
  • lib-----存放Tomcat运行需要的库文件(JAR包)
  • logs----存放Tomcat执行时的LOG文件
  • temp----存放Tomcat运行时所产生的临时文件
  • webapps-Web发布目录,默认情况下把Web应用文件放于此目录
  • work----存放jsp编译后产生的class文件

server.xml:配置tomcat启动的端口号、host主机、Context等
web.xml文件:部署描述文件,这个web.xml中描述了一些默认的servlet,部署每个webapp时,都会调用这个文件,配置该web应用的默认servlet
tomcat-users.xml:tomcat的用户密码与权限。

CVE-2020-1938

相关介绍

  • 漏洞名称:

    Aapache Tomcat AJP 文件包含漏洞

  • 影响版本

    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

  • 影响方式

    文件上传,命令执行

漏洞原理

Tomcat默认的 conf/server.xml 中配置了2个 Connector,一个为8080的对外提供的HTTP协议(1.1版本)端口,默认监听地址: 0.0.0.0:8080,另外一个就是默认的8009 AJP协议(1.3版本)端口,默认监听地址为:0.0.0.0:8009,两个端口默认均监听在外网ip。

攻击者即可通过 Tomcat AJP Connector 可以读取或包含 Tomcat 上所有 webapp 目录下的任意文件

漏洞复现

创建后访问:http://ip:8080,看到出现tomcat页面

使用工具检测

链接1

链接2

CVE-2017-12615

相关介绍

  • 漏洞名称:

    Tomcat任意文件上传漏洞

  • 影响版本

    Tomcat 7.0.0 ~ 7.0.79

  • 影响方式

    文件上传,命令执行

漏洞原理

Tomcat配置了可写(readonly=false),导致我们可以往服务器写文件。该漏洞可以利用HTTP的PUT方法直接上传webshell到目标服务器,从而获取权限。

web.xml:

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

漏洞复现

创建后访问:http://ip:8080,看到出现tomcat页面

将方式改为put,直接上传一个shell,我们可以发现是失败的

说明tomcat对jsp是做了一定处理的。那么就考虑是否可以使其处理过程中对文件名的识别存在差异性,前面的流程中 test.jsp/ 识别为非jsp文件,而后续保存文件的时候,文件名不接受/字符,故而忽略掉

发现利用成功,在shell处写上我们的马即可

并且我们还可以利用其他的特性上传成功:shell.jsp%20,shell.jsp::$DATA

绕过分析

tomcat弱口令&后台getshell漏洞

相关介绍

  • 漏洞名称:

    tomcat弱口令&后台getshell漏洞

  • 影响版本

    全版本

  • 影响方式

    文件上传,弱口令

漏洞原理

Tomcat支持在后台部署war文件,可以直接将webshell部署到web目录下

漏洞复现

创建后访问:http://ip:8080,看到出现tomcat页面

tomcat|tomcat 成功访问后台

直接在此处上传war文件(shell)

在文件名加文件目录访问shell

CVE-2020-9484

相关介绍

  • 漏洞名称:

    Apache Tomcat 反序列化代码执行漏洞

  • 影响版本

    Apache Tomcat 10.0.0-M1—10.0.0-M4

    Apache Tomcat 9.0.0.M1—9.0.34

    Apache Tomcat 8.5.0—8.5.54

    Apache Tomcat 7.0.0—7.0.103

  • 影响方式

    反序列化

漏洞原理

当Tomcat使用了自带session同步功能时,使用不安全的配置(没有使用EncryptInterceptor)会存在反序列化漏洞,攻击者通过精心构造的数据包, 可以对使用了自带session同步功能的Tomcat服务器进行攻击。

漏洞复现

使用的docker地址

$ git clone https://github.com/masahiro331/CVE-2020-9484.git
$ cd CVE-2020-9484
$ docker build -t tomcat:groovy .
$ docker run -d -p 8080:8080 tomcat:groovy

exploit:

curl 'http://127.0.0.1:8080/index.jsp' -H 'Cookie: JSESSIONID=../../../../../usr/local/tomcat/groovy'

我们可以看到实际groovy是生成的反序列化文件,作用是创建/tmp/rce目录,进入容器后发现创建成功

使用ysoserial生成一个反序列化文件,后通过cookie中的JSESSION加载恶意的session持久化文件,同样可以

java -jar ysoserial.jar CommonsCollections2 "cmd" > /tmp/22222.session

posted @ 2021-01-03 21:23  kar3a  阅读(471)  评论(0编辑  收藏  举报