Week 09 · Files & Secrets ULTIMATE · 7 days × 180 min
Upload → RCE. Exposure → keys. Redact everything.
LFI/RFI → upload bypasses → backup/config → JS/Swagger → headers/TLS/debug → error disclosure. Partial proof (***-1234), read-only validation, stop on sensitive data.
0:00–0:15 Include sinks + wrappers + RFI precondition
List
include/require + ?file= ?page= ?lang=+php://filter/zip/data + allow_url_includefor RFI. Read WSTG ATHZ-01 § objectives ONLY.Why this matters ▼
Done-when
Sinks + wrappers + RFI condition cold.
0:15–1:05 Traversal + wrappers + log-poison path (lab only)
Do THM filepathtraversal Task 3–6 (LFI/RFI/payloads/challenges) + PortSwigger traversal labs (stripped ../, null-byte legacy) ONLY. Test
....// + %2e%2e/ + php://filter/convert.base64-encode/resource=index(lab) + log-poison THEORY (no prod writes) per HackTricks.THM: filepathtraversal T3–6Lab: traversal simple firstAll labs: traversal filterHackTricks: wrappers/poisonWhy this matters ▼
YT
Search
LFI to RCE log poisoning bug bounty.Done-when
Depth + 2 bypasses + wrapper read (lab).
1:05–2:00 Config-read chain + LFI→RCE pivot (which fired)
Read 1 config-read (THM Include-style: /etc/passwd → app config → key) + 1 LFI→RCE (log/wrapper/upload pivot named) — pivot ONLY each.
Why this matters ▼
Done-when
2 pivots named with conditions.
2:00–2:35 Include + wrapper + RFI matrix
Consolidate per PATT File Inclusion rows ONLY. Add RFI
allow_url_includecheck column (lab).Why this matters ▼
Done-when
Matrix saved.
2:35–3:00 Poison-path test + gaps
Explain log-poison flow without touching prod. Triage gaps (upload next).
Why this matters ▼
Done-when
Recited + matrix archived.
0:00–0:15 Bypass families: ext/MIME/magic/polyglot/SVG/archive
List
.php5/.phtml/.svg/.htaccess + image/jpeg + GIF89a + polyglot + unzip-slip. Read OWASP Upload sheet § validation checklist ONLY.Why this matters ▼
Done-when
6 families + 1 example each.
0:15–1:05 Ext/MIME/magic/polyglot/SVG/double-ext + race (lab)
Do PortSwigger upload 9 labs (ext/MIME/content/race/polyglot) + THM uploadvulnerabilities Task 2–6 (bypass/magic/race/shell) ONLY. Proofs: magic-byte
GIF89a+ double-ext + SVG<svg onload>+ raceTurbo 1×gate(lab). YT:unrestricted file upload bypass pentest.Lab: race-condition upload (hardest first look)All labs: upload filter (start simple)THM: upload T2–6PATT: upload rowsWhy this matters ▼
Done-when
Bypass matrix (family × result) + exec proof (lab URL).
1:05–2:00 Upload→webshell critical + SVG-XXE + ImageTragick/ExifTool/ZIP-slip
Read 1 upload→webshell critical (search
file upload RCE) — bypassed check + exec URL ONLY + 1 SVG-XXE (Week 07 bridge) + ImageTragick CVE-2016-3714 / ExifTool CVE-2021-22204 / Zip-Slip pattern names ONLY.Why this matters ▼
Stacks
Image pipelines (convert/identify) = shell-out; archives = traversal. Note
.htaccesson Apache.Done-when
3 vector notes with bypass + exec.
2:00–2:35 Bypass matrix + execution-proof column
Consolidate + add
.htaccess+ race-timing columns.Why this matters ▼
Done-when
Matrix saved.
2:35–3:00 Magic-byte test + gaps
Explain magic-byte bypass end-to-end. Triage gaps (exposure next).
Why this matters ▼
Done-when
Recited + matrix archived.
0:00–0:15 Extension list: .bak/.old/.swp/~/ .zip/.sql/.git/.env
Write list + tool mapping (
ffuf -e). Read SecLists Discovery/Web-Content README § backup/config lists ONLY.Why this matters ▼
Done-when
List + tool flags cold.
0:15–1:05 ffuf -e + .git/HEAD + .env triage (lab + gentle VDP paths)
Run
ffuf -u host/FUZZ -w common.txt -e .bak,.old,.zip,.sql -mc 200,403 -fc 404(1 small list) +/.git/HEAD + /.env + config.php~GET-only checks. WSTG INFO-03 metafiles § objectives ONLY. nucleihttp/exposures/configs/ + http/exposures/backups/on LAB ONLY.Why this matters ▼
X
Search
".git exposed" bugbountyforgit-dumperreplay pattern.Done-when
Ext fuzz + 3 triage results.
1:05–2:00 .git-leak + secrets.yml prod-key cases
Read H1 #768322 (.git → code → chain: /.git/HEAD + git-dumper replay) FULL + 1 secrets.yml prod-key (read-only
s3 ls/endpoint 200 proof, redacted) — validation ONLY.Why this matters ▼
Surprise
.git = full source = more bugs. One exposure funds the rest of the hunt.
Done-when
2 validation flows (redacted).
2:00–2:35 Partial-capture + stop rule card
Write card:
***-1234capture, no full secret/PII storage, stop on sensitive data + 24h report.Why this matters ▼
Done-when
Card saved + notes redacted.
2:35–3:00 .git-reconstruct test + gaps
Explain
HEAD → objects → dumperflow. Triage gaps (JS next).Why this matters ▼
Done-when
Recited + logs archived.
0:00–0:15 Secret shapes: AKIA/JWT/private-key/internal-URL
Write 4 regexes + triage rule (verify read-only or redact). Check SecretFinder README verification rows ONLY. YT:
JavaScript secrets bug bounty LinkFinder SecretFinder.Why this matters ▼
Done-when
Shapes + rule cold.
0:15–1:05 LinkFinder + SecretFinder on 3 largest + Swagger 4-path (gentle)
Run
linkfinder.py -i app.js -o cli -d 1+SecretFinder.py -i app.js -o clion 3 bundles + GET/swagger/v1, /v3/api-docs, /api-docs, /openapi.json. Extract paths→keys viajqon lab spec. X:JS secrets AWS key takeover min_faves:100.Why this matters ▼
Done-when
Secrets list + Swagger endpoints + risk rank.
1:05–2:00 JS AWS-key takeover + Swagger under-tested API
Read 1 JS AWS-key takeover (
aws sts get-caller-identityread-only validation) + 1 Swagger hidden-route BOLA (Week 10 bridge) — validation ONLY, redacted.Why this matters ▼
Done-when
2 validation flows (redacted).
2:00–2:35 Validation log + risk rank (no damage)
Log each secret: value(redacted) → validation (safe read/200) → risk → stop point. Never use keys beyond proof.
Why this matters ▼
Done-when
Log saved, all redacted.
2:35–3:00 Safe-validation test + gaps
Recite validation ladder (regex → read-only → redact → stop). Triage gaps.
Why this matters ▼
Done-when
Recited + log archived.
0:00–0:15 CSP/HSTS/cookie/TLS fields + debug paths
List headers +
/actuator/*, /debug, /console, /.env. Read testssl README--fastrow ONLY.Why this matters ▼
Done-when
Fields + paths cold.
0:15–1:05 testssl + header table + debug inventory (2 hosts, gentle)
Run
./testssl.sh --fast host:443+ header table (CSP/HSTS/cookies) + debug-endpoint GETs on 2 hosts. Check actuator auth (Week 07 bridge): mappings vs 401/403.Why this matters ▼
Done-when
Table + TLS + debug results.
1:05–2:00 Debug-panel RCE + TLS-misconfig note
Read 1 debug-panel RCE (Django/Rails debug=true → console) + 1 TLS-misconfig (HSTS absent/weak cipher) — trigger + impact ONLY.
Why this matters ▼
Surprise
Debug + version strings are Week 07/CVE fuel — log versions here, match NVD later.
Done-when
2 trigger→impact notes.
2:00–2:35 Panel-auth checklist + version log
Checklist: endpoint × auth × data. Log versions → KEV match (no exploit).
Why this matters ▼
Done-when
Checklist + version log.
2:35–3:00 Misconfig-impact test + gaps
Summarize how each misconfig enables a higher bug. Triage gaps.
Why this matters ▼
Done-when
Recited + table archived.
0:00–0:15 Error shapes: stack/SQL/version/path
List shapes + example strings. Read WSTG INFO-05 content-review § objectives ONLY.
Why this matters ▼
Done-when
4 shapes + 1 example each.
0:15–1:05 Forced 404/500 collection + bodies saved (lab + gentle VDP)
Force errors (
' " \ .. ; {{7*7}}singles, observe only) on lab + 2 VDP pages. Save bodies. Note SQL/stack/version/path leaks. No fuzz floods.Why this matters ▼
Done-when
Error log with bodies (redacted as needed).
1:05–2:00 Stack-trace DB-leak + version→CVE RCE
Read 1 stack-trace (DB creds/SQL in trace) + 1 version→CVE RCE (banner → NVD → patched-version diff) — leaked string + match ONLY.
Why this matters ▼
LinkedIn/X
X:
"information disclosure" bug bounty triagedfor version-info gate debates.Done-when
2 leak→match notes.
2:00–2:35 HTML comments + source-maps review
Review comments +
.js.map(Week 02 bridge) for keys/paths. Update version map → KEV.Why this matters ▼
Done-when
Comment/map findings + version update.
2:35–3:00 Error-triage test + gaps
Recite triage (shape → leak → match → impact). Triage gaps (live hunt next).
Why this matters ▼
Done-when
Recited + log archived.
0:00–0:15 Sweep plan + no-PII rule recall
Write order + redaction rule (
***-1234, no storage). Check WSTG checklist INFO + BUSL-08 malicious-upload rows ONLY.Why this matters ▼
Done-when
Plan + rule cold.
0:15–1:05 Upload matrix + backup fuzz + JS re-scan (VDP, gentle)
Run Day-2 matrix (safe extensions only, no webshell on live) + Day-3
ffuf -e(1 small) + Day-4 JS re-scan (2 bundles). Safe probes, redacted captures.Why this matters ▼
YT
Search
swagger API hidden endpoints bountyif Swagger signals appear.Done-when
Matrix + fuzz + re-scan logged (redacted).
1:05–2:00 Same-program exposures (2, redacted)
Read H1 hacktivity same-program (upload/exposure/git/JS) 2 — vector + validation ONLY, redacted. Compare your sweep gaps.
Why this matters ▼
Done-when
2 vectors + gap paragraph (redacted).
2:00–2:35 Exposure playbook + duplicate check
Update playbook (upload/backup/JS/errors). Dup-check pentester.land + H1 before drafting. Kill unvalidated regex hits.
Why this matters ▼
Done-when
Playbook + dup result + kills.
2:35–3:00 Disclosure-ethics test + gaps to Week 10
Recite redaction + stop + 24h rules. Assign gaps (API/logic) to Week 10.
Why this matters ▼
Done-when
Recited + archive + assignments.