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

漏洞深度剖析:从CVE-2020-1938看Tomcat AJP协议的安全攻防

1. 漏洞背景与影响范围

CVE-2020-1938这个漏洞在安全圈里有个更形象的名字——"幽灵猫"。我第一次听说这个漏洞时,正在给客户做安全评估,突然发现内网好几台Tomcat服务器都中招了。这个漏洞之所以危险,是因为它利用了Tomcat默认开启的AJP协议,攻击者不需要任何认证就能读取服务器上的敏感文件。

AJP协议全称Apache JServ Protocol,是Tomcat为了与其他Web服务器(比如Apache HTTPD)高效通信而设计的二进制协议。默认情况下,Tomcat安装后会开启8009端口监听AJP请求。问题就出在这个协议的设计上——它没有对请求做足够的权限校验,导致攻击者可以构造特殊的数据包来读取任意文件。

受影响的版本范围相当广:

  • Tomcat 6全系列
  • Tomcat 7 < 7.0.100
  • Tomcat 8 < 8.5.51
  • Tomcat 9 < 9.0.31

我在实际渗透测试中发现,很多企业还在使用Tomcat 8.5.x的老版本,这就给攻击者留下了可乘之机。最要命的是,如果目标服务器还允许文件上传,这个文件读取漏洞很可能升级为远程代码执行(RCE),相当于拿到了服务器的完全控制权。

2. AJP协议的工作原理与漏洞成因

2.1 AJP协议的工作机制

要理解这个漏洞,得先搞清楚AJP协议是怎么工作的。我抓过几次AJP协议的数据包,发现它和HTTP协议最大的不同在于:

  1. 采用二进制格式传输数据
  2. 使用持久化连接
  3. 默认不加密通信内容

当Tomcat收到AJP请求时,会按照以下流程处理:

  1. 解析请求头中的属性(比如请求路径、参数等)
  2. 根据属性定位到对应的Web应用
  3. 执行相应的Servlet处理逻辑
  4. 返回响应数据

漏洞就出在第一步——Tomcat对AJP请求中的javax.servlet.include.path_infojavax.servlet.include.servlet_path这两个属性没有做严格校验。攻击者可以构造特殊的属性值,让Tomcat误以为是在处理一个文件包含请求。

2.2 漏洞利用的关键点

我分析过漏洞利用的POC代码,发现攻击者主要利用了以下几个特性:

  1. 通过AJP协议的forward_request消息类型发送请求
  2. 在请求属性中设置javax.servlet.include.*系列参数
  3. 通过req_attribute字段控制文件路径

一个典型的攻击数据包长这样(简化版):

0x0000: 02 03 00 01 0a 00 00 00 01 00 1a 6a 61 76 61 78 0x0010: 2e 73 65 72 76 6c 65 74 2e 69 6e 63 6c 75 64 65 0x0020: 2e 70 61 74 68 5f 69 6e 66 6f 00 01 2f 00 1b 6a 0x0030: 61 76 61 78 2e 73 65 72 76 6c 65 74 2e 69 6e 63 0x0040: 6c 75 64 65 2e 73 65 72 76 6c 65 74 5f 70 61 74 0x0050: 68 00 01 2f

这个数据包的关键在于:

  • 设置了javax.servlet.include.path_info属性
  • 指定了要读取的文件路径
  • 利用了Tomcat对属性值的信任机制

3. 漏洞复现实战演示

3.1 环境搭建

我在本地用Docker搭建了漏洞复现环境,具体步骤如下:

  1. 拉取存在漏洞的Tomcat镜像:
docker pull tomcat:8.5.32
  1. 启动容器并映射端口:
docker run -d -p 8080:8080 -p 8009:8009 --name vulnerable_tomcat tomcat:8.5.32
  1. 验证服务是否正常运行:
curl http://localhost:8080

3.2 漏洞验证

使用公开的POC脚本进行测试:

  1. 下载POC工具:
git clone https://github.com/YDHCUI/CNVD-2020-10488-Tomcat-Ajp-lfi
  1. 执行漏洞检测:
python CNVD-2020-10488-Tomcat-Ajp-lfi.py 127.0.0.1 -p 8009 -f /WEB-INF/web.xml
  1. 如果漏洞存在,会返回web.xml文件内容:
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1"> <display-name>Welcome to Tomcat</display-name> <description> Welcome to Tomcat </description> </web-app>

3.3 进阶利用

如果目标服务器允许文件上传,可以尝试升级为RCE:

  1. 上传一个包含恶意代码的JSP文件
  2. 通过AJP协议包含这个文件
  3. 触发恶意代码执行

我曾在一次渗透测试中,利用这个漏洞成功获取了目标服务器的shell。具体步骤是:

  1. 先上传一个webshell到服务器的临时目录
  2. 然后通过AJP协议包含这个webshell
  3. 最后通过webshell执行系统命令

4. 防御措施与修复方案

4.1 临时解决方案

如果暂时无法升级Tomcat版本,可以采取以下措施:

  1. 禁用AJP协议: 修改conf/server.xml文件,注释掉AJP连接器配置:
<!-- <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> -->
  1. 配置AJP认证: 如果必须使用AJP协议,可以启用认证机制:
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" secretRequired="true" secret="your_secure_password" />

4.2 永久修复方案

最安全的做法是升级到修复版本:

  • Tomcat 7.0.100+
  • Tomcat 8.5.51+
  • Tomcat 9.0.31+

升级步骤:

  1. 备份当前配置和部署的应用
  2. 下载新版本Tomcat
  3. 停止旧版本服务
  4. 部署新版本并恢复配置
  5. 测试应用是否正常运行

4.3 安全加固建议

根据我的经验,除了修复这个特定漏洞外,还应该:

  1. 定期更新Tomcat和其他中间件
  2. 限制AJP协议的访问源IP
  3. 启用Tomcat的安全管理器
  4. 配置严格的文件系统权限
  5. 部署WAF等防护设备

我在给客户做安全加固时,通常会建议他们采用最小权限原则,只开放必要的端口和服务。对于Tomcat来说,如果不需要AJP协议,最好彻底禁用它。

http://www.jsqmd.com/news/898841/

相关文章:

  • 基于开源技术栈构建本地AI语音助手:从Whisper到LLM的完整实践
  • AI超级员工系统怎么选?价格、功能、售后全解析 - 资讯纵览
  • 为什么你的“资深律师”角色总答非所问?——ChatGPT角色一致性崩塌的4层底层机制解析
  • PyQt-Fluent-Widgets:终极现代化Python GUI开发解决方案
  • 出版社题库系统的开发
  • 为什么很多系统前期好用,后期却越来越难维护?——真正决定商城系统长期价值的,从来不是“功能数量”,而是“复杂业务长期是否还能稳定治理”
  • 戴尔笔记本双系统实战:Win10与Ubuntu 20.04安装避坑全指南
  • 零代码构建HTML单文件操作系统:AI生成与Web技术融合实践
  • 为 Claude Code 配置 Taotoken 作为稳定后备 API 源的详细指南
  • 实力登顶廊坊回收榜单!典典佳汇正规靠谱,黄金名表名酒高价收 - 诚鑫名品
  • 为什么越成熟的人,越容易失去自己?
  • 全球金刚石铜市场洞察:预计2032年将达到4.12亿美元
  • 别再乱改VM选项了!IDEA 2023.1+Spring Boot项目JMX报错的终极清理方案
  • 3天速成ChatGPT抖音脚本工程师:掌握平台审核红线、黄金3秒结构、BGM情绪匹配表(内含2024Q2最新规则)
  • 利用Taotoken模型广场为SpringBoot应用选择性价比模型
  • 别再死记硬背了!用OD动态调试理解MOVZX/MOVSX、TEST/JZ等关键汇编指令(含案例演示)
  • 2026年4月国内比较好的比重精选筛生产厂家推荐,清理筛/斗式提升机/粮食通风地笼/悬空输送机,比重精选筛厂家哪家权威 - 品牌推荐师
  • 分布式电驱动HIL测试:基于速度跟踪与神经网络的动态负载控制
  • 2026年想要找到靠谱的亚克力鱼缸厂商 这份实用参考指南别错过 - 资讯纵览
  • 从TensorBoard迁移到SwanLab:一个PyTorch老手的效率升级实录
  • ZYNQ软硬协同调试实战:SDK与PL端ILA触发联调全解析
  • Shiro反序列化漏洞:从硬编码密钥到RCE的攻防全景
  • 2026年中山主流照明厂家格局解析:宏盟照明以全域高端实力领跑行业 - 资讯纵览
  • 【算法分析与设计】第15篇:Dijkstra算法:基于优先队列的效率优化分析
  • 告别裸机轮询:用DSP28335的CPU定时器中断优化你的4x4矩阵键盘扫描程序
  • Ubuntu 22.04 高效部署 Beyond Compare 4:从安装到破解的完整实践
  • AI批量写作到底是什么
  • 商丘这家黄金回收店,把“接地气”做到了极致 - 资讯纵览
  • 2026郑州洛阳家庭维修行业调研及避坑指南——本土标杆维小达引领行业规范化发展 - 维小达科技
  • AI产品经理学习路线图(2026版)