N0t3v3nSu5p1c10u5/N0tC2

GitHub: N0t3v3nSu5p1c10u5/N0tC2

一个基于 C++ 的跨平台命令与控制框架,提供加密通信、Agent 管理和任务编排功能,面向红队与安全研究场景。

Stars: 0 | Forks: 0

# N0t C2 这是一个使用 C++ 编写的跨平台(Windows + Linux)命令与控制(C2)框架。它实现了 `project.md` 中描述的完整架构:通过 HTTP 进行加密的 Ranger 通信、基于 Agent 的 X25519 密钥交换、Argon2id 密码哈希、RBAC(基于角色的访问控制)、存活状态管理、通信配置文件,以及一个模块化且各子系统明确分离的 Teamserver。 ## 组件 | 二进制文件 | 角色 | |------------------|-------------------------------------------------------------| | `n0t` | 操作员客户端 — 仅包含 CLI 和 IPC,无 C2 逻辑 | | `n0t-teamserver` | Teamserver — 负责编排、状态管理及所有子系统 | | `n0t-ranger` | Ranger(agent) — 独立的二进制文件,通过 Outpost 进行通信 | ## 构建 要求安装 CMake (≥3.16)、C++17 编译器、SQLite3 和 libsodium(均通过 `pkg-config` 解析)。 ``` cmake -B build && cmake --build build ``` 编译生成的二进制文件会输出到 `build/bin/` 目录。 ### OpSec 构建选项 不影响核心功能的可选构建时配置: ``` cmake -B build -DN0T_OPSEC_OBFUSCATE=ON -DN0T_OPSEC_ANTIDEBUG=ON -DN0T_OPSEC_STRING_ENCRYPT=ON ``` 这些配置会在 Ranger 目标上暴露编译定义。相关集成点是存在的,但具体实现刻意未被包含在范围内。 ## 快速开始 ``` # 1. 启动 Teamserver(前台运行;打印已预设的 admin 凭证) build/bin/n0t teamserver --data-dir ./n0t-data # 2. 在另一个终端:进行身份验证 build/bin/n0t login --user admin --pass admin # 3. 创建 HTTP Outpost(listener) build/bin/n0t outpost create --name http-1 --host 127.0.0.1 --port 9000 # 4. 针对该 Outpost 运行 Ranger(密钥交换 + 注册) build/bin/n0t-ranger --host 127.0.0.1 --port 9000 --id ranger-001 --cycles 1 # 5. 下发针对该 Ranger 的任务 build/bin/n0t task create --name whoami-mod --targets ranger-001 --def modules/whoami.coff # 6. 让 Ranger 轮询并执行任务(加密) build/bin/n0t-ranger --host 127.0.0.1 --port 9000 --id ranger-001 --cycles 1 # 7. 查看结果 build/bin/n0t jobs --task 1 ``` ### Daemon 模式 ``` build/bin/n0t teamserver --data-dir ./n0t-data --daemon ``` 在 Linux 上,`--daemon` 会创建子进程并与控制终端分离。在 Windows 上,调用者应使用带 `DETACHED_PROCESS` 参数的 `CreateProcess`。 ## CLI 参考 ### Teamserver ``` n0t teamserver [--data-dir DIR] [--host H] [--port P] [--daemon] ``` ### 身份验证 ``` n0t login [--user U] [--pass P] [--host H] [--port P] authenticate and store session n0t whoami show current identity and role n0t logout end session ``` ### Outpost(监听器)管理 ``` n0t outpost create --name N --host H --port P [--profile PR] [--protocol http|tcp] n0t outpost list n0t outpost stop --name N ``` ### Ranger(agent)交互 ``` n0t rangers list registered agents ``` ### 任务与作业管理 ``` n0t task create --name N --targets r1,r2 [--def file.coff] n0t task list n0t jobs --task ID ``` ### 用户管理(仅限 Admin) ``` n0t user create --user U --pass P [--role admin|operator] n0t user list ``` ### Ranger CLI ``` n0t-ranger --host H --port P [--id ID] [--cycles N] [--delay MS] [--jitter MS] [--protocol http|tcp] ``` - `--cycles 0` 表示无限循环运行;默认值为 3,用于测试 - `--delay` 和 `--jitter` 用于控制轮询时间(发送至 Teamserver 用于存活状态计算) - 默认协议为 HTTP;使用 `--protocol tcp` 可回退至原始 TCP ## 会话存储 客户端将其会话 token 存储在 `~/.n0t/session` 中。安全存储(OS 钥匙串 / DPAPI)是已记录在案的未来增强功能。 ## 测试 ``` ctest --test-dir build --output-on-failure # all tests bash scripts/e2e.sh # full end-to-end flow ``` 测试套件: | 测试 | 类型 | 覆盖范围 | |-------------------------|-------------|-----------------------------------------------------| | `message` | Unit | 通信格式往返转换,字段转义 | | `path_safety` | Unit | LFI 防护 — 目录遍历、绝对路径、NUL 拒绝 | | `crypto` | Unit | 密钥交换,AEAD,密码哈希,base64 | | `http` | Unit | 基于 TCP 的 HTTP 请求/响应封装 | | `auth` | Integration | 身份验证系统 + SQLite:登录、RBAC、用户管理 | | `protocol_robustness` | Security | 格式错误的输入、长字符串、特殊字符、NUL | | `e2e.sh` | End-to-end | 完整的 Client→Teamserver→Outpost→Ranger 流程 | ## 故障排除 - **`cannot reach teamserver`** — 确保已运行 `n0t teamserver` 并且 `--host/--port` 参数与您登录时使用的一致(存储在会话文件中) - **`not logged in`** — 请先运行 `n0t login` - **`permission denied`** — 该操作需要您不具备的角色权限(例如 用户管理仅限 Admin) - **`register failed`** — 确保 Outpost 正在运行,并且 Ranger 的 `--host/--port` 参数与 Outpost 的绑定地址匹配 - **`connection lost`** — Ranger 将尝试重新连接,持续时间最长为 5 分钟(可通过 `--reconnect` 配置)。请检查 Outpost 的可用性 - **`failed to initialize crypto`** — 未安装 libsodium,或者 pkg-config 未找到 libsodium ## 开发者指南 有关完整的架构参考,请参阅 `CLAUDE.md`:模块边界、 协议规范、数据模型,以及用于集成 范围外引擎(COFF 加载 / 命令执行)的开发者指南。 ### 核心原则 - **持久化是 SQLite 的唯一使用者** — 在该模块添加查询,保持记录的简单性 - **传输层保持简单** — 将行为逻辑放在 `ClientGateway`/`RangerGateway` 之后 - **跨子系统通知** 通过 `EventBus` 进行处理;在 `Teamserver` 外观中进行直接的函数调用处理请求/响应路由也是可以的 - **`common/protocol.hpp`** 是网络传输字符串定义的唯一来源 - **每个 agent 的密钥** 在每次 REGISTER 时生成并存储在数据库中;它们 可以通过随时重新注册来更新
标签:Bash脚本, C++, C2框架, HTTP工具, IP 地址批量处理, PE 加载器, 安全学习资源, 密码学, 手动系统调用, 数据擦除