Skip to content
cccskills
FreePublished on GitHub

ctf-similar-search

Find reference solutions for CTF security challenges using challenge names, distinctive code, or error messages. Search for related writeups, extract promising pages, and compare their techniques to decide which approach may fit the current challenge.

OriginalShow the original description

Searches for similar CTF challenge writeups using Tavily API for search and content extraction. Use when the user requests finding related challenges, when solve-challenge has failed multiple times and needs reference solutions, or when first identifying a challenge type and seeking examples.

Run score Not tested

See how to install

Good for

  • Finding reference solutions when a CTF challenge stalls
  • Searching with distinctive code or error messages
  • Comparing techniques used in similar challenges

Files included (3)

  • SKILL.md6.3 KB
  • search.py6.6 KB
  • search.sh565 B

SKILL.md (original)

Review the instructions the agent will receive before you install.

CTF Similar Challenge Search

Search for similar CTF challenge writeups using Tavily API.

Prerequisites

pip install requests tavily

Set your Tavily API key (from https://tavily.com) before running:

export TAVILY_API_KEY='tvly-...'

API Overview

This skill provides two interfaces:

InterfacePurposeCommand
Tavily SearchSearch for writeups and articles./search.sh search <keyword>
Tavily ExtractExtract content from URLs./search.sh extract <url1> [url2] ...

Search Workflow

Step 1: Search with Keywords

Choose keywords based on available information:

Scenario 1: Known Competition + Challenge Name

# 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"

Scenario 2: Challenge Name Only (no competition info)

# Use challenge name directly — max 3 words
./search.sh search "URL Storage"
./search.sh search "baby overflow"
./search.sh search "crypto-rsa"

Scenario 3: Unique Identifiers (code snippets, strings)

# 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"

⚠️ Critical: 3-Word Limit for Non-Code Queries

All keyword searches that are NOT code snippets or unique identifier strings MUST NOT exceed 3 words. This constraint ensures precise, focused queries that return relevant CTF writeup results instead of broad, diluted searches.

Search TypeWord LimitExamples
Competition + Challenge name≤ 3 words"DASCTF URL Storage", "HGAME baby web"
Challenge name only≤ 3 words"URL Storage", "baby overflow"
Code snippets / stringsNo limit"def encrypt_flag(key): return base64"
Error messages / identifiersNo limit"CUSTOM_MAGIC_BYTES", "ERROR: invalid padding in AES block"

For competition + challenge name searches, drop filler words (year numbers, "CTF", "competition", "writeup", "solution") and keep only the 3 most distinctive words:

  • ❌ "HGAME 2024 baby web challenge" (5 words)
  • ✅ "HGAME baby web" (3 words)
  • ❌ "DASCTF 2023 URL Storage writeup" (5 words)
  • ✅ "DASCTF URL Storage" (3 words)
  • ❌ "PlaidCTF 2025 zero day exploit solution" (6 words)
  • ✅ "PlaidCTF zero day" (3 words)

For code/string searches, use the entire unique snippet — these are exempt from the word limit:

  • ✅ "def xor_encrypt(data, key):" (code — exempt)
  • ✅ "ERROR: invalid padding in AES block" (error string — exempt)
  • ✅ "CUSTOM_MAGIC_BYTES" (identifier — exempt)

Keyword Rules

✅ Good Keywords❌ Bad Keywords
Competition + Challenge name (≤3 words)Single vulnerability type (SSRF, XSS)
Challenge name (≤3 words)Generic terms (web, pwn, crypto)
Unique code snippets (no word limit)Full sentences
Specific error messages (no word limit)Articles (a, the, in)
Library/framework namesGeneric strings (flag{}, etc.)
Custom function namesTool names alone

Why avoid these?

  • "SSRF" → returns generic vulnerability explanations, not CTF writeups
  • "flag{" → returns millions of unrelated results
  • "URL Storage DASCTF" → returns specific CTF challenges

Why the 3-word limit?

  • Forces precision: only the most distinctive keywords survive
  • Filters noise: filler words like "challenge", "writeup", "solution" dilute results
  • Improves API efficiency: shorter, focused queries consume fewer credits

Key principle: Use keywords that uniquely identify THIS challenge, not the general technique or common patterns. Keep non-code queries to 3 words or fewer.

Step 2: Review Search Results

The search returns:

  • Answer: AI-generated summary if available
  • Results: List of URLs with titles and content previews
  • Credits: API usage information

Step 3: Extract Content (Optional)

If a search result looks promising, extract its full content:

# Single URL
./search.sh extract "https://example.com/writeup"

# Multiple URLs
./search.sh extract "https://url1.com" "https://url2.com"

Step 4: Analyze and Pivot

Based on extracted content:

  • Identify common techniques used in similar challenges
  • Determine if the approach is applicable
  • Pivot to category-specific skill if needed

When to Pivot

  • If the challenge is already well-categorized, use the specific ctf-* skill
  • If you need OSINT techniques, use ctf-osint
  • If you need to generate a writeup after solving, use ctf-writeup

Quick Start

# 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"

Tips

  1. Be specific: Use competition name + challenge name when available
  2. Use unique strings: Code snippets, error messages, unique identifiers
  3. Avoid generic terms: Don't search "SSRF CTF writeup" - too broad
  4. Review first: Check search results before extracting
  5. Extract selectively: Only extract URLs that look relevant
  6. Respect the 3-word limit: For non-code queries, strip filler words and keep only the 3 most distinctive keywords

$ARGUMENTS

Reviews

No reviews yet. Tell others what you thought.

Comments

No login needed. Share how it worked for you, ask a question, or note where it did not run.

No comments yet. Be the first to write one.

Comments are published right away. Do not include personal information such as email addresses or phone numbers. Up to 2 URLs.

0 / 1,000 characters

This form is protected by reCAPTCHA, and the Google Privacy Policy and Terms of Service apply.

More skills from this repository

ctf-ai-ml

FreeSummary

Investigate AI and machine learning CTF challenges by inspecting model weights, comparing training changes, and exploring adversarial inputs that cause misclassification. Includes references for prompt injection, model reconstruction, and identifying possible training data.

  • Inspecting model weights and LoRA adapters
  • Creating inputs that cause misclassification
  • Exploring prompt injection in LLM challenges
ljagiello/ctf-skills3.5KUpdated Oct 24, 2026

ctf-crypto

FreeSummary

Analyze cryptography challenges in CTF security competitions by matching clues to known weaknesses in encryption, signatures, and random number generators. Use technique summaries and supporting code examples to work toward recovering plaintext or keys.

  • Find an approach to an RSA challenge
  • Investigate weaknesses in AES encryption
  • Recover or predict a random generator's state
ljagiello/ctf-skills3.5KUpdated Oct 24, 2026

ctf-forensics

FreeSummary

Analyze CTF evidence such as disk images, memory dumps, logs, and network captures to recover files and trace activity. Includes techniques for finding hidden data in images, audio, and PDFs, plus hardware signal analysis.

  • Recovering deleted files from disk images
  • Tracing activity in memory dumps and Windows logs
  • Reconstructing communications and transferred data from PCAP files
ljagiello/ctf-skills3.5KUpdated Oct 24, 2026

ctf-malware

FreeSummary

Analyze malware in CTF security challenges using techniques for obfuscated scripts, executable files, encrypted traffic, and memory dumps. Follow references to extract configurations, identify command-and-control servers, and find indicators of compromise, such as suspicious domains.

  • Deobfuscating JavaScript and PowerShell in CTF challenges
  • Extracting malware configurations and server addresses
  • Investigating encrypted traffic in packet captures
ljagiello/ctf-skills3.5KUpdated Oct 24, 2026

ctf-misc

FreeSummary

Explore CTF puzzles that span categories or use unusual formats, including layered encodings, restricted Python or Bash environments, QR codes, audio signals, and logic games. Provides technique references for decoding clues and solving constraints.

  • Decoding layered text encodings and QR puzzles
  • Analyzing restricted Python or Bash environments
  • Extracting clues from Morse audio and radio signals
ljagiello/ctf-skills3.5KUpdated Oct 24, 2026

ctf-osint

FreeSummary

Investigate CTF clues through OSINT, research using publicly available information. Use image searches, social profiles, DNS records, and archived pages to identify locations, trace accounts, and connect evidence from multiple public sources.

  • Identifying a photo location from signs and landmarks
  • Tracing usernames and account history across platforms
  • Investigating DNS records and archived web pages
ljagiello/ctf-skills3.5KUpdated Oct 24, 2026

See all skills by ljagiello

Report a problem with this skill