Map functions, roles and normal requests manually
Needs: A normal request baseline and the relevant account/role; authorized accounts for role comparisons
Client commands / example output
# Baseline
METHOD PATH | CONTENT-TYPE | ACCESS CONTEXT/ROLE
INPUT LOCATION + NAME | BASELINE VALUE
STATUS | LENGTH/HASH | REDIRECT | MARKER/ERROR/TIME
OBJECT/FUNCTION SELECTED | NEXT ONE-VARIABLE TEST
Next: a browser-side restriction is not server authorization. Replay the raw request and change one field, object reference, method or access-context element at a time.
Verify → Retain method, route, input location, identity and expected normal behavior; do not infer vulnerability from an interesting parameter name.
If it fails → Expired sessions, CSRF failures and malformed requests can imitate access-control differences; reproduce a valid baseline first. More detail ↓
Explanation & examples
Map functions, roles and normal requests manually
- USE WHEN
- Forms, downloads, exports, account functions or role-specific interfaces
- STARTING ACCESS
- A reachable HTTP application and recorded anonymous or authenticated request state
- RESULT
- An input/function/role map with concrete attack hypotheses
Recognize the clue
Browse the site's normal account, export, upload and download features while recording requests in the browser/proxy.
curl -sk -b cookies.txt -D response-headers.txt http://TARGET:PORT/PATH
Observed browser request:
GET /download?file=report.pdf
Cookie: SESSION_COOKIEMeans: The normal request exposes a file-selecting input discovered through functionality, not guessed from a payload list.
Confirm: Find the actual input semantics, account/role and normal response before file/read/authorization tests.
- After validation
- Controlled comparisons prove a useful primitive: choose its method and remaining checks.
- Ruled out in this context
- The parameter only selects an allowlisted public report: discard unrestricted-path inference.
- Still inconclusive
- Unknown ownership or an expired session prevents interpreting differences; re-establish the baseline.
Troubleshooting: Expired sessions, CSRF failures and malformed requests can imitate access-control differences; reproduce a valid baseline first.
For every visible function, capture one unchanged request in Burp Proxy history, send it to Repeater and record:
Check login/registration/reset, profiles/objects, search/filter/pagination, download/export/preview, upload/import, administration and every JavaScript API call.
Next: a browser-side restriction is not server authorization. Replay the raw request and change one field, object reference, method or access-context element at a time.
Why it works
The same functionality can expose different trust boundaries through object IDs, methods and roles. Changing one property while preserving request state makes differences interpretable.
Worked example · hypothetical
Observation: a report download accepts a numeric ID. Test: compare objects owned by two authorized study accounts. Illustrative output: a lower role receives another account's report. Interpretation: proceed to an object-authorization method.
New identity, privilege, host or route? Re-enumerate → All topic tasks →