Week 03 · Access Control ULTIMATE · 7 days × 180 min
Two accounts. Every object. Highest bounty-per-effort.
BOLA → BFLA → 403 bypass → traversal → API excessive-data → chaining + CVSS. Autorize always on. Numeric today, UUID analysis tomorrow, impact boundary always.
0:00–0:15 BOLA vs BFLA vs mass-assignment + replay harness sketch
Write defs, then read WSTG ATHZ-04 IDOR § test objectives + how-to-test ONLY + HackTricks IDOR § Identifying Potential IDORs ONLY. Sketch harness: A-cookie jar, B-cookie jar, Repeater tabs labeled.
Why this matters ▼
What it is
BOLA = horizontal (A→B same role), BFLA = vertical (user→admin), mass-assignment = extra field. Harness = two profiles + Autorize.
Done-when
Defs + harness sketched.
0:15–1:05 PortSwigger labs 1–4 in order: unprotected function → role-cookie → user-id → chat-log IDOR
Do lab-unprotected-admin-functionality (/robots→/admin→delete carlos) + lab-user-role-controlled-by-request-parameter (Admin=false→true) + lab-user-id-controlled-by-request-parameter (id swap→API key) + lab-insecure-direct-object-references (chat static URL→carlos pwd) — IN ORDER, no skipping. Autorize ON (Enforcement Detector, Intercept=false).
Why this matters ▼
YT
Search
portswigger access control lab walkthrough(@RanaKhalil) +IDOR BOLA two account method(@InsiderPhD/@NahamSec).Done-when
4 labs solved + Autorize diffs (status/length) screenshotted.
1:05–2:00 H1 patterns: Pornhub delete + Starbucks balance + numeric vs UUID
Read H1 #380410 (photo_id/album delete by B session) + #858662/#766437 (recipient_id/balance diff) — request-swap + impact ONLY + H1 #2586584 (UpdateProfile numeric→email leak) + #2633771 (base64 gid brute-force) — key-type lesson ONLY. Extract object-key pattern per case.
Why this matters ▼
Pattern
Numeric =
123→124. Encoded/UUID = decode + entropy analysis (UUIDv1 timestamp vs v4 random). Impact boundary: read vs write vs delete vs PII.Done-when
4 patterns with key-type + swap + impact in notes.
2:00–2:35 IDOR checklist: numeric/encoded/UUID/body-key + PATT quick-tamper
Write checklist per HackTricks IDOR § Quick manual tampering ONLY + PATT IDOR two-account setup rows ONLY. Columns: key location (URL/body/cookie/GraphQL) × predictability × impact.
HackTricks: quick tamperPATT: IDOR setupAll labs: access-control filterCommunity: all-labs solutions (attempt first)Why this matters ▼
Done-when
Checklist saved, reusable Week 07/10.
2:35–3:00 BOLA vs BFLA test + impact boundary + gaps
Recite with lab example each. Log impact boundary for one lab (read/PII/delete). Triage gaps.
Why this matters ▼
Done-when
Recited + boundary logged + gaps assigned.
0:00–0:15 WSTG ATHZ-02/03 + role/tenant param mental model
Read WSTG ATHZ-02 bypassing schema + ATHZ-03 privilege escalation § objectives ONLY. List params: role/isAdmin/tenant_id/groupId.
Why this matters ▼
What it is
Vertical = low→high. Mass-assignment = server binds extra JSON fields (role:true) without allowlist.
Done-when
Param list + defs cold.
0:15–1:05 role=admin / tenant_id injection + read→write mirror (lab)
On lab: add
"role":"admin",tenant_idswap,_method=PUToverride on write requests. Mirror every read-response field into writes. PortSwigger lab-url-based-access-control-can-be-circumvented (X-Original-URL: /admin) as warmup. PATT mass-assignment rows ONLY.Why this matters ▼
X
Search
mass assignment exploit+IDOR BOLA bounty min_faves:200.Done-when
Role/tenant/override matrix with results.
1:05–2:00 v1 vs v2 vs GraphQL same-object authz diff + H1 cases
Test same object across v1/v2 + GraphQL (per-field, H1 #2633771 lesson) + THM graphql Task 3–4 preview (mutations/authz, batching) ONLY. Read hacktivity search
IDOR order(Uber restaurant-analytics, api.pandao.ru order-address patterns) — version-gap note ONLY.Why this matters ▼
Pattern
Legacy routes miss new checks. GraphQL needs per-field tests, not per-query.
Done-when
Version-diff table + 2 H1 version-gap notes.
2:00–2:35 BFLA checklist: role/tenant/method/version + SecLists params
Build checklist + SecLists burp-parameter-names.txt 1 pass on 1 endpoint (lab). Columns: param × role × result.
Why this matters ▼
Done-when
Checklist + 1 param-discovery log.
2:35–3:00 Mass-assignment end-to-end test + gaps
Narrate one full chain (field → endpoint → impact). Triage gaps.
Why this matters ▼
Done-when
Narrated + archived + gaps assigned.
0:00–0:15 Normalization primitives cold
List
/..;/ // %2e %252e ; %00+ headersX-Original-URL, X-Rewrite-URL, X-Custom-IP-Authorization+ verb swap. Check PATT 403 bypass header/method/encoding rows ONLY.Why this matters ▼
What it is
WAF/proxy normalizes differently than app — disagreement = access.
Done-when
Primitives + headers listed cold.
0:15–1:05 403 matrix on lab /admin (methods × headers × encodings)
Build matrix: GET/POST/PUT/PATCH + headers +
/..;/admin, double-slash, unicode. Read 405/404 vs 403 differential meaning (405 = verb wrong, 404 = path wrong, 403 = exists+blocked). YT:403 bypass X-Original-URL live.Why this matters ▼
Done-when
Matrix with status/length per cell.
1:05–2:00 Next.js CVE-2025-29927 + admin-panel exposure cases
Read NVD CVE-2025-29927 + GHSA-f82v-jwr5-mffw advisory § affected middleware +
x-middleware-subrequestbypass ONLY + pentester.land 1 forced-browsing/admin-panel report — path found via robots/JS ONLY. Map to your matrix (which primitive class it belongs to).Why this matters ▼
Pattern
Middleware trusts a header the attacker controls — same class as X-Original-URL. Version log → advisory match is the skill.
YT
Search
CVE-2025-29927 nextjs bypass poc.Done-when
Bypass class + affected-version check noted.
2:00–2:35 Bypass matrix final: header/method/encoding/differential
Consolidate matrix. Add AuthMatrix preview (portswigger/authmatrix README roles matrix ONLY) for Week-07 reuse.
Why this matters ▼
Done-when
One-page matrix saved.
2:35–3:00 3 primitives + differential test + gaps
Recite 3 + read a 403/404/405 triple cold. Triage gaps.
Why this matters ▼
Done-when
Recited + matrix archived.
0:00–0:15 Depth math + wrappers list
State
../../../../etc/passwddepth counting +php://filterpurpose. Check PortSwigger path-traversal topic intro + WSTG ATHZ-01 objectives ONLY.Why this matters ▼
What it is
File param = traversal first. Depth + filter-bypass + wrapper columns.
Done-when
Math + wrapper list cold.
0:15–1:05 THM File Inclusion room: depth + filter + wrappers
Do THM filepathtraversal Task 3–6 (LFI/RFI/payloads/challenges) ONLY + PortSwigger traversal labs 1–2 (absolute + stripped ../) ONLY. Test
....//,%2e%2e/,php://filter/convert.base64-encode/resource=index(source disclosure, lab).Why this matters ▼
Done-when
Depth walk + 2 bypasses + wrapper read logged.
1:05–2:00 Traversal file-read + LFI→RCE pivot theory (which pivot fired)
Read pentester.land 1 traversal file-read (depth + bypass used) + HackTricks LFI § log-poisoning THEORY ONLY (no prod log writes). Note pivot: log vs wrapper vs upload (Week 09 executes).
Why this matters ▼
Common mistake
Writing to prod logs. CUT — lab theory only.
Done-when
Pivot map (3 options) noted.
2:00–2:35 Traversal matrix: depth/encoding/wrapper/parser
Consolidate matrix + PATT File Inclusion rows + SecLists traversal wordlist path ONLY.
Why this matters ▼
Done-when
Matrix saved for Week 09.
2:35–3:00 Filter-bypass cold + gaps
Explain your best bypass end-to-end. Triage gaps.
Why this matters ▼
Done-when
Recited + matrix archived.
0:00–0:15 OWASP API Top 10 BOLA/BFLA/excessive-data defs
Read OWASP API Top 10 API1/BOLA + API2/BFLA + excessive-data summaries ONLY. One sentence each + severity intuition.
Why this matters ▼
Done-when
3 defs + 1 severity line each.
0:15–1:05 THM GraphQL + PortSwigger GraphQL: introspection → field tests
Do THM graphql Task 3–4 (mutations/authz, batching/IDOR) ONLY + PortSwigger GraphQL lab 1 (introspection → admin leak) ONLY. Query
__schema, testisAdmin-class field A→B.Why this matters ▼
YT
Search
GraphQL IDOR gid exploit+GraphQL introspection admin bug bounty.Done-when
Schema map + 1 field-authz diff.
1:05–2:00 api.pandao.ru order-IDOR + excessive-data case
Read hacktivity
IDOR order(api.pandao.ru delivery-address pattern) + 1 excessive-data (list/detail leaks beyond UI need) — replay + minimization check ONLY.Why this matters ▼
Pattern
Predictable order/invoice ID + token reuse. Excessive-data = verbatim over-collection evidence.
Done-when
2 patterns with minimization note.
2:00–2:35 API authz list: predictable IDs, array smuggling, version gaps
Build list + test array index smuggling (
id[]=1&id[]=2) on lab. Note v1/v2 delta for Week 10.Why this matters ▼
Done-when
List saved with 3 techniques.
2:35–3:00 Excessive-data vs BOLA + severity draft + gaps
Distinguish + draft CVSS vector (first.org calculator base metrics ONLY). Triage gaps.
Why this matters ▼
Done-when
Distinction + 1 vector + gaps assigned.
0:00–0:15 CVSS 3.1 metrics that move access-control scores
Set vectors for IDOR-read vs IDOR-write vs BFLA-admin via first.org calculator + 2 FIRST examples ONLY. Note what raises (PII/admin/delete) vs lowers (self-only).
Why this matters ▼
Done-when
3 vectors with deltas explained.
0:15–1:05 Chain IDOR→PII→priv-esc on lab, trim to minimal PoC
Build 1 chain on lab (IDOR read → emails → reset/role). Trim to fewest requests. Follow HuntBook chaining + PoC standards headings ONLY. YT:
bug bounty chaining low to critical methodology.Why this matters ▼
Done-when
Chain + minimal PoC + severity delta.
1:05–2:00 XSS→ATO + SSRF→metadata chain patterns (not payloads)
Read pentester.land 1 XSS→ATO (handoff: cookie/session) + HackTricks SSRF § cloud pivot (role creds → s3 ls) — handoff steps ONLY. Note confirmation loop: isolate → baseline → reproduce ×2 → impact.
Why this matters ▼
Done-when
2 handoff diagrams + loop card.
2:00–2:35 Severity worksheet + duplicate check
Score your chain. Duplicate-check: pentester.land + H1 search same-program before drafting. Keep kill log.
Why this matters ▼
Done-when
Worksheet + dup result + kill/keep call.
2:35–3:00 Severity factors test + gaps
Recite what moves IDOR/BFLA up/down. Triage gaps.
Why this matters ▼
Done-when
Recited + worksheet archived.
0:00–0:15 Matrices recall: IDOR/BFLA/403/traversal
Recite 4 matrices cold. Check WSTG checklist Authorization rows ONLY.
Why this matters ▼
Done-when
Recited + tick %.
0:15–1:05 Full authz map on VDP + Autorize on history
Map all object endpoints (table from Day 1). Autorize ON, Enforcement Detector, compare A vs B. Log only, no state-changing deletes on live. THM burpsuitebasics Target/sitemap revisit.
Why this matters ▼
X
Search
403 bypass payloadonly if 403 blocks a replay — else stay on IDOR.Done-when
Coverage map + Autorize log.
1:05–2:00 Same-program disclosed reports (pattern match)
Read H1 hacktivity same-program family (IDOR/order) 2 reports — scope + key-type match ONLY. Compare your map gaps.
Why this matters ▼
Done-when
2 pattern matches + gap paragraph.
2:00–2:35 Coverage + triage + kill log (validate ×2)
Triage candidates: reproduce twice, else kill with reason. No PII exfil beyond minimal proof. Archive transcripts (redacted).
Why this matters ▼
Done-when
Candidates triaged + kill log + transcripts.
2:35–3:00 Kill criteria + checklist + gaps to Week 04
Recite kill rules (self-only, no-impact, dup). Update checklist. Assign gaps (JWT/OAuth/session) to Week 04.
Why this matters ▼
Done-when
Recited + checklist + assignments.