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
- Start
DVWAen ga naar de challengeCommand Injection. Zorg dat jeDVWA Securityop medium hebt staan. - 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:

4. ✓ Wat moest je zien?
- Met
127.0.0.1 | lszie je alléén de map-inhoud (bestanden zoalshelp,index.php,source); de ping-output is verdwenen. - Met
127.0.0.1 || lszie 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?