关于 ctf-similar-search
ctf-similar-search 是通过 Tavily 查找相似 CTF 题目题解的技能,提供关键词搜索和 URL 内容提取,并指导如何缩小查询范围以定位特定题目。
主要功能
- 01搜索相似 CTF 题解
- 02提取结果 URL 内容
- 03提供精简关键词查询指引
- 04提取前先审阅搜索结果
适用场景
- 01查找指定 CTF 题目的题解
- 02用独特代码片段或错误信息搜索
- 03提取相关结果以供分析
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ ljagiello/ ctf-skills --skill ctf-similar-search安装后在 Claude Code 中输入/ctf-similar-search确认已加载。
附带文件search.pysearch.sh
详细介绍
CTF 相似挑战搜索
使用 Tavily API 搜索相似 CTF 挑战的题解。
前提条件
pip install requests tavily
运行前设置 Tavily API 密钥(从 https://tavily.com 获取):
export TAVILY_API_KEY='tvly-...'
API 概览
此技能提供两个接口:
| 接口 | 用途 | 命令 |
|---|---|---|
| Tavily Search | 搜索题解和文章 | ./search.sh search <keyword> |
| Tavily Extract | 从 URL 提取内容 | ./search.sh extract <url1> [url2] ... |
搜索工作流
第 1 步:使用关键词搜索
根据可用信息选择关键词:
场景 1:已知竞赛和挑战名称
# Format: [Competition Name] [Challenge Name] — max 3 words
./search.sh search "DASCTF URL Storage"
./search.sh search "HGAME baby web"
./search.sh search "BUUCTF pwn1"
场景 2:仅知道挑战名称(没有竞赛信息)
# Use challenge name directly — max 3 words
./search.sh search "URL Storage"
./search.sh search "baby overflow"
./search.sh search "crypto-rsa"
场景 3:唯一标识符(代码片段、字符串)
# Use unique, non-trivial strings from the challenge — NO word limit
./search.sh search "def encrypt_flag(key): return base64"
./search.sh search "CUSTOM_MAGIC_BYTES"
./search.sh search "ERROR: invalid padding in AES block"
⚠️ 重要:非代码查询最多使用 3 个词
所有非代码片段或唯一标识符字符串的关键词搜索,词数不得超过 3 个。 此限制可确保查询精准、聚焦,返回相关的 CTF 题解,而非范围过广、内容分散的结果。
| 搜索类型 | 词数限制 | 示例 |
|---|---|---|
| 竞赛 + 挑战名称 | ≤ 3 个词 | "DASCTF URL Storage"、"HGAME baby web" |
| 仅挑战名称 | ≤ 3 个词 | "URL Storage"、"baby overflow" |
| 代码片段 / 字符串 | 不限 | "def encrypt_flag(key): return base64" |
| 错误消息 / 标识符 | 不限 | "CUSTOM_MAGIC_BYTES"、"ERROR: invalid padding in AES block" |
搜索竞赛 + 挑战名称时,删除填充词(年份数字、“CTF”、“competition”、“writeup”、“solution”),只保留最具辨识度的 3 个词:
- ❌
"HGAME 2024 baby web challenge"(5 个词) - ✅
"HGAME baby web"(3 个词) - ❌
"DASCTF 2023 URL Storage writeup"(5 个词) - ✅
"DASCTF URL Storage"(3 个词) - ❌
"PlaidCTF 2025 zero day exploit solution"(6 个词) - ✅
"PlaidCTF zero day"(3 个词)
搜索代码 / 字符串时,使用完整的唯一片段——这类查询不受词数限制:
- ✅
"def xor_encrypt(data, key):"(代码——不受限制) - ✅
"ERROR: invalid padding in AES block"(错误字符串——不受限制) - ✅
"CUSTOM_MAGIC_BYTES"(标识符——不受限制)
关键词规则
| ✅ 好的关键词 | ❌ 不好的关键词 |
|---|---|
| 竞赛 + 挑战名称(≤3 个词) | 单一漏洞类型(SSRF、XSS) |
| 挑战名称(≤3 个词) | 通用术语(web、pwn、crypto) |
| 唯一代码片段(不限词数) | 完整句子 |
| 具体错误消息(不限词数) | 冠词(a、the、in) |
| 库 / 框架名称 | 通用字符串(flag{} 等) |
| 自定义函数名称 | 单独的工具名称 |
为什么要避免这些?
- “SSRF” → 返回通用漏洞说明,而非 CTF 题解
- “flag{” → 返回数百万条无关结果
- “URL Storage DASCTF” → 返回具体的 CTF 挑战
为什么限制为 3 个词?
- 提高精准度:只保留辨识度最高的关键词
- 过滤噪声:像“challenge”、“writeup”、“solution”这样的填充词会稀释结果
- 提高 API 效率:更短、更聚焦的查询消耗的额度更少
核心原则: 使用能唯一标识当前挑战的关键词,而不是通用技术或常见模式。非代码查询最多使用 3 个词。
第 2 步:查看搜索结果
搜索会返回:
- 答案:如果可用,则提供 AI 生成的摘要
- 结果:包含标题和内容预览的 URL 列表
- 额度:API 使用信息
第 3 步:提取内容(可选)
如果某条搜索结果看起来有价值,可以提取其完整内容:
# Single URL
./search.sh extract "https://example.com/writeup"
# Multiple URLs
./search.sh extract "https://url1.com" "https://url2.com"
第 4 步:分析并调整方向
根据提取的内容:
- 找出相似挑战中常用的技术
- 判断该方法是否适用
- 如有需要,转向特定类别的技能
何时切换
- 如果挑战已经分类明确,请使用特定的
ctf-*技能 - 如果需要 OSINT 技术,请使用
ctf-osint - 如果需要在解题后生成题解,请使用
ctf-writeup
快速开始
# Scenario 1: Competition + Challenge name (≤3 words)
./search.sh search "DASCTF URL Storage"
# Scenario 2: Challenge name only (≤3 words)
./search.sh search "URL Storage"
# Scenario 3: Unique identifier from challenge (no word limit)
./search.sh search "def xor_encrypt(data, key):"
./search.sh search "ERROR: invalid padding"
# Extract content from promising results
./search.sh extract "https://ctftime.org/writeup/12345"
提示
- 具体明确:如有可用信息,请使用比赛名称 + 挑战名称
- 使用独特字符串:代码片段、错误消息、唯一标识符
- 避免通用词语:不要搜索「SSRF CTF writeup」——范围太广
- 先检查:提取内容前先查看搜索结果
- 有选择地提取:仅提取看起来相关的 URL
- 遵守 3 个词的限制:对于非代码查询,删去填充词,只保留最具辨识度的 3 个关键词
$ARGUMENTS
评论
支持 Markdown