fix: close expired offline commands and serialize TCP dispatch

This commit is contained in:
Ed1s0nZ committed 2026-10-06 03:41:37 +08:00
1 parent 338dcdbc17
commit e081858df3
5 files changed
+160 -7

No files matched your search

+4
View File
@@ -154,3 +154,7 @@ HTTP 上传端点此前只验证共享监听器凭据与任务 ID 路径,未
HTTP 原共享监听器凭据无法证明具体会话身份。现生成客户端为每个运行实例产生随机独立 X-Session-Token,数据库只保存 SHA-256 哈希;首次身份绑定不可覆盖,已有无绑定身份不得由仅知 UUID 的客户端认领。心跳、任务领取、结果回传和文件读写均检查独立凭据;文件下载通过任务 payload.file_id 关联真实所属会话。生成 Go 客户端所有 HTTP 请求同步携带会话凭据,curl 心跳客户端同步生成并携带凭据。双会话回归覆盖正常重连、任务领取、结果回传、文件读写及缺失/其他会话凭据拒绝,验证不修改其他任务或文件。身份测试覆盖哈希存储、旧身份禁止认领和跨监听器拒绝。C2/数据库测试通过,Go 客户端 Linux/Windows/macOS 编译通过,未执行生成客户端。
升级兼容:原 HTTP 客户端没有独立会话凭据,不能继续通过新校验,需要重新生成客户端;新实例使用新身份,不自动接管旧实例任务。自定义 HTTP 客户端需生成至少 32 字符随机凭据、首次注册携带并在同一实例后续请求保持一致。旧会话和任务记录保留。此要求是修复共享身份绕过所必需,未保留可绕过校验的旧协议入口。
### 离线命令收尾及串行派发(表格第 37 行)
看门狗原仅标记会话离线,已发送命令无错误和完成时间。现对 dead 会话已发送 exec/shell 命令,超过客户端既有 timeout_seconds(默认 60 秒)加最小宽限期后写失败、完成时间及远端终止尚未确认说明;不推断远端进程已经停止。显式长超时、queued、成功/取消及非命令任务不受影响,迟到成功不能覆盖失败终态。TCP 串行客户端原一次领取多条并提前标记 sent,现同会话有 sent/running 任务时不再派发,一次领取一条,后续任务保持 queued。回归覆盖离线默认超时、300 秒显式期限、等待任务、正常终态、非命令任务、迟到成功与串行下一任务派发。C2 包测试通过。
+1 -1
View File
@@ -39,7 +39,7 @@
| 34 | 32 | 批量任务里只要指令不调用任何工具(例如「请只回复:OK」),子任务就必然失败并回「缺少执行证据」 | 已修复并有针对性验证 |
| 35 | — | Markdown 智能体:同文件名静默覆盖、关键字段不校验、name 含路径字符被静默改写 | 已修复并有针对性验证 |
| 36 | — | 任务结果不校验上报者归属 —— 任意植入体可伪造别的会话、甚至别的监听器的任务结果。 | 已修复持久连接及 HTTP 跨会话、跨监听器回传,HTTP 文件端点同步隔离;旧 HTTP 客户端须重新生成 |
| 37 | — | 100s 状态不变、无 error、无 completed_at,会话早已离线。 | 待核对 |
| 37 | — | 100s 状态不变、无 error、无 completed_at,会话早已离线。 | 已修复:离线会话超期命令记录失败、错误和完成时间;串行 TCP 后续任务保持排队 |
| 38 | — | 在「工作流」里删掉一个正被角色引用的工作流 → 删除成功且没有任何提示;之后任何人用这个角色发起 | 已修复并有针对性验证 |
| 39 | — | 同一 implant uuid 重复上线互踢,旧连接断开把会话判死 | 已修复并有针对性验证 |
| 40 | — | 无权限用户仍能看到“新建角色”“添加成员”等管理操作按钮;页面同时提示“权限不足”。应在前端按权 | 已补权限入口标记,按钮可见性验证通过 |