引子:最近tomcat被曝出安全漏洞,全版本都要升级到最新,从网上看来了方法,直接记录一下,保存成shell脚本,给需要的朋友们使用。

本篇文章主要讲解Tomcat的版本检测与升级方法


1、漏洞概述

2月20日,国家信息安全漏洞共享平台(CNVD)发布了Apache Tomcat文件包含漏洞(CNVD-2020-10487/CVE-2020-1938)。该漏洞是由于Tomcat AJP协议存在缺陷而导致,攻击者利用该漏洞可通过构造特定参数,读取服务器webapp下的任意文件。若目标服务器同时存在文件上传功能,攻击者可进一步实现远程代码执行。目前,厂商已发布新版本完成漏洞修复。
Tomcat是Apache软件基金会中的一个重要项目,性能稳定且免费,是目前较为流行的Web应用服务器。由于Tomcat应用范围较广,因此本次漏洞影响范围较大。

2、影响范围

受影响版本

  • Apache Tomcat 6
  • Apache Tomcat 7 < 7.0.100
  • Apache Tomcat 8 < 8.5.51
  • Apache Tomcat 9 < 9.0.31

不受影响版本

  • Apache Tomcat = 7.0.100
  • Apache Tomcat = 8.5.51
  • Apache Tomcat = 9.0.31

3、漏洞检测

3.1 Windows

通常在Apache Tomcat官网下载的安装包名称中会包含有当前Tomcat的版本号,用户可通过查看解压后的文件夹名称来确定当前的版本。

怎么查看springboot之前的版本 springboot查看tomcat版本_怎么查看springboot之前的版本


如果解压后的Tomcat目录名称被修改过,或者通过Windows Service Installer方式安装,可使用软件自带的version模块来获取当前的版本。进入Tomcat安装目录的bin目录,输入命令version.bat后,可查看当前的软件版本号。

怎么查看springboot之前的版本 springboot查看tomcat版本_怎么查看springboot之前的版本_02

3.2 Linux

首先执行ps -ef|grep tomcat 查看tomcat启动路径及信息,如果没有修改过名称的,则显示的文件夹名称就是tomcat版本号。如果修改过名称,则进入tomcat的bin目录下,执行./version.sh查看版本号

怎么查看springboot之前的版本 springboot查看tomcat版本_Apache_03

3.3 SpringBoot项目

:众所周知,springboot项目集成了tomcat,那么要怎么查看tomcat版本呢?

:在启动项目时,通过查看启动日志,就可以快速辨别tomcat版本。

怎么查看springboot之前的版本 springboot查看tomcat版本_apache_04

4. 漏洞处置建议

4.1 CentOS下

  1. 下载tomcat最新版本的二进制文件包,有需要的小伙伴们直接去tomcat官网下载即可,这是下载链接:tomcat-9.0.31版本tar包
  2. 找到tomcat目录,上传刚刚下载的最新版的tomcat二进制文件,也可以直接wget下载
  3. 执行touch change-tomcat.sh,创建一个shell文件
  4. 复制如下内容进入脚本,然后sh change-tomcat.sh执行脚本
sh apache-tomcat-8.5.31/bin/shutdown.sh
mkdir tomcat8.5.1-old
cp -Rf apache-tomcat-8.5.31/* tomcat8.5.1-old/
tar -zxvf apache-tomcat-9.0.31.tar.gz
rm -rf apache-tomcat-9.0.31/conf/server.xml
mv tomcat8.5.1-old/conf/server.xml apache-tomcat-9.0.31/conf/
rm -rf apache-tomcat-9.0.31/webapps
mv tomcat8.5.1-old/webapps apache-tomcat-9.0.31/
rm -rf apache-tomcat-9.0.31/bin/catalina.sh
mv tomcat8.5.1-old/bin/catalina.sh apache-tomcat-9.0.31/bin/
rm -rf apache-tomcat-9.0.31/webapps/examples
sh apache-tomcat-9.0.31/bin/startup.sh
ps -ef|grep jar
  1. 如果觉得麻烦,也可以直接下载我上传在csdn上的文件,不过脚本内容可能需要根据你当前的tomcat版本进行相应改动哦~
    下载地址:change-tomcat.sh

4.2 Spring Boot

直接在pom文件中添加如下内容,重新部署即可。 不要直接升级spring boot,否则会有依赖不兼容问题。

<tomcat.version>8.5.51(可选择自己需要的tomcat版本号)</tomcat.version>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
</dependency>

4.3 官方升级

目前官方已在最新版本中修复了该漏洞,请受影响的用户尽快升级版本进行防护,官方下载链接:

版本号

下载地址

Apache Tomcat 7.0.100

http://tomcat.apache.org/download-70.cgi

Apache Tomcat 8.5.51

http://tomcat.apache.org/download-80.cgi

Apache Tomcat 9.0.31

http://tomcat.apache.org/download-90.cgi

4.4 其他防护措施

  1. 如未使用Tomcat AJP协议:
    如未使用 Tomcat AJP 协议,可以直接将 Tomcat 升级到 9.0.31、8.5.51或 7.0.100 版本进行漏洞修复。
    如无法立即进行版本更新、或者是更老版本的用户,建议直接关闭AJPConnector,或将其监听地址改为仅监听本机localhost。
    具体操作:
    (1)编辑 <CATALINA_BASE>/conf/server.xml,找到如下行(<CATALINA_BASE> 为 Tomcat 的工作目录):
    <Connector port="8009"protocol="AJP/1.3" redirectPort="8443" /> (2)将此行注释掉(也可删掉该行):
    <!--<Connectorport="8009" protocol="AJP/1.3"redirectPort="8443" />--> (3)保存后需重新启动,规则方可生效。