Week 02 · Recon Mountain ULTIMATE · 7 days × 180 min
Passive → active → rank → spider → secrets.
Ultimate pipeline: subfinder → dnsx → httpx → naabu → katana/gau → LinkFinder/SecretFinder → trufflehog → diff. Every block pins exact flags, THM tasks, YouTube searches, H1 patterns. New hosts outrank old.
0:00–0:20 Recall: passive sources + ASN + takeover types
List crt.sh, subfinder passive, amass passive, assetfinder, gau archive. Then read Can-I-Take-Over-XYZ fingerprints.json — Heroku + S3 + GitHub Pages rows ONLY + bgp.he.net + asnlookup.com — 1 ASN lookup demo ONLY. Dangling types: CNAME/NS/MX/A.
Why this matters ▼
What it is
Cert logs + ASN + acquisitions = scope you did not know existed. NXDOMAIN vs 404 decides takeover (Azure needs NXDOMAIN).
Gap
ASN + alt-TLD + reverse-WHOIS or log it.
Search
YT:
subdomain enumeration subfinder amass bug bounty. X:subdomain takeover min_faves:100 lang:en.Done-when
Sources + 4 dangling types + 3 fingerprints cold.
0:20–1:10 Passive harvest: crt.sh + 3 tools → sort -u (VDP)
Run
subfinder -d target -all -recursive -o subs.txt+amass enum -passive -d target+assetfinder --subs-only target+ crt.sh%25.targetCSV.sort -u → passive-day1.txt. THM subdomainenumeration T2 (crt.sh/Google site:) + T3 (dnsrecon/sublist3r) READ ONLY. No brute, no resolve yet.Why this matters ▼
Tools
subfinder -dL scope.txt -o subs.txt,amass intel -asn AS12345for range expansion.H1
H1 #665398 Starbucks Azure + #953719 Acronis Webflow — both passive finds. Extract CNAME + proof shape.
Done-when
Deduped list + count logged.
1:10–2:00 Fingerprint study + H1 PoCs (read, no claiming)
Read 0xpatrik subdomain-takeover-basics — CNAME table + claim matrix ONLY + H1 #665398 (dig CNAME → NXDOMAIN → azurewebsites deploy) + #953719 (proxy-ssl.webflow 404 → paid-plan claim, screenshots F940499) ONLY + H1 #2567048 Smule SendGrid (claim to mark busy) thread ONLY.
Why this matters ▼
Pattern
dig CNAME→ service 404/NXDOMAIN → fingerprints.json match → benign claim file only. Never destructive.Done-when
3 PoC shapes noted + candidates flagged, nothing claimed.
2:00–2:35 ASN expand + acquisitions + alt-TLD sweep plan
Expand via amass intel -asn + bgp.he.net range ONLY. Check Crunchbase/Wikipedia acquisitions. Plan alt-TLD + reverse-WHOIS per HackTricks External Recon § ASN/WHOIS ONLY. THM passiverecon T2–T4 (whois/dig/shodan) ONLY.
Why this matters ▼
What it is
Company recon beats domain recon. Sibling + alt-TLD = Week 11 infra wins preview.
Done-when
ASN ranges + 1 acquisition pivot + sweep list.
2:35–3:00 Passive-before-brute test + gap log
Explain why brute before passive burns scope + triggers WAF. Log gaps (amass intel? alt-TLD tool?).
Why this matters ▼
Done-when
Recited + passive-day1.txt archived.
0:00–0:15 Wordlist choice: Assetnote vs commonspeak vs namelist
Compare SecLists Discovery/DNS subdomains-top1million-5000.txt + namelist.txt rows ONLY. Rule: VDP = top-5000 first, never million-scale day 2. Note Assetnote best-dns-wordlist existence.
Why this matters ▼
What it is
Right-sized list beats biggest list. 5000 + passive gaps = 95% hosts.
Done-when
List chosen + reason logged.
0:15–1:05 Brute + dnsx resolve + httpx rank (VDP, in-scope)
Brute remaining namespace (small list).
dnsx -l subs.txt -a -cname -resp -silent -o resolved.txt+ wildcard checkdnsx -wildcardrow ONLY.httpx -l resolved.txt -td -cdn -title -status-code -silent -o live.txt. THM gobusterthebasics T5 DNS + T6 vhost + furthernmap T3 (-sS/-sV) READ ONLY.Why this matters ▼
Tools
dnsx kills wildcards; httpx
-td -cdn -title -tech-detect -status-coderanks. Order: scope → naming (admin/dev/staging) → tech → newness → no-WAF.YT
Search
httpx naabu ranking live hosts(@NahamSec/@STOKfm).Done-when
resolved.txt + live.txt with status/title/tech.
1:05–2:00 Naming-signal top-10 + dev/staging writeup
Extract top-10 (dev/stage/admin/internal/api/mobile). Read pentester.land 1 dev/staging bug — note the hostname pattern ONLY + X search
JS secrets bug bountyskim for naming thread.Why this matters ▼
Pattern
Staging/dev = missing auth, verbose errors, old code. Naming beats tech for day-2 priority.
Done-when
Top-10 + 1 writeup pattern logged.
2:00–2:35 WAF/CDN column + screenshots narrowed + outliers
Add WAF/no-WAF via wafw00f single-host + httpx -cdn ONLY. Screenshot top-10 only (not 500 hosts). Flag outliers: odd ports, old titles, huge content-length.
Why this matters ▼
What it is
No-WAF + new + staging = Week 03–05 targets. WAF hosts = filter-evasion tax.
Done-when
Ranked table with WAF + outlier flags.
2:35–3:00 Ranking-order test + gaps
Recite: scope → naming → tech → newness → no-WAF. Triage gaps.
Why this matters ▼
Done-when
Recited + live.txt archived.
0:00–0:15 naabu vs nmap roles + httpx -td fields
State: naabu = fast SYN breadth, nmap -sV/-sC = depth on interesting only. Check naabu README top-ports + exclude-cdn rows ONLY + nmap -sSVC pattern (no live run). httpx fields: title/tech/cdn/status.
Why this matters ▼
What it is
Scan breadth fast, fingerprint deep rarely. Full-port nmap on VDP day 3 = noise + rate-limit.
Done-when
Roles + command shapes cold.
0:15–1:05 naabu top-1000 + nmap -sV on interesting + whatweb (VDP)
Run
naabu -l live.txt -top-ports 1000 -exclude-cdn -o ports.txt.nmap -sV -sC -p<open>on ≤3 interesting hosts ONLY per THM furthernmap T3 (-sS/-sV/-O) + T11 NSE ONLY.whatweb -a 3+wafw00f -i live.txt(gentle).Why this matters ▼
Stacks
8889 Presto / 8761 Eureka / swagger / :8080 actuator = open-data gold. Odd port + old title = priority.
Done-when
ports.txt + 3 service banners + WAF map.
1:05–2:00 Tech clusters → bug-class expectations + CVE candidates
Cluster by HackTricks web fingerprint table ONLY (PHP/Node/Python/Java/Ruby/Go/.NET). Log versions → NVD + CISA KEV search (1 candidate, no exploit). Read pentester.land 1 exposed-panel/version→CVE case — note version string ONLY.
Why this matters ▼
What it is
Version today = CVE match tomorrow. Log host|product|version|source.
Done-when
Clusters + 1 CVE candidate logged, no exploit.
2:00–2:35 Shortlist interesting hosts (≤5) + nuclei tech dry-run (safe)
Pick ≤5 (staging + no-WAF + odd-port + old-stack).
nuclei -u host -t http/misconfiguration/ -rate-limit 5dry-run on 1 host ONLY (no vuln templates on live).Why this matters ▼
Common mistake
Full nuclei vuln scan on VDP. CUT — misconfig dry-run only.
Done-when
Shortlist + 1 dry-run log.
2:35–3:00 naabu vs nmap test + gaps
Recite roles + your shortlist rationale. Triage gaps.
Why this matters ▼
Done-when
Recited + ports + map archived.
0:00–0:15 katana vs gau vs hakrawler + arjun purpose
State roles, then check katana
-d 5 -js-crawl+ gau--subs+ Arjun-m GET,POSTflag rows ONLY.Why this matters ▼
What it is
katana = live crawl, gau = archive URLs, Arjun = hidden params. Together = input inventory.
Done-when
Roles + flags cold.
0:15–1:05 katana -jc -xhr + gau + ffuf api/v1/FUZZ + arjun 1 run (shortlist hosts)
Run
katana -u host -d 5 -js-crawl -o katana.txt+gau --subs host | httpxon ≤3 hosts.ffuf -u host/api/v1/FUZZ -w common.txt -mc 200,301+arjun -u host/api -m GET,POST1 run. THM contentdiscovery T2–T3 (robots/ffuf) + ffuf T5 (param FUZZ) ONLY.Why this matters ▼
YT
Search
katana gau js secrets trufflehog(@STOKfm/@NahamSec).Done-when
katana.txt + gau URLs + params + api versions.
1:05–2:00 Hidden vs duplicate vs alternate params + Swagger check
Classify found params. Probe
/swagger/v1, /v3/api-docs, /api-docs, /openapi.json(4 paths, GET only). Read pentester.land 1 param-miner + 1 api-docs exposure — note param name + endpoint ONLY.Why this matters ▼
Pattern
Swagger = under-tested surface (Week 09–10). Hidden params = Week 03 mass-assignment fuel.
Done-when
Param classes + 4-path Swagger result logged.
2:00–2:35 Param + API-version inventory for target
Build inventory: param → method → auth → reflection (Day-3 trace link). Note v1 vs v2 gaps for Week 10.
Why this matters ▼
Done-when
Inventory sheet saved.
2:35–3:00 Param-type test + gaps
Recite hidden/duplicate/alternate with 1 example each. Triage gaps.
Why this matters ▼
Done-when
Recited + inventory archived.
0:00–0:15 LinkFinder vs SecretFinder vs manual regex roles
State roles, then check LinkFinder
-i -o cli -d 1+ SecretFinder-i -o cliusage ONLY. Regexes:AKIA[0-9A-Z]{16},eyJhbGciOi,BEGIN PRIVATE KEY,x-amz-credential.Why this matters ▼
What it is
LinkFinder = endpoints, SecretFinder = keys, grep =
fetch/axios/process.env+ internal URLs. Triage, never exfiltrate.Done-when
Roles + 4 regexes cold.
0:15–1:05 Extract JS → endpoints + secrets triage (3 largest bundles)
List JS URLs (katana + Sources). Run LinkFinder + grep fetch/axios + SecretFinder on 3 largest. Check source maps (
.js.map) +/package.jsonexposure (GET only). THM walkinganapplication Debugger/Network revisit.Why this matters ▼
YT/X
YT:
katana gau js secrets trufflehog. X:JS secrets bug bounty.H1
JS AWS-key takeover pattern: validate via
aws sts get-caller-identityread-only or report redacted — Week 09 deep-dives, today triage only.Done-when
Endpoints + triaged secrets + map/source-map result.
1:05–2:00 JS-secret + source-map writeups (key → impact)
Read PATT API Key Leaks 1 AWS-key case — validation steps ONLY + pentester.land 1 source-map/bundle exposure — note exposed path ONLY.
Why this matters ▼
Pattern
Key without impact = info. Key +
sts/data read = bounty. Partial redaction always.Done-when
2 triage notes with validation plan (no live validation beyond safe read).
2:00–2:35 Internal URLs + Swagger-from-JS inventory
Flag internal/staging URLs + API hosts from JS. Re-probe Swagger paths from Day 4 with JS-found hosts. Log excessive-data candidates for Week 10.
Why this matters ▼
Done-when
Internal-URL list + Swagger delta logged.
2:35–3:00 3-secret-types test + gaps
Name 3 secret shapes + where each hides in JS. Triage gaps.
Why this matters ▼
Done-when
Recited + JS triage sheet archived.
0:00–0:15 Dork operators + trufflehog/gitleaks roles
Memorize
filename:.env AKIA "BEGIN PRIVATE KEY" org:target. Check trufflehogfilesystem . --only-verified+ gitleaksdetect --source . -vrows ONLY.Why this matters ▼
What it is
Org dorks find committed secrets; scanners verify without exfil. Scope-respect mandatory.
Done-when
Operators + 2 commands cold.
0:15–1:05 Org dorks + dry-run on test repo + in-scope buckets
Run org dorks (read-only). Dry-run trufflehog/gitleaks on a TEST repo ONLY (never чужой full clone). Check buckets in-scope ONLY via cloud_enum
-k target -m 50+ S3 URL pattern (BucketRegionalDomainName + ListBucketResult) READ. YT:github dorking bug bounty live,cloud_enum S3 takeover practical.Why this matters ▼
H1
Open S3/Presto/Eureka: search hacktivity
open S3 bucket— pattern ListBucketResult + write-test poc.txt (Week 11 deep-dives, today in-scope check only).Common mistake
Brute-forcing OOS buckets, cloning entire orgs. CUT — in-scope + dry-run only.
Done-when
Dork log + dry-run + in-scope bucket result.
1:05–2:00 S3-misconfig + GitHub-leak→ATO writeups
Read PATT API Key Leaks 1 S3 case + pentester.land 1 GitHub-leak→ATO — validation + impact ONLY (no secret reuse).
Why this matters ▼
Pattern
Leaked key → read-only validation → impact (data/ATO path). Never use keys to pivot beyond proof.
Done-when
2 triage notes with stop-rule.
2:00–2:35 Exposure notes + partial-redaction rule
Write notes with
***-1234redaction. Rule: full secret/PII never stored. Reference WSTG INFO metafiles headings ONLY.Why this matters ▼
Done-when
Notes redacted + rule card written.
2:35–3:00 Dork + scope-respect test + gaps
Recite dork syntax + in-scope rule. Triage gaps.
Why this matters ▼
Done-when
Recited + logs archived.
0:00–0:20 Pipeline recall + WSTG INFO tick
Recite passive→resolve→rank→ports→spider→JS→dorks→diff. Tick WSTG checklist INFO rows + HuntBook Phase 1–2 headings ONLY.
Why this matters ▼
Done-when
Recited + % logged.
0:20–1:20 Full passive→httpx→katana on VDP + diff vs Day 1
Run pipeline on VDP (gentle flags only).
diff passive-day1.txt passive-day7.txt | tee diff.txt. New hosts = Week 03 priority. No vuln scans, no OOS.Why this matters ▼
YT
Search
github dorking bug bounty livefor diff-alert mindset.Done-when
recon/ + diff.txt + ranked Week-03 list.
1:20–2:20 Compare vs 1 published recon writeup
Read pentester.land 1 recon-methodology — stages vs yours ONLY. Log 1 missed stage (ASN? JS? alt-TLD?).
Why this matters ▼
Done-when
Gap paragraph logged.
2:20–2:45 recon/ dir + ranked targets + reusable recon.sh
Save recon.sh snippet (subfinder→dnsx→httpx→katana→diff) + ranked list for Week 03 (staging/no-WAF/new first).
Why this matters ▼
Done-when
Script + list saved, stranger-readable.
2:45–3:00 Pipeline recite + submit nothing + gaps
Recite full pipeline. Confirm no active/OOS violations. Assign gaps to Week 03.
Why this matters ▼
Done-when
Recited + recon/ archived + gaps assigned.