gobelinor/CTF-destroyer

GitHub: gobelinor/CTF-destroyer

基于LangGraph的CTF智能体编排工具,通过AI Worker实现挑战的自动化解析与多轮尝试求解。

Stars: 0 | Forks: 0

# CTF Destroyer 针对 CTF 挑战的智能体编排 PoC。 该项目使用 `LangGraph` 作为编排器,并在子进程中启动专门的 worker,目前重点关注 `codex`。目标很简单:接受一个挑战,准备一个隔离的 workspace,选择合适的技能,让 worker 工作,追踪其执行情况,然后循环直到获取 flag 或达到尝试限制。 ## 项目状态 该工具仍是一个 PoC,但已具备以下功能: - 异构挑战输入的标准化 - 每个挑战的专用 workspace - artifact 的本地复制和 HTTP(S) 下载 - 按类别路由到 CTF 技能 - 执行 `mock`、`codex`、`claude` worker - 编排器循环 `route -> specialist -> evaluate` - 捕获 worker 的命令和输出 - `codex --json` 事件的实时流式传输 这还不是一个完整的多挑战编排器。 ## 运行机制 一次运行的周期: 1. CLI 加载 JSON 格式的挑战或直接参数 2. 挑战被标准化 3. 在 `.challenges/-/` 下创建本地 workspace 4. artifact 被复制到 `artifacts/` - 本地路径:复制到 workspace - `http(s)` URL:自动下载到 `artifacts/` 5. 路由器选择一个专门的技能 6. 选定的 worker 在挑战的 workspace 中启动 7. 编排器评估结果并决定停止或重新启动 当前的 LangGraph 图谱故意保持最小化: ``` START -> route -> run_specialist -> evaluate -> END | run_specialist ``` ## 结构 ``` ctf_destroyer/ cli.py # point d'entrée graph.py # graphe LangGraph skills.py # chargement + routage des skills workers.py # workers mock/codex/claude workspace.py # staging du workspace challenge skills/ ... # skills CTF locaux examples/ evaluative.json tests/ ... ``` ## 前置条件 - Python `3.11+` - 安装并认证 `codex` 以使用 `codex` 后端 - 安装并认证 `claude` 以使用 `claude` 后端 项目目前运行在 Python `3.14`,但 `langchain-core` 会发出警告。为了更干净的设置,建议使用 Python `3.12` 或 `3.13`。 ## 安装 ``` python3 -m venv .venv . .venv/bin/activate pip install -e . ``` ## 快速使用 无 LLM 的本地运行: ``` ctf-orchestrator \ --challenge-file examples/evaluative.json \ --backend-sequence mock \ --max-attempts 2 ``` 使用 `codex` 运行: ``` CODEX_TIMEOUT_SECONDS=120 \ ctf-orchestrator \ --challenge-file examples/evaluative.json \ --backend-sequence codex \ --max-attempts 1 ``` 带 `codex -> claude` 回退的运行: ``` ctf-orchestrator \ --challenge-file examples/evaluative.json \ --backend-sequence codex,claude \ --max-attempts 4 ``` ## 输入格式 CLI 可以标准化以下字段: - `title`, `name`, `challenge_name` - `description`, `scenario`, `challenge_scenario`, `challenge_text` - `category`, `category_hint` - `files`, `artifacts`, `artifact_paths` - `target_host` 或 `ip` + `port` 示例: ``` { "title": "Evaluative", "category": "misc", "description": "A rogue bot is malfunctioning, generating cryptic sequences that control secure data vaults.", "target_host": "154.57.164.64:31748", "difficulty": "Very Easy", "points": 10, "rating": 3.3, "files": [] } ``` 未识别的字段将保存在 `challenge_metadata` 中。 ## 挑战 Workspace 每个挑战在一个隔离的文件夹中执行: ``` .challenges/-/ ``` 该文件夹包含: - `challenge.json`:标准化清单 - `artifacts/`:所提供文件的副本 - `.runs/`:worker 的输出和追踪 示例: ``` .challenges/evaluative-84c696b5/ challenge.json artifacts/ .runs/ ``` ## Workers ### `mock` 不消耗配额的测试后端。用于验证图谱和状态转换。 ### `codex` `codex` worker 使用带有以下参数的 `codex exec`: - `--json` 用于详细事件 - `--output-schema` 用于强制输出最终 JSON - `-o` 用于将最后一条消息写入文件 - `-C` 用于在挑战的 workspace 中执行 每次尝试写入: - prompt 至 `.runs/codex/attempt-XX-prompt.txt` - JSON schema 至 `.runs/codex/attempt-XX-schema.json` - 事件流至 `.runs/codex/attempt-XX-events.jsonl` 如果设置了 `CODEX_STREAM_EVENTS=1`,`command_execution` 事件将实时显示: ``` [codex] start: /bin/zsh -lc ls [codex] done (0): /bin/zsh -lc ls ``` ### `claude` `claude` worker 使用带有结构化 JSON schema 的 `claude -p`。它已接入,但最近的主要工作都集中在 `codex` 上。 ## 有用的环境变量 - `CODEX_MODEL` - `CODEX_SANDBOX` - `CODEX_APPROVAL_POLICY` - `CODEX_EXTRA_ARGS` - `CODEX_TIMEOUT_SECONDS` - `CODEX_STREAM_EVENTS` - `CLAUDE_MODEL` - `CLAUDE_PERMISSION_MODE` - `CLAUDE_EXTRA_ARGS` - `CLAUDE_TIMEOUT_SECONDS` worker 的默认超时时间现在更长(`1800s`),以避免过快中断困难的运行。后续尝试也会复用在 workspace 的 `.runs/working-memory.json` 中持久化存储的结构化记忆,其中包括: - 已确认的观察结果 - 应避免的低价值线索 - 重要的内联命令和脚本 - 重新开始前需重读的交接文件 当挑战在失败后重新启动时,编排器也会重新加载 `.runs/attempt-history.json`,对之前的尝试进行批判性审查,然后为新运行提供: - 应保留的已获成果 - 可疑或已被过度挖掘的路径 - 简短的恢复指令,以避免再次陷入同样的死胡同 ## 测试 ``` .venv/bin/python -m unittest discover -s tests -v ``` ## 当前限制 - 尚无多挑战并行处理 - 尚无整个 CTF 的全局规划器 - 除本地 workspace 外尚无持久化存储 - 尚无专用于 stderr 流式传输之上的实时 UI - 尚未自动利用技能的 `references/` ## Discord 集成 CLI 现在可以在专用频道中为每个挑战创建或复用 Discord 帖子,然后发布: - 挑战的初始消息 - 路由结果(类别 + 技能) - 每次 worker 尝试 - 最终结果 本地映射持久化于: - `.challenges/-/.discord-thread.json` - `challenge.json` 中的 `discord_thread` 字段 以托管线程的文本频道为例: ``` export DISCORD_BOT_TOKEN=... export DISCORD_PARENT_CHANNEL_ID=123456789012345678 ctf-orchestrator \ --challenge-file examples/evaluative.json \ --backend-sequence mock ``` 可用的环境变量和标志: - `DISCORD_BOT_TOKEN` / `--discord-bot-token` - `DISCORD_PARENT_CHANNEL_ID` / `--discord-parent-channel-id` - 根目录下的 `.env` 如果存在则自动加载 - `--env-file chemin/.env` 允许加载另一个文件 `.env` 示例: ``` DISCORD_BOT_TOKEN=ton_bot_token DISCORD_PARENT_CHANNEL_ID=1480705892918755544 ``` ## 短期路线图 - 多个挑战的并行编排 - 更好的实时可观测性 - worker 对漏洞利用证明更严格的验证 - 更丰富的网络目标和 artifact 支持 - 专门 worker 之间的回退策略
标签:Agent, AI安全, Chat Copilot, Claude, Codex, CVE检测, DLL 劫持, LangGraph, PMD, PoC, Python, TGT, 云资产清单, 人工智能, 代码执行, 大语言模型, 子进程管理, 实时流处理, 工作流自动化, 攻防演练, 无后门, 暴力破解, 用户模式Hook绕过, 编排框架, 网络安全, 网络调试, 自动化, 逆向工具, 逆向工程, 隐私保护