Apache Tomcat CVE-2020-1938 漏洞

news2024/12/28 22:53:20

Apache Tomcat CVE-2020-1938 漏洞简单复现

文章目录

  • Apache Tomcat CVE-2020-1938 漏洞简单复现
    • 实验准备
    • 实验步骤
      • 搭建环境
      • nmap扫描漏洞端口
      • POC代码验证
      • 漏洞修复建议
    • 参考链接

实验准备

  • 所选漏洞:Apache Tomcat远程代码执行漏洞

  • 漏洞编号:CVE-2020-1938

  • 漏洞选择理由:Tomcat是Apache软件基金会Jakarta 项目中的一个核心项目,作为目前比较流行的Web应用服务器,深受Java爱好者的喜爱,并得到了部分软件开发商的认可。Tomcat服务器是一个免费的开放源代码的Web应用服务器,被普遍使用在轻量级Web应用服务的构架中。 Tomcat提供了可以在其中运行Java代码的“纯Java” HTTP Web服务器环境。

    在2020年1月6日,国家信息安全漏洞共享平台(CNVD)收录了由北京长亭科技有限公司首次发现并报送的Apache Tomcat文件包含漏洞(CNVD-2020-10487,对应CVE-2020-1938),该漏洞使攻击者可以读取任何webapps文件(例如webapp配置文件,源代码等)或包括一个文件来远程执行代码。由于Tomcat默认开启的AJP服务(8009端口)存在一处文件包含缺陷,攻击者可构造恶意的请求包进行文件包含操作,进而读取受影响Tomcat服务器上的Web目录文件。漏洞被曝光后,由于其十分简单即可利用还能造成巨大破坏的高危特性,许多使用tomcat的小型开发者被迫禁用AJP服务.Apache Tomcat官方于2月14日紧急发布了安全补丁。
    因为该漏洞允许攻击者读取Tomcat上所有webapp目录下的任意文件,而通常用java开发的应用程序的war包也是放在webapp目录下的,所以也能够被攻击者读取到。这也意味着,如果你把数据库用户名密码、连接其他后端服务的账号、JWT签名secret、OAuth AppSecret等密钥信息放在properties文件里的话,那么,攻击者可能现在也拿到了这些信息,并且正在试着入侵你的服务器。解压后不仅能拿到properties文件,还能获得class文件,因此攻击者还能逆向获取到应用程序源码,进而从源代码中挖掘出更多其他漏洞加以利用。

  • 威胁类型

    文件包含、远程代码执行

  • 威胁等级

    该漏洞通过远程网络进行攻击,在攻击复杂度极低的情况下可以通过文件包含操作提取重要目录下的所有文件,NVD网站通过CVSS v3.1计算器得出分数9.8分,属于极危漏洞。

  • CVE-2020-1938受影响系统及应用版本

    apache tomcat 6
    apache tomcat 7 < 7.0.100
    apache tomcat 8 < 8.5.51
    apache tomcat 9 < 9.0.31

    tomcat下载链接:Index of /dist/tomcat

    • 本次实验选择的对象是Apache tomcat 9.0.13 apache-tomcat-9.0.13-windows-x64.zip
  • 主机:win 10
  • 虚拟环境:win 7

实验步骤

搭建环境

  1. 在win7系统上安装jdk与jre(笔者使用的是jdk_1.8.0_333,jre为同版本),下载时可以全部使用默认设置,在c盘的program files文件夹中找到Java即为文件安装位置.

    jdk下载链接Java Downloads | Oracle 注:下载jdk需要登录Oracle账户

    jre下载链接jre downloads

    接下来我们配置环境变量,右键计算机-属性-高级系统设置-环境变量

    在这里插入图片描述

    在系统变量中新建JAVA_HOME变量,变量值是你Jdk的安装路径

    在这里插入图片描述

    再新建CLASSPATH变量,变量值是 .;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar

    在这里插入图片描述

    修改系统变量中的Path变量,在变量值最后输入 %JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;

    在这里插入图片描述

    环境变量就添加完成了,命令行检查一下是否配置成功 java -version

    在这里插入图片描述

  2. 在下载并解压笔者选择的tomcat版本后,进入bin目录下执行startup.bat启动tomcat,看到框中内容说明正常启动了tomcat,在浏览器中输入 http://localhost:8080 即可打开.

    在这里插入图片描述

    在这里插入图片描述

  3. 修改配置文件

    首先修改 apache-tomcat-9.0.13\conf\ web.xml ,将框内包含的注释取消并添加下列代码于红框中

      <init-param>
        <param-name>enableCmdLineArguments</param-name>
        <param-value>true</param-value>
      </init-param>
      <init-param>
        <param-name>executadle</param-name>
        <param-value></param-value>
      </init-param>

在这里插入图片描述

接着修改 apache-tomcat-9.0.13\conf\ context.xml 文件,添加 privileged="true" 语句

在这里插入图片描述

搞定!至此,环境搭建完成.

nmap扫描漏洞端口

  1. 先看看我们运行tomcat服务的虚拟机的ip: 10.0.3.15

    在这里插入图片描述

  2. 然后就可以用nmap扫描端口了,如果确实存在漏洞,那我们应该能看到至少8009端口和8080端口被占用,其中的8009端口应该是AJP服务。

    在这里插入图片描述

    在这里插入图片描述

    可以看到,这两个端口确实是被占用了的,8080很好理解,毕竟我们打开的浏览器上就占用了这个端口,而8009这个端口才是这次实验的重点:因为Tomcat默认开启的AJP服务就占用了这个端口,导致攻击者可以构造恶意的请求包进行文件包含操作,进而读取受影响Tomcat服务器上 webapp 目录下的配置文件或源代码,配合文件包含的利用还可以达到远程代码执行的危害。

POC代码验证

代码来自:suricata/cve 2020-1938.py

这套代码运行环境为2.7版本的python,所以在执行前请确认你有相应的环境 (python 2.7的下载地址) ,笔者在虚拟机上做好了python 2.7.10的安装,并完成了POC实现,见下图

在这里插入图片描述

可以成功访问文件,漏洞复现成功!

漏洞修复建议

  1. 临时禁用AJP协议端口,在 conf/server.xml 配置文件中注释掉:<Connector port=“8009” protocol="AJP/1.3"redirectPort=“8443” />
    在这里插入图片描述

  2. 特别配置ajp配置中的secretRequired跟secret属性来限制认证

  3. 下载更新版本,只要不在本文开头提到的波及版本中即可。


参考链接

NVD - CVE-2020-1938

(CVE-2020-1938)Apache Tomcat远程代码执行漏洞复现_whh6tl的博客-CSDN博客

Apache Tomcat CVE-2020-1938,细思极恐 - 云+社区 - 腾讯云

Apache Tomcat 文件包含漏洞(CVE-2020-1938)_山山而川'的博客-CSDN博客_cve-2020-1938

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/422121.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AppArmor零知识学习三、源码介绍与下载

本文内容参考&#xff1a; AppArmor配置&#xff08;二&#xff09;_domybest_nsg的博客-CSDN博客&#xff0c; Apparmor简单学习_trap0D的博客-CSDN博客&#xff0c; 学习LSM(Linux security module)之三:Apparmor的前世今生和基本使用_wx5b7658e51ef04的技术博客_51CTO博客…

JavaEE初阶学习:文件操作

1.文件 1.认识文件 平时说的文件一般都是指存储再硬盘上的普通文件&#xff0c;形如txt&#xff0c;jpg&#xff0c;MP4&#xff0c;rar等这些文件都可以认为是普通文件&#xff0c;它们都是再硬盘上存储的。 在计算机中&#xff0c;文件可能是一个广义的概念&#xff0c;就…

【云原生|Docker】12-Docker Harbor企业级镜像管理

【云原生Docker】12-Docker Harbor企业级镜像管理 文章目录【云原生Docker】12-Docker Harbor企业级镜像管理前言Harbor简介简介架构介绍组件间说明工作原理docker logindocker pushHarbor安装版本介绍安装Http模式部署https模式部署前言 ​ 上一章节我们介绍了Docker的官方的镜…

【redis】集成到SpringBoot

集成到SpringBoot 类似于java连接mysql需要JDBC 而Java连接redis则需要 对应的 工具类 提示&#xff1a;写完文章后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录集成到SpringBoot前言一、Jedis加依赖写业务二、lettuce加依赖写业务Jedis和…

转换字符串的最少操作次数是否所有1都至少相隔k个元素重复至少k次且长度为M的模式移除指定数字得到的最大结果 得到k个黑块的最少涂色次数

转换字符串的最少操作次数&#xff08;回顾等级&#xff1a;不值得&#xff1b;已达最优解&#xff09; 来源&#xff1a;自己LeetCode刷题 usa int minimumMoves(char * s) {int szstrlen(s);int res0;for (int i0;i<sz;i){if (s[i]X){i2;res;}}return res; }是否所有1都…

Makefile实验

一、准备C程序 1、input.h #ifndef __INPUT_H #define __INPUT_Hvoid input_int(int *a, int *b);#endif 2、input.c #include <stdio.h> #include "input.h"void input_int(int *a, int *b) {printf("input two nums: ");scanf("%d %d&q…

8年经验的面试官分享Android工程师的面试秘诀

本人目前在一家知名企业担任Android高级工程师&#xff0c;工作八年来面试不过不少Android工程师求职者&#xff0c;前后累积有两三百人。在本文内容中&#xff0c;小编将结合本人的面试经验&#xff0c;给各位正在找Android开发工作的小伙伴提出一些面试前的准备建议。 一&am…

vue3通用后台管理项目

一、创建项目 1、使用vite创建名为my-vue的项目&#xff1a;npm init vite-app my-vue 2、进入到my-vue文件夹下&#xff1a;cd my-vue 3、安装依赖包&#xff1a;npm install 4、运行该项目&#xff1a;npm run dev 二、引入element-plus 1、element-plus地址&#xff1a;http…

Camunda整体架构

REST API REST API 允许您从远程应用程序或 JavaScript 应用程序使用流程引擎。&#xff08;注意&#xff1a;REST API 的文档被分解为自己的文档。&#xff09;REST API Reference | docs.camunda.org Camunda Tasklist用于人工工作流管理和用户任务的 Web 应用程序&#xff0…

UniverSeg:通用医学图像分割模型来了!

自从今年以来ChatGPT爆火和GPT-4的发布&#xff0c;一时间在大模型的潮流下&#xff0c;通用人工智能&#xff08;AGI&#xff09;也呼之欲出。随着本月初SAM和SegGPT等通用的CV大模型的提出&#xff0c;大模型和通用模型这把火也逐渐烧到的CV领域&#xff0c;特别是图像分割领…

Linux应用编程(文件IO进阶)

一、Linux 系统如何管理文件 1.1、静态文件与 inode 文件存放在磁盘文件系统中&#xff0c;并且以一种固定的形式进行存放&#xff0c;我们把他们称为静态文件。 每一个文件都必须对应一个 inode&#xff0c;inode 实质上是一个结构体&#xff0c;这个结构体中有很多的元素&a…

【C语言】初阶指针(指针运算、二级指针及指针数组)

简单不先于复杂&#xff0c;而是在复杂之后。 目录 1. 指针运算 4.1 指针-整数 1.2 指针 - 指针 1.3 指针的关系运算 2. 指针和数组 3. 二级指针 4. 指针数组 1. 指针运算 指针-整数指针-指针指针的关系运算 4.1 指针-整数 上面这个程序的作用是将数组中每个元…

【攻城狮计划】Renesas RA2E1 开发板

&#x1f6a9;WRITE IN FRONT&#x1f6a9; &#x1f50e;介绍&#xff1a;"謓泽"正在路上朝着"攻城狮"方向"前进四"&#x1f50e;&#x1f3c5;荣誉&#xff1a;2021|2022年度博客之星物联网与嵌入式开发TOP5|TOP4、2021|2022博客之星TOP10…

Scalable Recognition with a Vocabulary Tree(词汇树)

视觉单词 参考 视觉词袋&#xff08;BoVW&#xff0c;Bag of Visual Words&#xff09;模型&#xff0c;是“词袋”&#xff08;BoW&#xff0c;Bag of Words&#xff09;模型从自然语言处理与分析领域向图像处理与分析领域的一次自然推广。对于任意一幅图像&#xff0c;BoVW模…

jwt生成和解密-jose4j

jwt生成和解密-jose4j jwt的概念和生成意义在这里就不描述了&#xff0c;百度能搜到很多&#xff0c;直接上代码 官网地址 https://bitbucket.org/b_c/jose4j/wiki/Home maven <dependency><groupId>org.bitbucket.b_c</groupId><artifactId>jose4j…

【微信小程序】-- 配置uni-app的开发环境(四十八)

&#x1f48c; 所属专栏&#xff1a;【微信小程序开发教程】 &#x1f600; 作  者&#xff1a;我是夜阑的狗&#x1f436; &#x1f680; 个人简介&#xff1a;一个正在努力学技术的CV工程师&#xff0c;专注基础和实战分享 &#xff0c;欢迎咨询&#xff01; &…

Echarts图表显示不完全(多种图表解决方案)

前言 在使用Echarts画图的时候&#xff0c;有时候图表在固定大小的盒子模型&#xff08;dom容器&#xff09;中会显示不完全&#xff0c;因此我们需要对图表进行相关的调整使得图表内容显示完全。结合最近遇到的情况&#xff0c;提出一些解决方向 &#xff08;比较片面&#x…

Linux操作系统ARM体系结构处理器机制原理与实现

ARM 的概念ARM(Advanced RISC Machine)&#xff0c;既可以认为是一个公司的名字&#xff0c;也可以认为是对一类微处理器的通称&#xff0c;还可以认为是一种技术的名字。ARM 公司并不生产芯片也不销售芯片&#xff0c;它只出售芯片技术授权。其合作公司针对不同需求搭配各类硬…

【2023 · CANN训练营第一季】昇腾AI入门课(Pytorch)——第二章学习笔记

第二章 PyTorch模型迁移&调优 目标 了解 Pytorch 是如何适配到昇腾平台上的了解 Davinci 硬件架构以及什么样的模型在昇腾上更亲和了解软件术语和 Ascend - Pytorch 的安装步骤了解如何将原生 Pytorch 的模型代码是如何适配到 Ascend - Pytorch 前置知识 对原生 Pytorc…

足够惊艳,使用Alpaca-Lora基于LLaMA(7B)二十分钟完成微调,效果比肩斯坦福羊驼

之前尝试了从0到1复现斯坦福羊驼&#xff08;Stanford Alpaca 7B&#xff09;&#xff0c;Stanford Alpaca 是在 LLaMA 整个模型上微调&#xff0c;即对预训练模型中的所有参数都进行微调&#xff08;full fine-tuning&#xff09;。但该方法对于硬件成本要求仍然偏高且训练低效…