ctf-agent 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (152) hide show
  1. package/AGENTS.md +131 -0
  2. package/Dockerfile +192 -0
  3. package/README.md +522 -0
  4. package/agents/ctf-analyzer.md +58 -0
  5. package/agents/ctf-controller.md +151 -0
  6. package/agents/ctf-speedrun.md +74 -0
  7. package/bin/ctf-agent.js +119 -0
  8. package/docker-compose.yml +13 -0
  9. package/mcp_config.json +19 -0
  10. package/package.json +44 -0
  11. package/references/ctf-triage-ladder.md +68 -0
  12. package/references/exploit-databases.md +575 -0
  13. package/references/llm-safety-and-policy-compliance.md +173 -0
  14. package/references/multi-agent-orchestration-and-policy-routing.md +278 -0
  15. package/references/security-events-and-intelligence.md +566 -0
  16. package/references/version-matrix.md +59 -0
  17. package/rules/ctf-execution-rules.md +44 -0
  18. package/rules/ctf-safety-framing-rules.md +140 -0
  19. package/rules/flag-validation-rules.md +25 -0
  20. package/scripts/__init__.py +1 -0
  21. package/scripts/ctf-tools.lock +205 -0
  22. package/scripts/ctf_init.py +1026 -0
  23. package/scripts/ctf_update.py +583 -0
  24. package/scripts/ctfd_client.py +81 -0
  25. package/scripts/cve_lookup.py +453 -0
  26. package/scripts/extract_flags.py +155 -0
  27. package/scripts/install_as_agent.py +278 -0
  28. package/scripts/install_ctf_tools.sh +603 -0
  29. package/scripts/parallel_triage.py +395 -0
  30. package/scripts/prompt_policy_sanitizer.py +283 -0
  31. package/scripts/scope_guard.py +444 -0
  32. package/scripts/skill_validator.py +504 -0
  33. package/scripts/workspace_cleaner.py +141 -0
  34. package/skills/ctf-ai-ml/SKILL.md +120 -0
  35. package/skills/ctf-ai-ml/adversarial-ml.md +623 -0
  36. package/skills/ctf-ai-ml/llm-attacks.md +487 -0
  37. package/skills/ctf-ai-ml/model-attacks.md +422 -0
  38. package/skills/ctf-crypto/SKILL.md +320 -0
  39. package/skills/ctf-crypto/advanced-math.md +798 -0
  40. package/skills/ctf-crypto/classic-ciphers.md +651 -0
  41. package/skills/ctf-crypto/ecc-attacks.md +347 -0
  42. package/skills/ctf-crypto/exotic-crypto-2.md +380 -0
  43. package/skills/ctf-crypto/exotic-crypto.md +528 -0
  44. package/skills/ctf-crypto/historical.md +113 -0
  45. package/skills/ctf-crypto/lattice-and-lwe.md +524 -0
  46. package/skills/ctf-crypto/modern-ciphers-2.md +563 -0
  47. package/skills/ctf-crypto/modern-ciphers-3.md +453 -0
  48. package/skills/ctf-crypto/modern-ciphers.md +649 -0
  49. package/skills/ctf-crypto/prng-attacks.md +257 -0
  50. package/skills/ctf-crypto/prng.md +664 -0
  51. package/skills/ctf-crypto/rsa-attacks-2.md +792 -0
  52. package/skills/ctf-crypto/rsa-attacks.md +487 -0
  53. package/skills/ctf-crypto/stream-ciphers.md +390 -0
  54. package/skills/ctf-crypto/zkp-and-advanced.md +456 -0
  55. package/skills/ctf-forensics/3d-printing.md +121 -0
  56. package/skills/ctf-forensics/SKILL.md +379 -0
  57. package/skills/ctf-forensics/disk-advanced.md +497 -0
  58. package/skills/ctf-forensics/disk-and-memory.md +491 -0
  59. package/skills/ctf-forensics/disk-recovery.md +699 -0
  60. package/skills/ctf-forensics/linux-forensics.md +511 -0
  61. package/skills/ctf-forensics/network-advanced.md +583 -0
  62. package/skills/ctf-forensics/network.md +645 -0
  63. package/skills/ctf-forensics/peripheral-capture.md +287 -0
  64. package/skills/ctf-forensics/signals-and-hardware.md +713 -0
  65. package/skills/ctf-forensics/steganography.md +694 -0
  66. package/skills/ctf-forensics/stego-advanced-2.md +475 -0
  67. package/skills/ctf-forensics/stego-advanced.md +481 -0
  68. package/skills/ctf-forensics/stego-image.md +691 -0
  69. package/skills/ctf-forensics/windows.md +625 -0
  70. package/skills/ctf-malware/SKILL.md +181 -0
  71. package/skills/ctf-malware/c2-and-protocols.md +274 -0
  72. package/skills/ctf-malware/pe-and-dotnet.md +108 -0
  73. package/skills/ctf-malware/scripts-and-obfuscation.md +449 -0
  74. package/skills/ctf-misc/SKILL.md +498 -0
  75. package/skills/ctf-misc/bashjails.md +323 -0
  76. package/skills/ctf-misc/ctfd-navigation.md +465 -0
  77. package/skills/ctf-misc/dns.md +255 -0
  78. package/skills/ctf-misc/encodings-advanced.md +504 -0
  79. package/skills/ctf-misc/encodings.md +431 -0
  80. package/skills/ctf-misc/games-and-vms-2.md +254 -0
  81. package/skills/ctf-misc/games-and-vms-3.md +690 -0
  82. package/skills/ctf-misc/games-and-vms-4.md +229 -0
  83. package/skills/ctf-misc/games-and-vms.md +529 -0
  84. package/skills/ctf-misc/linux-privesc.md +333 -0
  85. package/skills/ctf-misc/pyjails.md +671 -0
  86. package/skills/ctf-misc/rf-sdr.md +91 -0
  87. package/skills/ctf-osint/SKILL.md +198 -0
  88. package/skills/ctf-osint/geolocation-and-media.md +464 -0
  89. package/skills/ctf-osint/social-media.md +312 -0
  90. package/skills/ctf-osint/web-and-dns.md +341 -0
  91. package/skills/ctf-pwn/SKILL.md +214 -0
  92. package/skills/ctf-pwn/advanced-exploits-2.md +579 -0
  93. package/skills/ctf-pwn/advanced-exploits-3.md +598 -0
  94. package/skills/ctf-pwn/advanced-exploits-4.md +590 -0
  95. package/skills/ctf-pwn/advanced-exploits-5.md +119 -0
  96. package/skills/ctf-pwn/advanced-exploits.md +773 -0
  97. package/skills/ctf-pwn/advanced.md +326 -0
  98. package/skills/ctf-pwn/field-notes.md +245 -0
  99. package/skills/ctf-pwn/format-string.md +694 -0
  100. package/skills/ctf-pwn/heap-fsop.md +285 -0
  101. package/skills/ctf-pwn/heap-techniques-2.md +333 -0
  102. package/skills/ctf-pwn/heap-techniques.md +513 -0
  103. package/skills/ctf-pwn/kernel-bypass.md +421 -0
  104. package/skills/ctf-pwn/kernel-techniques.md +366 -0
  105. package/skills/ctf-pwn/kernel.md +636 -0
  106. package/skills/ctf-pwn/overflow-basics.md +611 -0
  107. package/skills/ctf-pwn/rop-advanced.md +725 -0
  108. package/skills/ctf-pwn/rop-and-shellcode.md +659 -0
  109. package/skills/ctf-pwn/sandbox-escape.md +313 -0
  110. package/skills/ctf-reverse/SKILL.md +163 -0
  111. package/skills/ctf-reverse/anti-analysis-ctf.md +204 -0
  112. package/skills/ctf-reverse/anti-analysis.md +693 -0
  113. package/skills/ctf-reverse/field-notes.md +376 -0
  114. package/skills/ctf-reverse/languages-compiled.md +666 -0
  115. package/skills/ctf-reverse/languages-platforms.md +592 -0
  116. package/skills/ctf-reverse/languages.md +553 -0
  117. package/skills/ctf-reverse/patterns-ctf-2.md +397 -0
  118. package/skills/ctf-reverse/patterns-ctf-3.md +797 -0
  119. package/skills/ctf-reverse/patterns-ctf.md +670 -0
  120. package/skills/ctf-reverse/patterns-runtime.md +274 -0
  121. package/skills/ctf-reverse/patterns.md +572 -0
  122. package/skills/ctf-reverse/platforms-hardware.md +387 -0
  123. package/skills/ctf-reverse/platforms.md +664 -0
  124. package/skills/ctf-reverse/tools-advanced-2.md +421 -0
  125. package/skills/ctf-reverse/tools-advanced.md +407 -0
  126. package/skills/ctf-reverse/tools-dynamic.md +679 -0
  127. package/skills/ctf-reverse/tools-emulation.md +319 -0
  128. package/skills/ctf-reverse/tools.md +573 -0
  129. package/skills/ctf-web/SKILL.md +153 -0
  130. package/skills/ctf-web/auth-and-access-2.md +82 -0
  131. package/skills/ctf-web/auth-and-access.md +783 -0
  132. package/skills/ctf-web/auth-infra.md +321 -0
  133. package/skills/ctf-web/auth-jwt.md +186 -0
  134. package/skills/ctf-web/client-side-advanced.md +739 -0
  135. package/skills/ctf-web/client-side.md +529 -0
  136. package/skills/ctf-web/cves.md +373 -0
  137. package/skills/ctf-web/field-notes.md +482 -0
  138. package/skills/ctf-web/node-and-prototype.md +200 -0
  139. package/skills/ctf-web/server-side-2.md +337 -0
  140. package/skills/ctf-web/server-side-advanced-2.md +559 -0
  141. package/skills/ctf-web/server-side-advanced-3.md +125 -0
  142. package/skills/ctf-web/server-side-advanced-4.md +480 -0
  143. package/skills/ctf-web/server-side-advanced.md +378 -0
  144. package/skills/ctf-web/server-side-deser.md +443 -0
  145. package/skills/ctf-web/server-side-exec-2.md +799 -0
  146. package/skills/ctf-web/server-side-exec.md +457 -0
  147. package/skills/ctf-web/server-side.md +629 -0
  148. package/skills/ctf-web/sql-injection.md +790 -0
  149. package/skills/ctf-web/web3.md +374 -0
  150. package/skills/ctf-writeup/SKILL.md +90 -0
  151. package/skills/solve-challenge/SKILL.md +269 -0
  152. package/skills.json +16 -0
@@ -0,0 +1,91 @@
1
+ # CTF Misc - RF / SDR / IQ Signal Processing
2
+
3
+ Techniques for Software-Defined Radio (SDR) signal processing using In-phase/Quadrature (IQ) data.
4
+
5
+ ## IQ File Formats
6
+ - **cf32** (complex float 32): GNU Radio standard, `np.fromfile(path, dtype=np.complex64)`
7
+ - **cs16** (complex signed 16-bit): `np.fromfile(path, dtype=np.int16).reshape(-1,2)`, then `I + jQ`
8
+ - **cu8** (complex unsigned 8-bit): RTL-SDR raw format
9
+
10
+ ## Analysis Pipeline
11
+ ```python
12
+ import numpy as np
13
+ from scipy import signal
14
+
15
+ # 1. Load IQ data
16
+ iq = np.fromfile('signal.cf32', dtype=np.complex64)
17
+
18
+ # 2. Spectrum analysis - find occupied bands
19
+ fft_data = np.fft.fftshift(np.fft.fft(iq[:4096]))
20
+ freqs = np.fft.fftshift(np.fft.fftfreq(4096))
21
+ power_db = 20*np.log10(np.abs(fft_data)+1e-10)
22
+
23
+ # 3. Identify symbol rate via cyclostationary analysis
24
+ x2 = np.abs(iq_filtered)**2 # squared magnitude
25
+ fft_x2 = np.abs(np.fft.fft(x2, n=65536))
26
+ # Peak in fft_x2 = symbol rate (samples_per_symbol = 1/peak_freq)
27
+
28
+ # 4. Frequency shift to baseband
29
+ center_freq = 0.14 # normalized frequency of band center
30
+ t = np.arange(len(iq))
31
+ baseband = iq * np.exp(-2j * np.pi * center_freq * t)
32
+
33
+ # 5. Low-pass filter to isolate band
34
+ lpf = signal.firwin(101, bandwidth/2, fs=1.0)
35
+ filtered = signal.lfilter(lpf, 1.0, baseband)
36
+ ```
37
+
38
+ ## QAM-16 Demodulation with Carrier + Timing Recovery
39
+ QAM-16 (Quadrature Amplitude Modulation) — the key challenge is carrier frequency offset causing constellation rotation (circles instead of points).
40
+
41
+ **Decision-directed carrier recovery + Mueller-Muller timing:**
42
+ ```python
43
+ # Loop parameters (2nd order PLL)
44
+ carrier_bw = 0.02 # wider BW = faster tracking, more noise
45
+ damping = 1.0
46
+ theta_n = carrier_bw / (damping + 1/(4*damping))
47
+ Kp = 2 * damping * theta_n # proportional gain
48
+ Ki = theta_n ** 2 # integral gain
49
+
50
+ carrier_phase = 0.0
51
+ carrier_freq = 0.0
52
+
53
+ for each symbol sample:
54
+ # De-rotate by current phase estimate
55
+ symbol = raw_sample * np.exp(-1j * carrier_phase)
56
+
57
+ # Find nearest constellation point (decision)
58
+ nearest = min(constellation, key=lambda p: abs(symbol - p))
59
+
60
+ # Phase error (decision-directed)
61
+ error = np.imag(symbol * np.conj(nearest)) / (abs(nearest)**2 + 0.1)
62
+
63
+ # Update 2nd order loop
64
+ carrier_freq += Ki * error
65
+ carrier_phase += Kp * error + carrier_freq
66
+ ```
67
+
68
+ **Mueller-Muller timing error detector:**
69
+ ```python
70
+ timing_error = (Re(y[n]-y[n-1]) * Re(d[n-1]) - Re(d[n]-d[n-1]) * Re(y[n-1]))
71
+ + (Im(y[n]-y[n-1]) * Im(d[n-1]) - Im(d[n]-d[n-1]) * Im(y[n-1]))
72
+ # y = received symbol, d = decision (nearest constellation point)
73
+ ```
74
+
75
+ ## Key Insights for RF CTF Challenges
76
+ - **Circles in constellation** = constant frequency offset (points rotate at fixed rate, forming a ring)
77
+ - **Spirals** = frequency offset that drifts over time (ring radius changes as amplitude/AGC also drifts). If you see points tracing outward arcs rather than closed circles, suspect combined frequency + gain instability
78
+ - **Blobs on grid** = correct sync, just noise
79
+ - **4-fold ambiguity**: DD carrier recovery can lock with 0/90/180/270 rotation - try all 4
80
+ - **Bandwidth vs symbol rate**: BW = Rs x (1 + alpha), where alpha is roll-off factor (0 to 1)
81
+ - **RC vs RRC**: "RC pulse shaping" at TX means receiver just samples (no matched filter needed); "RRC" means apply matched RRC filter at RX
82
+ - **Cyclostationary peak at Rs** confirms symbol rate even without knowing modulation order
83
+ - **AGC**: normalize signal power to match constellation power: `scale = sqrt(target_power / measured_power)`
84
+ - **GNU Radio's QAM-16 default mapping** is NOT Gray code - always check the provided constellation map
85
+
86
+ ## Common Framing Patterns
87
+ - Idle/sync pattern repeating while link is idle
88
+ - Start delimiter (often a single symbol like 0)
89
+ - Data payload (nibble pairs for QAM-16: high nibble first, low nibble)
90
+ - End delimiter (same as start, e.g., 0)
91
+ - The idle pattern itself may contain the delimiter value - distinguish by context (is it part of the 16-symbol repeating pattern?)
@@ -0,0 +1,198 @@
1
+ ---
2
+ name: ctf-osint
3
+ description: Provides open source intelligence techniques for CTF challenges. Use when gathering information from public sources, social media, geolocation, DNS records, username enumeration, reverse image search, Google dorking, Wayback Machine, Tor relays, FEC filings, or identifying unknown data like hashes and coordinates.
4
+ license: MIT
5
+ compatibility: Requires filesystem-based agent (Claude Code or similar) with bash, Python 3, and internet access for OSINT lookups.
6
+ allowed-tools: Bash Read Write Edit Glob Grep Task WebFetch WebSearch
7
+ metadata:
8
+ user-invocable: "false"
9
+ ---
10
+
11
+ # CTF OSINT
12
+
13
+ Quick reference for OSINT CTF challenges. Each technique has a one-liner here; see supporting files for full details.
14
+
15
+ ## Prerequisites & Tooling
16
+
17
+ Pre-installed via [scripts/install_ctf_tools.sh](../../scripts/install_ctf_tools.sh):
18
+ - **Python packages**: `shodan`, `Pillow` (in `~/.ctf-tools/venv`)
19
+ - **System binaries**: `whois`, `dnsutils` (`dig`, `nslookup`), `nmap`, `exiftool`, `imagemagick` (`convert`, `identify`), `curl`
20
+
21
+ ## Execution Environment & Tool Invocation
22
+
23
+ - **On Windows (WSL Kali Linux)**:
24
+ - Run OSINT intelligence and recon tools inside WSL:
25
+ ```bash
26
+ wsl -d kali-linux bash -c "whois domain.com"
27
+ wsl -d kali-linux bash -c "dig +nocmd domain.com any +multiline +noall +answer"
28
+ wsl -d kali-linux bash -c "exiftool photo.jpg"
29
+ wsl -d kali-linux bash -c "source ~/.ctf-tools/venv/bin/activate && shodan host <IP>"
30
+ ```
31
+ - **On Native Linux / WSL**:
32
+ - Activate the CTF virtualenv:
33
+ ```bash
34
+ source ~/.ctf-tools/venv/bin/activate
35
+ ```
36
+ - Use `whois`, `dig`, `nmap`, `exiftool`, `curl`, and `shodan` directly.
37
+
38
+ ## Additional Resources
39
+
40
+ - [social-media.md](social-media.md) - Twitter/X (user IDs, Snowflake timestamps, Nitter, memory.lol, Wayback CDX), Tumblr (blog checks, post JSON, avatars), BlueSky search + API, Unicode homoglyph steganography, Discord API, username OSINT (namechk, whatsmyname, Osint Industries), username metadata mining (postal codes), platform false positives, multi-platform chains, Strava fitness route OSINT
41
+ - [geolocation-and-media.md](geolocation-and-media.md) - Image analysis, reverse image search (including Baidu for China), Google Lens cropped region search, reflected/mirrored text reading, geolocation techniques (railroad signs, infrastructure maps, MGRS), Google Plus Codes, EXIF/metadata, hardware identification, newspaper archives, IP geolocation, Google Street View panorama matching, What3Words micro-landmark matching, Google Maps crowd-sourced photo verification, Overpass Turbo spatial queries, music-themed landmark geolocation with key encoding
42
+ - [web-and-dns.md](web-and-dns.md) - Google dorking (including TBS image filters), Google Docs/Sheets enumeration, DNS recon (TXT, zone transfers), Wayback Machine, FEC research, Tor relay lookups, GitHub repository analysis, Telegram bot investigation, WHOIS investigation (reverse WHOIS, historical WHOIS, IP/ASN lookup), fake service banner detection via nmap fingerprinting
43
+
44
+ ---
45
+
46
+ ## When to Pivot
47
+
48
+ - If you already have the files or packets locally and now need extraction or carving, switch to `/ctf-forensics`.
49
+ - If the task becomes active exploitation of a live HTTP service, switch to `/ctf-web`.
50
+ - If you uncover malware samples, beacons, or suspicious binaries during attribution, switch to `/ctf-malware`.
51
+
52
+ ## Quick Start Commands
53
+
54
+ ```bash
55
+ # DNS recon
56
+ dig -t any target.com
57
+ dig -t txt target.com
58
+ dig axfr @ns.target.com target.com
59
+ whois target.com
60
+
61
+ # Image metadata
62
+ exiftool image.jpg
63
+ identify -verbose image.jpg | head -30
64
+
65
+ # Web archive
66
+ curl "https://web.archive.org/web/20230101*/target.com"
67
+
68
+ # Username lookup
69
+ curl -s "https://whatsmyname.app/api/lookup?username=<user>"
70
+
71
+ # Shodan
72
+ shodan search "hostname:target.com"
73
+ shodan host <ip>
74
+ ```
75
+
76
+ ## String Identification
77
+
78
+ - 40 hex chars -> SHA-1 (Tor fingerprint)
79
+ - 64 hex chars -> SHA-256
80
+ - 32 hex chars -> MD5
81
+
82
+ ## Twitter/X Account Tracking
83
+
84
+ - Persistent numeric User ID: `https://x.com/i/user/<id>` works even after renames.
85
+ - Snowflake timestamps: `(id >> 22) + 1288834974657` = Unix ms.
86
+ - Wayback CDX, Nitter, memory.lol for historical data. See [social-media.md](social-media.md).
87
+
88
+ ## Tumblr Investigation
89
+
90
+ - Blog check: `curl -sI` for `x-tumblr-user` header. Avatar at `/avatar/512`. See [social-media.md](social-media.md).
91
+
92
+ ## Username OSINT
93
+
94
+ - [whatsmyname.app](https://whatsmyname.app) (741+ sites), [namechk.com](https://namechk.com). Watch for platform false positives. See [social-media.md](social-media.md).
95
+
96
+ ## Image Analysis & Reverse Image Search
97
+
98
+ - Google Lens (crop to region of interest), Google Images, TinEye, Yandex (faces). Check corners for visual stego. Twitter strips EXIF. See [geolocation-and-media.md](geolocation-and-media.md).
99
+ - **Cropped region search:** Isolate distinctive elements (shop signs, building facades) and search via Google Lens for better results than full-scene search. See [geolocation-and-media.md](geolocation-and-media.md).
100
+ - **Reflected text:** Flip mirrored/reflected text (water, glass) horizontally; search partial text with quoted strings. See [geolocation-and-media.md](geolocation-and-media.md).
101
+
102
+ ## Geolocation
103
+
104
+ - Railroad signs, infrastructure maps (OpenRailwayMap, OpenInfraMap), process of elimination. See [geolocation-and-media.md](geolocation-and-media.md).
105
+ - **Street View panorama matching:** Feature extraction + multi-metric image similarity ranking against candidate panoramas. Useful when challenge image is a crop of a Street View photo. See [geolocation-and-media.md](geolocation-and-media.md).
106
+ - **Road sign OCR:** Extract text from directional signs (town names, route numbers) to pinpoint road corridors. Driving side + sign style + script identify the country. See [geolocation-and-media.md](geolocation-and-media.md).
107
+ - **Architecture + brand identification:** Post-Soviet concrete = Russia/CIS; named businesses → search locations/branches → cross-reference with coastline/terrain. See [geolocation-and-media.md](geolocation-and-media.md).
108
+ - **Music-themed landmark geolocation:** Multiple images of music-related landmarks worldwide; each yields a piano key number encoding one flag character. Identify all locations first, then decode the key sequence. See [geolocation-and-media.md](geolocation-and-media.md).
109
+
110
+ ## MGRS Coordinates
111
+
112
+ - Grid format "4V FH 246 677" -> online converter -> lat/long -> Google Maps. See [geolocation-and-media.md](geolocation-and-media.md).
113
+
114
+ ## Google Plus Codes
115
+
116
+ - Format `XXXX+XXX` (chars: `23456789CFGHJMPQRVWX`). Drop a pin on Google Maps → Plus Code appears in details. Free, no API key needed. See [geolocation-and-media.md](geolocation-and-media.md).
117
+
118
+ ## Metadata Extraction
119
+
120
+ ```bash
121
+ exiftool image.jpg # EXIF data
122
+ pdfinfo document.pdf # PDF metadata
123
+ mediainfo video.mp4 # Video metadata
124
+ ```
125
+
126
+ ## Google Dorking
127
+
128
+ ```text
129
+ site:example.com filetype:pdf
130
+ intitle:"index of" password
131
+ ```
132
+
133
+ **Image TBS filters:** Append `&tbs=itp:face` to Google Image URLs to filter for faces only (strips logos/banners). See [web-and-dns.md](web-and-dns.md).
134
+
135
+ ## Google Docs/Sheets
136
+
137
+ - Try `/export?format=csv`, `/pub`, `/gviz/tq?tqx=out:csv`, `/htmlview`. See [web-and-dns.md](web-and-dns.md).
138
+
139
+ ## DNS Reconnaissance
140
+
141
+ ```bash
142
+ dig -t txt subdomain.ctf.domain.com
143
+ dig axfr @ns.domain.com domain.com # Zone transfer
144
+ ```
145
+
146
+ Always check TXT, CNAME, MX for CTF domains. See [web-and-dns.md](web-and-dns.md).
147
+
148
+ ## Tor Relay Lookups
149
+
150
+ - `https://metrics.torproject.org/rs.html#simple/<FINGERPRINT>` -- check family, sort by "first seen". See [web-and-dns.md](web-and-dns.md).
151
+
152
+ ## GitHub Repository Analysis
153
+
154
+ - Check issue comments, PR reviews, commit messages, wiki edits via `gh api`. See [web-and-dns.md](web-and-dns.md).
155
+
156
+ ## Telegram Bot Investigation
157
+
158
+ - Find bot references in browser history, interact via `/start`, answer verification questions. See [web-and-dns.md](web-and-dns.md).
159
+
160
+ ## FEC Political Donation Research
161
+
162
+ - FEC.gov for committee receipts; 501(c)(4) orgs obscure original funders. See [web-and-dns.md](web-and-dns.md).
163
+
164
+ ## IP Geolocation
165
+
166
+ ```bash
167
+ curl "http://ip-api.com/json/103.150.68.150"
168
+ ```
169
+
170
+ See [geolocation-and-media.md](geolocation-and-media.md).
171
+
172
+ ## Unicode Homoglyph Steganography
173
+
174
+ **Pattern:** Visually-identical Unicode characters from different blocks (Cyrillic, Greek, Math) encode binary data in social media posts. ASCII = 0, homoglyph = 1. Group bits into bytes for flag. See [social-media.md](social-media.md#unicode-homoglyph-steganography-on-bluesky-metactf-2026).
175
+
176
+ ## BlueSky Public API
177
+
178
+ No auth needed. Endpoints: `public.api.bsky.app/xrpc/app.bsky.feed.searchPosts?q=...`, `app.bsky.actor.searchActors`, `app.bsky.feed.getAuthorFeed`. Check all replies to official posts. See [social-media.md](social-media.md#unicode-homoglyph-steganography-on-bluesky-metactf-2026).
179
+
180
+ ## Fake Service Banner Detection
181
+
182
+ **Pattern:** Port appears open on a standard service port (22/SSH, 80/HTTP) but runs a fake service. `nmap -sV` or `nc host port` reveals the flag in the banner. Never trust port numbers alone -- always fingerprint the service. See [web-and-dns.md](web-and-dns.md#fake-service-banner-detection-via-fingerprinting-metactf-flash-2026).
183
+
184
+ ## Shodan SSH Fingerprint Lookup
185
+
186
+ Search Shodan by SSH host key fingerprint to identify servers: `shodan search "fingerprint:AA:BB:CC:..."`. See [web-and-dns.md](web-and-dns.md#shodan-ssh-fingerprint-lookup-ekoparty-ctf-2016).
187
+
188
+ ## Gaming Platform OSINT
189
+
190
+ Lookup usernames across gaming platforms (Steam, Xbox, PSN, MMOs) for character profiles, activity, and linked accounts. See [social-media.md](social-media.md#gaming-platform-osint--mmo-character-lookup-csaw-ctf-2016).
191
+
192
+ ## Resources
193
+
194
+ - **Shodan** - Internet-connected devices
195
+ - **Censys** - Certificate and host search
196
+ - **VirusTotal** - File/URL reputation
197
+ - **WHOIS** - Domain registration
198
+ - **Wayback Machine** - Historical snapshots