前言

最近Tomcat爆出AJP漏洞,升级对应版本的Tomcat是比较好的规避方法。本文将记录笔者在升级Tomcat 9.0.31时踩过的一些坑,以便大家能快速升级Tomcat。

本文只针对Tomcat 9.0.31版本的操作记录。

Tomcat受影响版本:

Apache Tomcat 9.x < 9.0.31
Apache Tomcat 8.x < 8.5.51
Apache Tomcat 7.x < 7.0.100
Apache Tomcat 6.x

如果未使用AJP端口,或者Tomcat版本不在上面的范围内可以不考虑升级。

准备工具

Tomcat 9下载地址:https://tomcat.apache.org/dow...
检测漏洞工具下载链接:https://www.chaitin.cn/zh/gho...

相关链接

Tomcat 9 更新日志:https://tomcat.apache.org/tom...
Tomcat 9.0.31 AJP 相关API:https://tomcat.apache.org/tom...

Use of the AJP protocol requires additional security considerations because it allows greater direct manipulation of Tomcat's internal data structures than the HTTP connectors. Particular attention should be paid to the values used for the address , secret , secretRequired and allowedRequestAttributesPattern attributes.

API中提到的这四个属性比较重要
address , secret , secretRequired and allowedRequestAttributesPattern

操作记录

1. 部署Tomcat

首先解压/安装 Tomcat 9.0.31,直接运行是不会有问题,开启注释的AJP端口后就会启动失败。

<Connector protocol="AJP/1.3" address="::1" port="8009" redirectPort="8443" />

启动Tomcat就会有如下错误:

严重: Failed to start component [Connector[AJP/1.3-8009]]
org.apache.catalina.LifecycleException: 协议处理器启动失败
at org.apache.catalina.connector.Connector.startInternal(Connector.java:1038)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
at org.apache.catalina.core.StandardService.startInternal(StandardService.java:438)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:930)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
at org.apache.catalina.startup.Catalina.start(Catalina.java:633)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:343)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:474)
Caused by: java.lang.IllegalArgumentException: The AJP Connector is configured with secretRequired="true" but the secret attribute is either null or "". This combination is not valid.
at org.apache.coyote.ajp.AbstractAjpProtocol.start(AbstractAjpProtocol.java:264)
at org.apache.catalina.connector.Connector.startInternal(Connector.java:1035)
... 12 more`

根据错误提示,需要添加 secretRequiredsecret 属性,如果 设置 secretRequired="" 则可以不用添加 secret 属性,配置正确之后即可正常启动。

2. 运行检测工具

直接运行检测工具可查看相关命令,这里我们根据长亭的官方教程使用 servicescan --target ip:端口命令。

.\xray_windows_amd64.exe servicescan --target 127.0.0.1:8009

以Windows系统为例,使用命令行运行 xray_windows_amd64.exe
此时我的AJP配置如下:

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

注:address="IP地址 部分情况需要添加 address 属性,否则使用 Apache 代理访问时可能会出现 503,比如电脑存在双网卡等。

运行结果:

如果出现[EEOR]则说明命令不正确。
此处为错误截图:

下图为存在AJP漏洞的检测结果:

3. 完善配置

长亭科技 推荐配置

<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" address="YOUR\_TOMCAT\_IP\_ADDRESS" secret="YOUR\_TOMCAT\_AJP\_SECRET" />

如果我们配置了 secret 属性,使用 Apache 代理访问服务就会出现403的情况,这个时候我们就需要在 Apacheworkers.properties 文件中配置 secret 值 。
例如 worker.xxx.secret = secret_value ,注意两边的值需要保持一致。
配置完后重启 Apache 服务即可正常访问。

再使用检测工具检测

检测结果如下:

此时检测结果状态码都是 403 ,同时 Apache 也能正常访问系统。

结尾:

如果通过 startup.bat 启动Tomcat出现乱码情况,只需要设置 conf 目录下 logging.properties 文件 java.util.logging.ConsoleHandler.encoding = UTF-8GBK 编码即可。
以上就是笔者升级Tomcat 9.0.31所遇到的问题,特记录于此希望对大家有所帮助。
转载链接:https://segmentfault.com/a/1190000021838764?utm_source=tag-newest

解决AJP漏洞操作记录相关推荐

  1. DVWA(4)文件包含(File Inclusion) LOW-HIGHT 操作记录

    今天带来第四期文件包含漏洞操作记录.初次接触DVWA,写下自己的操作记录,希望可以帮助每个刚接触DVWA的新手,同时希望可以提升自己的技术.注:如有操作不当的地方希望可以得到大神指导.交流.也感谢之前 ...

  2. 运维利器-ClusterShell集群管理操作记录

    在运维实战中,如果有若干台数据库服务器,想对这些服务器进行同等动作,比如查看它们当前的即时负载情况,查看它们的主机名,分发文件等等,这个时候该怎么办?一个个登陆服务器去操作,太傻帽了!写个shell去 ...

  3. mysql+keepalived必须要lvs吗_MySQL 双主热备 + LVS + Keepalived 高可用操作记录

    MySQL复制能够保证数据的冗余的同时可以做读写分离来分担系统压力,如果是主主复制还可以很好的避免主节点的单点故障.然而MySQL主主复制存在一些问题无法满足我们的实际需要:未提供统一访问入口来实现负 ...

  4. mysql+keepalived必须要lvs吗_Mysql双主热备+LVS+Keepalived高可用操作记录

    MySQL复制能够保证数据的冗余的同时可以做读写分离来分担系统压力,如果是主主复制还可以很好的避免主节点的单点故障.然而MySQL主主复制存在一些问题无法满足我们的实际需要:未提供统一访问入口来实现负 ...

  5. 关于slot、slot-scope的指令的一些操作记录

    关于slot.slot-scope的指令的一些操作记录: 从vue2.6.0开始,slot.slot-scope已经被废弃,推荐使用v-slot: slot-scope是作用域插槽, 父组件中不能直接 ...

  6. del服务器如何收系统日志,利用Rsyslog集中收集系统日志和用户操作记录以及相关处理方法...

    相信从事linux服务器运维的筒子们都和我一样,每天都在和各种系统日志.服务日志打交道.这些日志记录了系统或服务每天发生的各种状态.通过观察日志我们可以及时的解决掉很多系统和服务故障. 今天主要写的是 ...

  7. 部署Zipkin分布式性能追踪日志系统的操作记录

    Zipkin是Twitter的一个开源项目,是一个致力于收集Twitter所有服务的监控数据的分布式跟踪系统,它提供了收集数据,和查询数据两大接口服务. 部署Zipkin环境的操作记录: 部署Zipk ...

  8. ProxySQL+MGR实现读写分离和主节点故障无感知切换 - 完整操作记录

    ProxySQL+MGR实现读写分离和主节点故障无感知切换 - 完整操作记录 前面的文章介绍了ProxySQL用法,这里说下ProxySQL中间件针对Mysql组复制模式实现读写分离以及主节点故障时能 ...

  9. Mycat 读写分离、主从切换、分库分表的操作记录

    Mycat 读写分离.主从切换.分库分表的操作记录 系统开发中,数据库是非常重要的一个点.除了程序的本身的优化,如:SQL语句优化.代码优化,数据库的处理本身优化也是非常重要的.主从.热备.分表分库等 ...

最新文章

  1. python爬网页数据用什么_初学者如何用“python爬虫”技术抓取网页数据?
  2. linux路由信息自动丢失,浅谈用expect实现路由器自动备份数据
  3. 构件图(Component Diagram)
  4. sencha touch Model validations 自定义验证 二选一输入验证、重复验证、时间验证、比较验证、条件验证(2015-1-14)...
  5. Windows10怎么创建后门?
  6. AC日记——Mato的文件管理 bzoj 3289
  7. 启用属性,索引和存储的用途是什么?
  8. 前端:常用单词(JS,CSS,HTML)
  9. Eclipse的Spring库导入
  10. gephi java教程_Gephi教程汇总
  11. html时钟自动刷新抖音,抖音上炫酷的网红文字时钟
  12. App Store Connect 等待协议
  13. 编写程序,先将输入的一系列整数中的最小值与第一个数交换,然后将最大值与最后一个数交换,最后输出交换后的序列。
  14. 2018 ICPC 北京区域赛 I - Palindromes(规律+大数+模拟)
  15. 低配置系统安装 linux,在低配置机中安装Linux系统
  16. python几行代码实现邮件解析
  17. FPGA小白学习之路(2)error:buffers of the same direction cannot be placed in series
  18. ffmpeg----avfifo.h
  19. 笔记本插入麦克风被识别成耳机怎么办
  20. 转换为本地时间 java_UTC时间转换为本地时间(JAVA)

热门文章

  1. 2021亚太杯C题全网最全解题思路+塞罕坝林场数据数据分享
  2. HP助力友邦保险公司规划未来
  3. rac 配置oracle互信,Oracle18cRAC安装配置互信报错INS-44000
  4. 浏览器兼容和移动端适配方案
  5. Python十大最佳IDE
  6. 广西省职称计算机考试查询,广西人事职称网
  7. Python批量发送QQ邮件
  8. div显示边框显示一条线
  9. 仿途虎的车型选择页面
  10. 【学习笔记】【C++】【Leetcode 分门别类讲解】