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

  1. Start DVWA en ga naar de challenge Command Injection. Zorg dat je DVWA Security op medium hebt staan.
  2. Probeer je hack uit het Low level nog eens uit. Zie je dat het inderdaad niet meer werkt?

Wat zouden we tussen het IP-adres en ons eigen commando kunnen zetten, zodat we de filter omzeilen, 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

Pas je injection-string aan zodat je via de ongefilterde operators tóch succesvol een commando (zoals het printen van de map-inhoud) uitvoert op de webserver.

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
  • Met 127.0.0.1 | ls zie je alléén de map-inhoud (bestanden zoals help, index.php, source); de ping-output is verdwenen.
  • Met 127.0.0.1 || ls zie je eerst de ping, daarna de map-inhoud.
  • Je oude ;- of &&-payload uit Low geeft niets bruikbaars meer terug — het filter heeft die tekens eruit gesloopt.

Werkt geen van beide pipe-payloads? Controleer dat je security=medium daadwerkelijk geactiveerd is (zou een dropdown moeten zijn) en dat je geen extra spatie of komma rond de pipe hebt staan.

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!

Oefen met de terminal

In deze terminal worden && en ; uit je invoer gefilterd, net als bij DVWA medium. Kun je een andere manier vinden om twee commando's uit te voeren?

Terminal laden...

Walkthrough