Ga naar hoofdinhoud

Command Injection โ€” Medium

De aanvaller heeft ons door. Op de Medium-beveiliging kunnen we niet meer zomaar && of ; gebruiken.

1. Predict (Voorspel)โ€‹

De programmeur heeft besloten om de invoer veiliger te maken. Er wordt nu een "filter" (blacklisting) toegepast.

Vraag: Wat gebeurt er onder water met jouw commando als jij 127.0.0.1; ls of 127.0.0.1 && ls intypt?

Antwoord

Het filter zoekt naar exact de tekens ; en && en haalt deze weg. Jouw invoer 127.0.0.1; ls verandert dus in 127.0.0.1 ls. Omdat dit geen geldig commando is voor de server, zal de injection mislukken en krijg je hooguit een ping-error.

2. Run & Investigateโ€‹

Probeer je Low-payload in de terminal hieronder โ€” de filter is actief en haalt && en ; weg. Kun je een andere manier vinden om twee commando's uit te voeren?

Terminal laden...

Wat zouden we kunnen gebruiken zodat de filter het mist, maar Linux toch doorgaat met het uitvoeren van ons tweede commando?

Tip

De programmeur is vergeten รกlle mogelijke scheidingstekens in Linux te blokkeren. Kijk nog eens naar de Linux sectie op je Cheatsheet. Welk leesteken is een verticaal streepje?

Antwoord

De pipe-operator | wordt niet gefilterd. Je kunt ook de logische OR-operator || proberen.

3. Modify & Makeโ€‹

Probeer de | operator in de terminal hieronder om te bevestigen dat het werkt:

Terminal laden...

Werkt het? Probeer het nu op DVWA:

  1. Start DVWA en ga naar de challenge Command Injection. Zorg dat je DVWA Security op medium hebt staan.
  2. Vul je payload in en klik op Submit.
Tip

Probeer de pipe operator direct na het IP-adres te zetten.

Antwoord

Vul in: 127.0.0.1 | ls of 127.0.0.1 || ls

Het resultaat van een succesvolle poging zie je hieronder:

succes

4. โœ“ Wat moest je zien?โ€‹

Controle
  • Na 127.0.0.1 | ls verschijnt een bestandslijst โ€” de ping-output ontbreekt, dat is normaal bij |.
  • Je eerdere payloads met && of ; geven gรฉรฉn tweede output meer.
  • De | en || operators omzeilen het filter wรฉl.

Werkt | toch niet? Controleer of DVWA Security op medium staat en dat er geen typfout in je payload zit.

5. Er gaat iets mis...โ€‹

Je typt vol goede moed 127.0.0.1 | ls in en je ziet ineens... gรฉรฉn ping-resultaat meer. Alleen de lijst met bestanden. Waarom zie je de ping-output niet?

Dit is de werking van de pipe (|). Een pipe pakt letterlijk de onzichtbare output van het eerste commando (de ping) en duwt dit als een pakketje in de mond van het tweede commando (ls). Het ls commando doet echter helemaal niets met die invoer, het print gewoon de huidige map. Daardoor verdwijnt de ping-tekst in het niets. Wil je beide zien? Gebruik dan || of andere constructies als het filter dat toelaat.

Walkthroughโ€‹