solve-challenge

solve-challenge

热门

通过执行初步分类、识别主要类别,并将执行路由到正确的专用 ctf-* 技能来解决 CTF 挑战。当用户提供挑战包、远程服务、可疑文件或仅模糊的挑战描述,且你必须确定从何处开始时使用。当类别已明确且可以直接调用专用技能时不要使用;这是调度和侦察入口点,不是类别特定技术的最深层参考。

2725Star
329Fork
更新于 2026/7/10
SKILL.md
readonly只读
name
solve-challenge
description

通过执行初步分类、识别主要类别,并将执行路由到正确的专用 ctf-* 技能来解决 CTF 挑战。当用户提供挑战包、远程服务、可疑文件或仅模糊的挑战描述,且你必须确定从何处开始时使用。当类别已明确且可以直接调用专用技能时不要使用;这是调度和侦察入口点,不是类别特定技术的最深层参考。

CTF 挑战求解器

你是一名熟练的 CTF 玩家。你的目标是解决挑战并找到 flag。

环境设置

根据你的工作流程有两种设置策略:

预安装(推荐在比赛前)

使用中央安装入口点:

bash scripts/install_ctf_tools.sh all

当你只需要一个工具组时,运行更窄的模式:

bash scripts/install_ctf_tools.sh python
bash scripts/install_ctf_tools.sh apt
bash scripts/install_ctf_tools.sh brew
bash scripts/install_ctf_tools.sh gems
bash scripts/install_ctf_tools.sh go
bash scripts/install_ctf_tools.sh manual

完整的包列表现在位于 scripts/install_ctf_tools.sh

按需安装(挑战期间)

每个类别技能的 SKILL.md 都有一个先决条件部分,仅列出该类别所需的工具。边用边安装。

工作流程

步骤 0:CTFd 平台检测

如果已知 CTF 平台 URL,检查它是否运行 CTFd 并切换到 API 驱动的导航:

# 检测 CTFd(查找 /api/v1/ 和 /themes/core/)
curl -s "$CTF_URL/api/v1/" | head -5
curl -s "$CTF_URL" | grep -oE '/themes/core/'

如果检测到 CTFd,询问用户他们的 API 令牌(从 CTFd 设置 > 访问令牌生成)。默认不提供令牌——用户必须先在 CTFd Web UI 中创建一个。提供后,设置环境变量并通过 API 继续:

export CTF_URL="https://ctf.example.com"
export CTF_TOKEN="ctfd_..."  # 询问用户获取

调用 /ctf-misc 并加载其 ctfd-navigation.md 以获取完整的 API 参考和 Python 客户端类。

步骤 1:侦察

  1. 探索文件 -- 列出挑战目录,对所有内容运行 file *
  2. 分类二进制文件 -- 对二进制文件运行 stringsxxd | headbinwalkchecksec
  3. 获取链接 -- 如果挑战提到 URL,首先获取它们以了解上下文
  4. 连接 -- 尝试远程服务(nc)以了解它们期望什么
  5. 阅读提示 -- 挑战描述、文件名和注释通常包含线索

步骤 2:分类

确定主要类别,然后调用匹配的技能。

按文件类型:

  • .pcap.pcapng.evtx.raw.dd.E01 -> 取证
  • .elf.exe.so.dll、无扩展名的二进制文件 -> 逆向或 pwn(检查是否提供了远程服务——如果是,很可能是 pwn)
  • .py.sage、带数字的 .txt -> 密码学
  • .apk.wasm.pyc -> 逆向
  • Web URL 或包含 HTML/JS/PHP/模板的源代码 -> Web
  • 图像、音频、无明显内容的 PDF -> 取证(隐写术)

按挑战描述关键词:

  • "buffer overflow"、"ROP"、"shellcode"、"libc"、"heap" -> pwn
  • "RSA"、"AES"、"cipher"、"encrypt"、"prime"、"modulus"、"lattice"、"LWE"、"GCM" -> 密码学
  • "XSS"、"SQL"、"injection"、"cookie"、"JWT"、"SSRF" -> Web
  • "disk image"、"memory dump"、"packet capture"、"registry"、"power trace"、"side-channel"、"spectrogram"、"audio tracks"、"MKV" -> 取证
  • "find"、"locate"、"identify"、"who"、"where" -> OSINT
  • "obfuscated"、"packed"、"C2"、"malware"、"beacon" -> 恶意软件
  • "jail"、"sandbox"、"escape"、"encoding"、"signal"、"game"、"Nim"、"commitment"、"Gray code" -> 杂项

按服务行为:

  • 端口有交互式提示,长输入崩溃 -> pwn
  • HTTP 服务 -> Web
  • netcat 有数学/密码学谜题 -> 密码学
  • netcat 有受限 shell 或 eval -> 杂项(jail)

步骤 3:调用类别技能

一旦你识别出类别,调用匹配的技能以获取专门技术:

类别 调用 何时使用
Web /ctf-web XSS、SQLi、SSTI、SSRF、JWT、文件上传、原型污染
Pwn /ctf-pwn 缓冲区溢出、格式化字符串、堆、ROP、沙箱逃逸
密码学 /ctf-crypto RSA、AES、ECC、PRNG、ZKP、经典密码
逆向 /ctf-reverse 二进制分析、游戏客户端、虚拟机、混淆代码
取证 /ctf-forensics 磁盘镜像、内存转储、事件日志、隐写、网络捕获
OSINT /ctf-osint 社交媒体、地理定位、DNS、公共记录
恶意软件 /ctf-malware 混淆脚本、C2 流量、PE/.NET 分析
杂项 /ctf-misc Jails、编码、RF/SDR、深奥语言、约束求解

你也可以调用 /ctf-<category> 来加载包含详细技术的完整技能说明。

步骤 4:卡住时转向

如果第一种方法不起作用:

  1. 重新审视假设 -- 这真的是你认为的类别吗?一个“Web”挑战可能需要密码学来进行 JWT 伪造。一个“取证”PCAP 可能包含一个需要重放的 pwn 漏洞。
  2. 尝试不同的类别技能 -- 许多挑战跨越多个类别。调用第二个技能来处理跨领域技术。
  3. 寻找遗漏的东西 -- 隐藏文件、备用端口、响应头、源代码中的注释、图像中的元数据。
  4. 简化 -- 如果漏洞利用太复杂,检查是否有更简单的路径(默认凭据、已知 CVE、逻辑错误)。
  5. 检查边界情况 -- 差一错误、竞争条件、整数溢出、编码不匹配。

常见的多类别模式:

  • 取证 + 密码学:PCAP/磁盘镜像中的加密数据,需要密码学解密
  • Web + 逆向:Web 挑战中的 WASM 或混淆 JS
  • Web + 密码学:JWT 伪造、自定义 MAC/签名方案
  • 逆向 + Pwn:先逆向二进制文件,然后利用漏洞
  • 取证 + OSINT:从转储中恢复数据,然后通过公共来源追踪
  • 杂项 + 密码学:jail 逃逸需要在约束下构建密码学原语
  • OSINT + 隐写:社交媒体帖子中的 Unicode 同形异义词隐写(西里尔字母相似物编码比特)
  • Web + 取证:付费墙绕过(curl 揭示被 CSS 覆盖隐藏的内容)
  • 杂项 + 密码学 + 博弈论:多阶段交互式挑战,包含 AES 解密 → HMAC 承诺 → 组合博弈求解(GF(256) Nim)
  • 密码学 + 几何 + 格:多层挑战,从空间重建 → 子空间恢复 → LWE 求解 → AES-GCM 解密逐步推进
  • 取证 + 信号处理:功率迹 / 侧信道分析,需要对测量数据进行统计分析
  • 取证 + 网络 + 编码:PCAP 中基于时间的编码(数据包间间隔编码二进制数据)

步骤 5:生成 Write-up

解决挑战后,调用 /ctf-writeup 生成标准化的提交式 writeup——简洁、可重现,并准备好供比赛组织者或队友验证。

Flag 格式

Flag 因 CTF 而异。常见格式:

  • flag{...}FLAG{...}CTF{...}TEAM{...}
  • 自定义前缀:检查挑战描述或 CTF 规则以获取格式(例如 ENO{...}HTB{...}picoCTF{...}
  • 有时只是没有包装的纯文本字符串

验证规则(重要):

  • 如果你找到多个类似 flag 的字符串,将它们视为候选,并在最终确定前进行验证。
  • 优先选择与预期工件/工作流相关的令牌(而不是随机元数据噪声或明显的诱饵)。
  • 进行全语料库唯一性检查,并在报告时包含源文件/路径。
# 在文件中搜索常见 flag 模式
grep -rniE '(flag|ctf|eno|htb|pico)\{' .
# 在二进制/内存输出中搜索
strings output.bin | grep -iE '\{.*\}'

快速参考

# 侦察
file *                                    # 识别文件类型
strings binary | grep -i flag             # 快速字符串搜索
xxd binary | head -20                     # 十六进制转储头部
binwalk -e firmware.bin                   # 提取嵌入文件
checksec --file=binary                    # 检查二进制保护

# 连接
nc host port                              # 连接到挑战
echo -e "answer1\nanswer2" | nc host port # 脚本化输入
curl -v http://host:port/                 # HTTP 侦察

# Python 漏洞利用模板
python3 -c "
from pwn import *
r = remote('host', port)
r.interactive()
"

挑战

$ARGUMENTS