> ## Documentation Index
> Fetch the complete documentation index at: https://docs.jaspervanzeir.be/llms.txt
> Use this file to discover all available pages before exploring further.

# Broken Access Control & Info Disclosure

> Lesnotities over IDOR, traversal, directory listing en informatielekken.

<Note>
  In dit onderdeel ging het over autorisatiegrenzen en informatielekken. Burp Suite was vooral nuttig om requests te bekijken, te wijzigen en verschillen tussen responses te begrijpen.
</Note>

## In een oogopslag

| Techniek            | Concept                                                           |
| ------------------- | ----------------------------------------------------------------- |
| Burp Suite          | request onderscheppen -> param/header/body aanpassen -> forwarden |
| IDOR                | object-ID's manipuleren: `?id=1` -> `2`, `/profile/{id}`          |
| Client-side bypass  | hidden fields, JS-validatie, `?admin=true`                        |
| Cookies             | `Admin=false` -> `true`                                           |
| robots.txt          | verborgen admin-panels                                            |
| Directory listing   | bladeren in een map (`/ftp`, `/data`)                             |
| Directory traversal | `?file=../../../etc/passwd`                                       |
| Backup & `.git`     | `.bak`, `/.git/config`, `/.git/logs`                              |
| Error messages      | verkeerd type -> lekt data                                        |

## Burp Suite - setup

<Steps>
  <Step title="Proxy + certificaat">
    Browser-proxy instellen en Burp **CA-certificaat** importeren (voor HTTPS).
  </Step>

  <Step title="Localhost intercepten (Firefox)">
    `about:config` -> `network.proxy.allow_hijacking_localhost` = `true`.
  </Step>

  <Step title="Intercept & forward">
    Request pauzeren, aanpassen, doorsturen. Bekijk alles terug in **HTTP history**.
  </Step>
</Steps>

<Tip>
  Browsercache kan requests verbergen. Een **hard refresh (CTRL+F5)** gaf in de les vaak een verse request.
</Tip>

## Technieken in detail

<AccordionGroup>
  <Accordion title="IDOR - object-ID's manipuleren" icon="hashtag">
    * Numerieke ID's op-/aflopen: `getUser.php?id=1`, `/files/12100.txt`
    * ID achter een route plakken: `/IDOR/profile/2342384`
    * `orderID=`, `creatorID`, `?name=` -> verander de waarde (bv. naar `admin`)
    * Let op **gehashte ID's** (bv. MD5 van het nieuwe getal)
    * **Gat in een reeks** = grote tell: bij `file1/2/4/5/6` is `file3` interessant
  </Accordion>

  <Accordion title="Client-side controls bypassen" icon="user-shield">
    * **Hidden form fields** -> waarde aanpassen in Burp
    * **JS-validatie** -> omzeilen door de request direct te sturen
    * **URL/POST-parameters**: `?admin=true`, `is_admin=True`, `home.php?admin=true`
  </Accordion>

  <Accordion title="Cookies manipuleren" icon="cookie">
    * Rechten staan soms gewoon in een cookie: `Admin=false` -> `Admin=true`
    * Daarna naar `/admin` browsen
  </Accordion>

  <Accordion title="robots.txt & directory listing" icon="folder-open">
    * `/robots.txt` -> `Disallow:`-regels verraden verborgen mappen
    * Map zonder index-pagina -> server toont de **mapinhoud** -> bladeren
    * Knip een bestandsnaam van een URL af: `.../ftp/legal.md` -> `.../ftp`
  </Accordion>

  <Accordion title="Directory traversal" icon="arrows-up-to-line">
    * `?filename=../../../etc/passwd` (Linux), `?page=../`
    * Een basispatroon is `../` (1 niveau omhoog), daarna kan het pad verder opgebouwd worden
  </Accordion>

  <Accordion title="Backup files & version control (.git)" icon="code-branch">
    * Backups: `.bak`, `~`, `.old`, `.swp` -> source code / credentials
    * `/.git/config` -> remote origin (mogelijk open repo met volledige code)
    * `/.git/logs` -> alle commit messages
  </Accordion>

  <Accordion title="Error messages forceren" icon="triangle-exclamation">
    * Stuur een **verkeerd datatype** (int waar tekst verwacht wordt)
    * Lekt DB-/tabelnamen, template engine, server + versie
    * De fout zelf kan (deel van) de key bevatten
  </Accordion>
</AccordionGroup>

## Bronnen voor info disclosure

Belangrijke bronnen uit de les:

<CardGroup cols={3}>
  <Card title="robots.txt / sitemap" icon="robot" />

  <Card title="Directory listings" icon="folder" />

  <Card title="Developer comments" icon="comment" />

  <Card title="Error messages" icon="triangle-exclamation" />

  <Card title="Debugging data" icon="bug" />

  <Card title="User account pages" icon="user" />

  <Card title="Backup files" icon="file-zipper" />

  <Card title="Insecure config" icon="gear" />

  <Card title="Version control (.git)" icon="code-branch" />
</CardGroup>

## Handige request parameters

| Parameter                         | Wat doet het?                       | Handig wanneer                                         |
| --------------------------------- | ----------------------------------- | ------------------------------------------------------ |
| `curl.exe -i`                     | Toont headers en body.              | IDOR- of adminresponses vergelijken.                   |
| `curl.exe -I`                     | Toont alleen headers.               | Redirects, cookies en serverinfo checken.              |
| `-H "Cookie: role=admin"`         | Stuurt een aangepaste cookieheader. | Role- of admincookies testen.                          |
| `-b "session=..."`                | Stuurt cookie-data mee.             | Ingelogde requests buiten de browser herhalen.         |
| `-H "X-Forwarded-For: 127.0.0.1"` | Voegt een custom header toe.        | Apps die op IP-headers vertrouwen herkennen.           |
| `-X POST` / `-X DELETE`           | Wijzigt de HTTP-methode.            | Controleren of endpoints methode-afhankelijk zijn.     |
| `--path-as-is`                    | Laat `../` in het pad staan.        | Traversal testen zonder dat curl het pad normaliseert. |
| `-L`                              | Volgt redirects.                    | Login- of access-control redirects begrijpen.          |
| `-o output.txt`                   | Bewaart de response.                | Gelekte files, backups of listings bewaren.            |

Voor traversal in een URL-pad is `--path-as-is` belangrijker dan het lijkt:

```powershell theme={null}
curl.exe --path-as-is -i "http://<target>/download/../../../../etc/passwd"
```

## Tools

<CardGroup cols={3}>
  <Card title="Burp Suite" icon="shield" href="https://portswigger.net/burp">
    Intercept, wijzig en herhaal requests vanuit HTTP history en Repeater.
  </Card>

  <Card title="Browser DevTools" icon="code" href="https://firefox-source-docs.mozilla.org/devtools-user/">
    Referentie voor Network, Application, Sources, cookies en hidden fields.
  </Card>

  <Card title="curl" icon="terminal" href="https://curl.se/docs/manpage.html">
    Terminaltool voor headers, cookies, redirects en directe URL's.
  </Card>

  <Card title="DirBuster" icon="folder-tree" href="https://www.kali.org/tools/dirbuster/">
    Zoek verborgen directories met grafische wordlist-fuzzing.
  </Card>

  <Card title="Dirb" icon="folder-magnifying-glass" href="https://www.kali.org/tools/dirb/">
    Brute-force bestanden en paden vanaf de command line.
  </Card>

  <Card title="OWASP ZAP" icon="spider" href="https://www.zaproxy.org/">
    Proxy en scanner voor HTTP-history en baseline checks.
  </Card>
</CardGroup>
