Ga naar hoofdinhoud

Command Injection — High

De ontwikkelaar heeft ons wéér door. Nu worden vrijwel alle injectie-tekens systematisch gefilterd!

1. Predict (Voorspel)

De code van de beveiliging ziet er als volgt uit. Bekijk de lijst met verboden tekens (aan de linkerkant van de pijltjes in de array).

tip

Vraag: Zie je een cruciaal foutje dat de ontwikkelaar hier heeft gemaakt bij het instellen van de filters?

Tip

Kijk heel nauwkeurig naar het filter van de enkele pipe (|). Wat staat daar nét achter?

Antwoord

Er staat '| ' => ''. Let op de extra spatie na het pipe-teken! Dit betekent dat de webserver specifiek op zoek is naar een pipe-symbool waarna een spatie volgt. Als hij dat tegenkomt, haalt hij het weg. Maar... wat als we een pipe gebruiken zónder spatie? Dan wordt het niet herkend door dit rammelende filter!

2. Run & Investigate

  1. Start DVWA en ga naar de challenge Command Injection. Zorg dat je DVWA Security op high hebt staan. (Vergeten hoe dit moet? Cheatsheet).
  2. Probeer de injection van het Medium-level (127.0.0.1 | ls). Deze wordt nu afgevangen door het filter!
  3. Jouw taak is om uit te zoeken hoe je het falende filter (de typefout) kunt misbruiken.

3. Modify & Make

Pas je commando aan zodat je de slordige typefout in de back-end code omzeilt.

Tip

Haal de spatie weg die direct nà het pipe-teken komt in jouw payload.

Antwoord

Vul in: 127.0.0.1|ls (zonder spatie achter de pipe). Doordat de exact match in het filter niet meer klopt, laat de firewall het commando er gewoon doorheen glippen!

Het resultaat van een succesvolle poging zie je hieronder:

succes

4. ✓ Wat moest je zien?

Controle
  • Met 127.0.0.1|ls (zonder spatie!) glipt je payload langs het filter en zie je alsnog de map-inhoud verschijnen.
  • Met 127.0.0.1 | ls (mét spatie) krijg je niets bruikbaars — dat patroon is wél geblokkeerd.
  • Het verschil tussen die twee payloads is letterlijk één spatie: dat is precies de slordigheid van de blacklist.

Werkt 127.0.0.1|ls niet? Plak hem opnieuw zonder enige spatie tussen IP, pipe en commando — de browser plakt soms ongemerkt een spatie aan het einde.

5. Er gaat iets mis...

Je hack is gelukt op High! Maar waarom lossen de ontwikkelaars dit niet gewoon op door álle speciale karakters er uit te slopen in het Impossible-level?

Dat klinkt logisch, maar de praktijk is weerbarstig. Dit noemen we de "Blacklisting Fallacy". Telkens als je een nieuw trucje leert en toevoegt aan de verboden lijst (blacklist), verzinnen hackers (of de gigantische Linux/Windows community) wel weer een obscure manier om een commando uit te voeren met leestekens die je nóg niet geblokkeerd hebt. De énige echte oplossing is Whitelisting: niet op zoek gaan naar slechte tekens, maar enkel en alleen letters en cijfers toestaan die exact passen in het profiel van een IP-adres.

Oefen met de terminal

In deze terminal worden bijna alle operators gefilterd. Maar let goed op: de programmeur filtert "| " (pipe + spatie), niet "|" (pipe zonder spatie). Kun je dit misbruiken?

Terminal laden...

Walkthrough