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?
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:
Werkt het? Probeer het nu op DVWA:
- Start
DVWAen ga naar de challengeCommand Injection. Zorg dat jeDVWA Securityop medium hebt staan. - 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:

4. โ Wat moest je zien?โ
- Na
127.0.0.1 | lsverschijnt 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.