Week 08 · Fetch & HTTP ULTIMATE · 7 days × 180 min

Fetch features first. Probe gently. Never DoS.

SSRF → metadata → redirect chains → Host/CRLF → smuggling → cache. Collaborator-gated blind proofs, 307/308 OAuth chains, 1× smuggle timing, no cache DoS. Inventory everything.

OOB-gatedprobe-no-DoSticks bbv2-08
🎉 Week complete — all boxes ticked. Move to Week 09.
Real 180 min · import-URL/webhook/PDF/avatar = SSRF
  1. 0:00–0:15 Fetch-feature inventory model + response types

    List import/webhook/PDF/avatar/fetch + full/partial/blind responses. Read PortSwigger SSRF topic § basic vs blind ONLY.

    Why this matters ▼

    Done-when

    Inventory model + 3 response types cold.

  2. 0:15–1:05 Localhost → blind OOB labs + THM ssrfhr (lab)

    Do PortSwigger SSRF 7 labs (localhost → 192.168 backends → blacklist/whitelist bypass → blind OOB) IN ORDER + THM ssrfhr Task 1–5 (intro/impact/locations/blind/practical) ONLY. Blind via Collaborator, baseline first.

    Why this matters ▼

    YT

    Search SSRF to AWS metadata takeover bug bounty + blind SSRF out of band Burp Collaborator.

    Done-when

    Localhost + bypass + OOB proofs (lab).

  3. 1:05–2:00 Slack [::] $100 + Evernote metadata patterns

    Read Slack [::] blacklist-bypass $100 summary + H1 #264671 Evernote (stockApi= + 2130706433/127.1 bypass + token order) — bypass + order ONLY + H1 #341876 ImageMagick SSRF (file-format fetch + Collaborator) — sink ONLY.

    Why this matters ▼

    Pattern

    Fetch-param + filter-bypass (encode/octal/IPv6/0.0.0.0/@/#) + OOB → internal. SSRF bible table is the reference.

    Done-when

    2 bypasses + fetch→internal order noted.

  4. 2:00–2:35 Bypass table: encode/octal/IPv6/0.0.0.0/@/#/redirect

    Consolidate per PATT SSRF blacklist + whitelist-via-@/ # rows + HackTricks cloud-metadata endpoints ONLY.

    Why this matters ▼

    Done-when

    Table saved for Day 2.

  5. 2:35–3:00 Bypass-types test + gaps

    Recite 5 bypass families cold. Triage gaps (metadata next).

    Why this matters ▼

    Done-when

    Recited + table archived.

Hunter mindset: Every URL fetch is a suspect.
Real 180 min · cloud cred = critical, stop + report
  1. 0:00–0:15 IMDSv1 vs v2 + ECS/GCP/Azure variants

    Write GET /latest/meta-data/iam/security-credentials/ vs PUT /latest/api/token hop. Read AWS IMDS retrieval + IMDSv2 configuration § token TTL ONLY.

    Why this matters ▼

    Done-when

    v1/v2 + 2 variants cold.

  2. 0:15–1:05 IMDSv1 creds → role + v2 token hop (lab only)

    On LAB SSRF: fetch role-name → creds JSON (lab), then PUT token + X-aws-ec2-metadata-token header hop (lab). Note ECS task-role + GCP/Azure header variants per HackTricks cloud-metadata endpoints ONLY. If v2 enforced → STOP takeover, pivot to internal HTTP scan theory.

    Why this matters ▼

    Done-when

    v1 chain + v2 hop (lab) + stop rule written.

  3. 1:05–2:00 SSRF→IAM→s3-ls chain + task-role pivot

    Read 1 metadata-takeover chain (role creds → aws s3 ls read-only) + 1 ECS task-role pivot — credential-handling + stop point ONLY. X: SSRF IMDS bugbounty lang:en min_faves:50.

    Why this matters ▼

    Surprise

    DB creds (W06) + SSRF creds + JS keys (W02) converge on aws s3 ls — same read-only validation everywhere.

    Done-when

    Chain diagram with stop point.

  4. 2:00–2:35 Cred-handling + stop-and-report card

    Write card: redact keys, no privilege use beyond role-name + s3 ls, 24h report. Reference OWASP SSRF prevention sheet § remediation quote ONLY.

    Why this matters ▼

    Done-when

    Card saved.

  5. 2:35–3:00 IMDSv2-diff test + gaps

    Explain v2 token defense + bypass condition (PUT allowed?). Triage gaps.

    Why this matters ▼

    Done-when

    Recited + card archived.

Hunter mindset: Role-name is enough proof. Keys stay redacted.
Real 180 min · redirect alone low, chain high
  1. 0:00–0:15 Bypass primitives: // \\ %2f %5c pollution

    List scheme-relative/backslash/encoding/param-pollution. Read PortSwigger open-redirect § bypass rows ONLY.

    Why this matters ▼

    Done-when

    4 primitives + 1 example each.

  2. 0:15–1:05 30+ bypass matrix (lab)

    Build matrix per PATT Open Redirect 30+ rows (//, \\, %2f, %5c, @, #, ?next=) ONLY on lab ?next=/, ?redirect=, ?returnUrl=. Note 301/302 (downgrade POST→GET) vs 307/308 (preserve) split.

    Why this matters ▼

    Done-when

    Matrix with status + Location per cell.

  3. 1:05–2:00 Redirect→OAuth-theft + SSRF-aid + 307/308 method chain

    Chain on lab: redirect → OAuth redirect_uri mismatch → code theft (Week 04 bridge) + redirect → SSRF filter aid (//evil%2f..). Read hacktivity open redirect OAuth takeover 1 report — chained param ONLY.

    Why this matters ▼

    Done-when

    2 chain diagrams with status codes.

  4. 2:00–2:35 Redirect matrix + chain templates

    Consolidate + write OAuth-theft + SSRF-aid templates (param → bypass → impact).

    Why this matters ▼

    Done-when

    Templates saved.

  5. 2:35–3:00 Pay-vs-alone test + gaps

    Judge 3 redirects (alone vs chained). Triage gaps.

    Why this matters ▼

    Done-when

    Judged + matrix archived.

Hunter mindset: Test 301/302/307/308 separately.
Real 180 min · backend trusts Host = poison
  1. 0:00–0:15 Host trust points: reset links, cache keys, routing

    List 3 trust points. Read PortSwigger host-header topic § reset-poisoning ONLY.

    Why this matters ▼

    Done-when

    3 points + poison idea cold.

  2. 0:15–1:05 Reset-poisoning labs + cache-key Host variants (lab)

    Do PortSwigger host-header 5 labs (password-reset poisoning ATO incl.) IN ORDER. Test Host: evil + X-Forwarded-Host + cache-key variants. THM httpin137minutes Task 8 (Host/Cache headers) ONLY.

    Why this matters ▼

    H1

    Search hacktivity host header reset poisoning — poisoned link + token theft flow (Week 04 bridge).

    Done-when

    Poison proof (lab) + variant table.

  3. 1:05–2:00 CRLF header-split + log→admin XSS/SQL

    Test %0d%0aSet-Cookie split → fixation/XSS per PATT CRLF rows ONLY (lab) + log injection (\n[admin]) → admin-panel XSS/SQL theory (no prod log writes). Read HackTricks CRLF § log-sink rows ONLY.

    Why this matters ▼

    Done-when

    Split demo (lab) + sink list (theory).

  4. 2:00–2:35 Host + CRLF matrices + log-sink list

    Consolidate 2 matrices + sinks (auth logs, error logs, analytics).

    Why this matters ▼

    Done-when

    Matrices + list saved.

  5. 2:35–3:00 Host-impact test + gaps

    Summarize 3 impacts (ATO/cache/route). Triage gaps.

    Why this matters ▼

    Done-when

    Recited + matrices archived.

Hunter mindset: Trusted header + attacker value = poison.
Real 180 min · front vs back disagree = smuggle
  1. 0:00–0:15 CL.TE vs TE.CL vs H2-downgrade vs TE.0 shapes

    Draw 4 shapes. Read PortSwigger smuggling topic § CL.TE/TE.CL defs ONLY + Kettle Must-Die § TE.0 + H2.CL rows ONLY.

    Why this matters ▼

    Done-when

    4 shapes + differentials cold.

  2. 0:15–1:05 Smuggler probe + Turbo confirm on lab (timing only)

    Run smuggler.py -u lab -m POST -x -q -l smug.log -c default.py probe ONLY + Turbo single-packet DesyncAttack_CLTE/TECL on LAB ONLY (timing differential, no exploit). Smuggler DOCUMENT.md § detection probes ONLY. YT: HTTP request smuggling CL.TE TE.CL James Kettle.

    Why this matters ▼

    X

    Accounts: @albinowax @defparam for desync threads (read-only).

    Common mistake

    Smuggling on live/CDN. CUT — lab timing only.

    Done-when

    Probe log + timing differential (lab).

  3. 1:05–2:00 Desync cred-hijack paper + TE.0 CDN case (read, no replay)

    Read Kettle Must-Die § cred-hijack flow + mitigation table ONLY + 1 TE.0 CDN report summary — variant shape ONLY. Note H2 rapid-reset as DoS class (recognize, never test live).

    Why this matters ▼

    Done-when

    Flow + variant + mitigation noted.

  4. 2:00–2:35 Probe log + false-positive checks

    Log probe → confirm → FP checks (retry, connection reuse, timeout vs desync). Reference Turbo tiscripts gate comments ONLY.

    Why this matters ▼

    Done-when

    Log format with FP column.

  5. 2:35–3:00 CL.TE vs TE.CL test + gaps

    Explain with header pairs. Triage gaps (cache next).

    Why this matters ▼

    Done-when

    Recited + log archived.

Hunter mindset: Timing alone is not desync. Confirm + FP-check.
Real 180 min · cache stores attacker output for victims
  1. 0:00–0:15 Key vs unkeyed + Vary + deception paths

    Define keyed (Host/URI) vs unkeyed (X-Forwarded-Host/UTM/UA) + Vary + /profile/.json confusion. Read PortSwigger cache-poisoning § unkeyed ONLY + deception § path-confusion ONLY.

    Why this matters ▼

    Done-when

    Defs + 3 examples each cold.

  2. 0:15–1:05 Unkeyed header/param labs + Vary check (lab)

    Do PortSwigger cache labs (unkeyed header/param) IN ORDER. Check Vary + cache headers (Age/X-Cache/Hit-Miss). YT: web cache poisoning deception XSS. X: cache deception PII bounty.

    Why this matters ▼

    Done-when

    Key map + Vary + header evidence (lab).

  3. 1:05–2:00 Cache→XSS hijack + deception PII-leak cases

    Read 1 cache→XSS (unkeyed header reflected into cached JS) + 1 deception (/profile.css-style → PII cache) — key + payload + victim impact ONLY.

    Why this matters ▼

    Surprise

    Cache + CORS/XSS compose: poisoned JS with cred-theft runs on victim origin. Keep Day-5 matrix open.

    Done-when

    2 key→impact diagrams.

  4. 2:00–2:35 Key map + deception path list (lab)

    Map keys + list .css/.json/.ico-suffixed authed paths. No cache-busting floods, no victim poisoning on live.

    Why this matters ▼

    Done-when

    Map + list saved.

  5. 2:35–3:00 Unkeyed test + gaps

    Explain unkeyed with lab example. Triage gaps (live hunt next).

    Why this matters ▼

    Done-when

    Recited + map archived.

Hunter mindset: Poison lab only. Live = key map + headers.
Real 180 min · inventory + safe differentials only on live
  1. 0:00–0:15 Fetch + redirect + Host inventory recall

    List every fetch/import/export/preview/webhook + redirect/next/returnUrl + Host reflection from your map. Check WSTG SSRF § objectives ONLY.

    Why this matters ▼

    Done-when

    Inventory checklist ready.

  2. 0:15–1:05 URL-fetch + redirect + Host safe probes (VDP, gentle)

    Probe each fetch/redirect/Host with Collaborator/canary + 301/302/307/308 split note, ONE request each. No IMDS beyond role-name (and only if prior SSRF proof), no smuggle/cache exploit on live.

    Why this matters ▼

    Done-when

    Probes + split notes, no DoS/exfil.

  3. 1:05–2:00 Same-program SSRF disclosures (2)

    Read H1 hacktivity same-program SSRF 2 — fetch-param + bypass ONLY. Compare your inventory gaps.

    Why this matters ▼

    Done-when

    2 param patterns + gap paragraph.

  4. 2:00–2:35 SSRF playbook update + minimal proofs (redacted)

    Update playbook (fetch→bypass→OOB→internal→role-name). Archive minimal proofs. No cache/smuggle exploit artifacts on live.

    Why this matters ▼

    Done-when

    Playbook + proofs (redacted).

  5. 2:35–3:00 SSRF triage + no-DoS test + gaps to Week 09

    Recite triage + no-DoS rule. Assign gaps (upload/parser sinks) to Week 09.

    Why this matters ▼

    Done-when

    Recited + archive + assignments.

Hunter mindset: Smuggle/cache stay in lab unless program permits.