# 内置 C2 使用说明

内置 C2 用于授权环境中的会话管理、任务下发、payload 生成和结果回收。不使用时建议关闭。

```yaml
c2:
  enabled: false
```

## 功能组成

主要对象：

- Listener：监听器，负责接收会话。
- Session：上线会话。
- Task：下发给会话的任务。
- Payload：生成的载荷或 one-liner。
- Profile：通信配置模板。
- Event：监听器、会话、任务产生的事件。
- File：给 implant 下载或任务结果回收的文件。

Web API 前缀是 `/api/c2`。关闭 C2 时接口返回 `503 c2_disabled`。

## 监听器

常用接口：

- `GET /api/c2/listeners`
- `POST /api/c2/listeners`
- `POST /api/c2/listeners/:id/start`
- `POST /api/c2/listeners/:id/stop`
- `DELETE /api/c2/listeners/:id`

建议给监听器使用清晰命名，标明演练项目、网络区域和授权范围。

## 会话

常用接口：

- `GET /api/c2/sessions`
- `GET /api/c2/sessions/:id`
- `PUT /api/c2/sessions/:id/sleep`
- `DELETE /api/c2/sessions/:id`

`sleep` 用于调整会话轮询间隔。间隔越短，交互越实时，但流量和暴露面更高。

## 任务

常用接口：

- `GET /api/c2/tasks`
- `POST /api/c2/tasks`
- `POST /api/c2/sessions/:id/tasks`
- `POST /api/c2/tasks/:id/cancel`
- `GET /api/c2/tasks/:id/wait`
- `GET /api/c2/tasks/:id/result-file`

任务应和授权目标一致。高风险任务建议走 HITL，并在审计日志中保留操作痕迹。

## Payload

常用接口：

- `POST /api/c2/payloads/oneliner`
- `POST /api/c2/payloads/build`
- `GET /api/c2/payloads/:id/download`

生成前确认：

- 回连地址是否正确。
- 平台和架构是否匹配。
- 是否需要代理、sleep、profile。
- 文件是否只在授权环境分发。

## 文件

常用接口：

- `POST /api/c2/files/upload`
- `GET /api/c2/files`
- `GET /api/c2/tasks/:id/result-file`

上传文件可供 implant 下载。结果文件可能包含敏感信息，应按项目保密级别保存和清理。

## MCP 工具

C2 启用后会注册相关 MCP 工具，供 Agent 管理监听器、会话、任务、payload 等。建议：

- 不把 C2 工具加入全局免审批白名单。
- 在角色提示词中限制项目、目标、任务类型。
- 对执行命令、上传文件、生成 payload 的步骤开启人工审批。

## 安全建议

- 仅在授权环境启用。
- 不在公网暴露管理 Web。
- Listener 暴露端口与 Web 管理端口分离。
- 定期清理会话、任务、payload 和事件。
- 演练结束后关闭监听器并删除无用 payload。
- 保留必要审计证据，但不要长期保存敏感输出。

## 排错

监听器无法启动：

- 端口被占用。
- 权限不足，低端口需要额外权限。
- 防火墙或安全组未放行。

会话不上线：

- payload 回连地址错误。
- 目标无法访问监听器。
- TLS/Profile 不匹配。
- 被安全产品阻断。

任务无结果：

- 会话 sleep 较长。
- 会话已离线。
- 命令在目标端卡住。
- 结果过大，需要通过结果文件下载。

## 生命周期视角

C2 的正确使用不是“创建 listener 然后下命令”，而是一个生命周期：

1. 授权确认：项目、目标、时间窗口、允许动作。
2. Profile 设计：通信方式、sleep、回连地址、文件通道。
3. Listener 启动：确认端口、网络路径和日志。
4. Payload 生成：记录 hash、用途、投递方式。
5. Session 接入：确认目标身份、权限和环境。
6. Task 下发：只执行与授权目标一致的任务。
7. 结果归档：必要输出写入项目事实或报告。
8. 清理：停止 listener、删除 payload、清理 session/task/event。

跳过前两步会导致后续每个操作都不可审计。

## 任务分级

| 等级 | 示例 | 审批建议 |
| --- | --- | --- |
| L1 只读识别 | `whoami`、主机名、当前目录 | 可由审计 Agent 放行 |
| L2 环境枚举 | 网络接口、进程、用户组 | 建议人工或严格审计 |
| L3 文件访问 | 读取配置、下载结果文件 | 人工确认目标和路径 |
| L4 执行变更 | 上传文件、修改 sleep、运行脚本 | 人工审批 |
| L5 持久化/横向/破坏 | 自启、凭证、删除、加密、扩散 | 默认拒绝，除非授权明确 |

把这个分级写进 HITL 提示词，比单纯“危险则拒绝”更可操作。

## 事件复盘

一次 C2 操作复盘至少回答：

- 哪个 listener 接收了哪个 session？
- payload 是谁生成的，什么时候生成的？
- session 属于哪个授权目标？
- 下发了哪些 task？
- task 输出是否写入报告或项目事实？
- 是否停止 listener 并清理 payload？

如果这些问题答不上来，说明 C2 过程管理还不够闭环。

## 源码锚点

- C2 Manager：`internal/c2/manager.go`
- Listener：`internal/c2/listener.go`
- HTTP Listener：`internal/c2/listener_http.go`
- TCP Listener：`internal/c2/listener_tcp.go`
- Payload：`internal/c2/payload_builder.go`
- Handler：`internal/handler/c2.go`
- MCP 工具：`internal/app/c2_tools.go`
