mcpField
C
ctf-similar-search

ctf-similar-search

github.com/ljagiello安全3.6k333 次安装2 天前更新
代码仓库

关于 ctf-similar-search

ctf-similar-search 是通过 Tavily 查找相似 CTF 题目题解的技能,提供关键词搜索和 URL 内容提取,并指导如何缩小查询范围以定位特定题目。

主要功能

  1. 01搜索相似 CTF 题解
  2. 02提取结果 URL 内容
  3. 03提供精简关键词查询指引
  4. 04提取前先审阅搜索结果

适用场景

  1. 01查找指定 CTF 题目的题解
  2. 02用独特代码片段或错误信息搜索
  3. 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"

提示

  1. 具体明确:如有可用信息,请使用比赛名称 + 挑战名称
  2. 使用独特字符串:代码片段、错误消息、唯一标识符
  3. 避免通用词语:不要搜索「SSRF CTF writeup」——范围太广
  4. 先检查:提取内容前先查看搜索结果
  5. 有选择地提取:仅提取看起来相关的 URL
  6. 遵守 3 个词的限制:对于非代码查询,删去填充词,只保留最具辨识度的 3 个关键词

$ARGUMENTS

评论

支持 Markdown