目录
(一)Tomcat介绍
(二)Tomcat漏洞
1、Tomcat常见漏洞
(三)Tomcat弱口
1、漏洞介绍
2、漏洞原理
3、漏洞复现
3.1 进入靶场并打开环境
3.2 ip+端口
3.3 访问 http://xxx/manager/html
3.4 使用弱口令或者爆破的方式进入管理页面
3.5 生成war包木马
3.6 上传木马到服务器
3.7 使用冰蝎连接
4、修复
(四)Tomcat PUT上传
1、漏洞介绍
2、漏洞原理
3、漏洞复现
3.1、访问存在漏洞的页面
3.2 BP抓包
(五)Apache Tomcat文件包含漏洞
0x01 漏洞介绍
GitHub - YDHCUI/CNVD-2020-10487-Tomcat-Ajp-lfi: Tomcat-Ajp协议文件读取漏洞
0x02 影响版本
0x03 漏洞分析
3.1 AJP Connector
3.2 代码解析
3.3 任意文件读取
0x04 漏洞复现
1、cd CVE-2020-1938 然后 docker-compose up 再查看端口
2、漏洞验证:
3、攻击机尝试利用exp读取该文件
0x05 漏洞修补
由于笔者个人水平有限,行文如有不当,还请各位师傅评论指正,非常感谢!!!
Tomcat是 Apache 软件基金会(Apache Software Foundation)的 Jakarta 项目中的一个核心项目,由 Apache 、 Sun 和其他一些公司及个人共同开发而成。由于有了 Sun 的参与和支持,最新的 Servlet 和 JSP 规范总是能在 Tomcat 中得到体现, Tomcat 5 支持最新的 Servlet 2.4 和 JSP 2.0 规范。因为 Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为比较流行的 Web 应用服务器。Tomcat 服务器是一个免费的开放源代码的 Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。可以这样认为,当在一台机器上配置好Apache 服务器,可利用它响应 HTML (标准通用标记语言下的一个应用)页面的访问请求。实际上Tomcat是 Apache 服务器的扩展,但运行时它是独立运行的,所以当你运行 tomcat 时,它实际上作为一个与Apache 独立的进程单独运行的。
- Tomcat AJP 文件包含漏洞
- Tomcat弱口令
- Tomcat反序列化漏洞(CVE20168735)
- Tomcat本地提权漏洞(CVE20161240)
- Tomcat之JMX服务弱口令漏洞
- Tomcat的PUT的上传漏洞(CVE201712615)
- Tomcat win版默认空口令漏洞(CVE20093548)
- Tomcat 样例目录session操控漏洞
tomcat存在管理后台进行应用部署管理,且管理后台使用HTTP基础认证进行登录。若用户口令为弱口令,攻击者容易进行暴力破解登录后台并进行应用管理。Tomcat支持在后台部署war文件,可以直接将webshell部署到web目录下。
jar cvf shell.war shell.jsp
添加加密算法,更改弱口令
CVE-2017-12615 对应的漏洞为任意文件写入,由于配置不当(非默认配置),导致可以使用 PUT 方法上传任意文件
在Tomcat 配置文件设置了 PUT 上传方法,在 web.xml 文件,可以发现,默认 readonly 为 true ,当 readonly设置为 false 时,可以通过 PUT / DELETE 进行文件操控
PUT /1.jsp/ HTTP/1.1
Host: yourip:8080
Accept: */*
AcceptLanguage: en
UserAgent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0) Connection: close
ContentType: application/xwwwformurlencoded
ContentLength: 5
shell
其他的同上,中国蚁剑也可以
最后关闭靶场环境。
CNVD-2020-10487/CVE-2020-1938是文件包含漏洞,攻击者可利用该漏洞读取或包含 Tomcat 上所有 webapp 目录下的任意文件,如:webapp 配置文件、源代码等,
- 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
Apache Tomcat服务器通过Connector连接器组件与客户程序建立连接,Connector表示接收请求并返回响应的端点。即Connector组件负责接收客户的请求,以及把Tomcat服务器的响应结果发送给客户。在Apache Tomcat服务器中我们平时用的最多的8080端口,就是所谓的Http Connector,使用Http(HTTP/1.1)协议
在conf/server.xml文件里,它对应的配置为:
而 AJP Connector,它使用的是 AJP 协议(Apache Jserv Protocol)是定向包协议。因为性能原因,使用二进制格式来传输可读性文本,它能降低 HTTP 请求的处理成本,因此主要在需要集群、反向代理的场景被使用。
Ajp协议对应的配置为:
Tomcat服务器默认对外网开启该端口 Web客户访问Tomcat服务器的两种方式:
在处理Ajp请求内容的是org.apache.coyote.ajp.AbstractAjpProcessor.java#prepareRequest()
这里首先判断SC_A_REQ_ATTRIBUTE,意思是如果使用的Ajp属性并不在上述的列表中,那么就进入这个条件
SC_A_REQ_REMOTE_PORT对应的是AJP_REMOTE_PORT,这里指的是对远程端口的转发,Ajp13并没有转发远程端口,但是接受转发的数据作为远程端口。
于是这里我们可以进行对Ajp设置特定的属性,封装为request对象的Attribute属性 比如以下三个属性可以被设置:
javax.servlet.include.request_uri
javax.servlet.include.path_info
javax.servlet.include.servlet_path
当请求被分发到org.apache.catalina.servlets.DefaultServlet#serveResource()方法时:
调用getRelativePath方法,需要获取到request_uri不为null,然后从request对象中获取并设置pathInfo属性值和servletPath属性值
接着往下看到getResource方法时,会把path作为参数传入,获取到文件的源码
web服务端口为8080,8009为AJP服务端口,打开浏览器输入虚拟机+8080出现下图则说明环境搭建成功。
把下面任意一个下到本地,要有python环境,推荐用kali比较方便
https://github.com/0nise/CVE-2020-1938
https://github.com/YDHCUI/CNVD-2020-10487-Tomcat-Ajp-lfi
python CNVD-2020-10487-Tomcat-Ajp-lfi.py 192.168.x.x -p 8009 -f WEB-INF/shell.txt
- 关闭AJP默认开启端口(这里是8009)
- 升级tomcat,新版本已经修复漏洞。