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页面
使用工具检测
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服务器进行攻击。
漏洞复现
$ 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