Command Injection โ Low
Voor Command Injection is het belangrijk dat we ons eerst verdiepen in het systeemcommando ping.
1. Predict (Voorspel)โ
Kijk eens naar de volgende (vereenvoudigde) code die wordt gebruikt om een IP-adres te pingen:
$target = $_REQUEST[ 'ip' ];
$cmd = shell_exec( 'ping -c 4 ' . $target );
echo $cmd;
Hulp bij PHP syntax
shell_exec(): Dit vertelt de webserver om een commando uit te voeren op het onderliggende besturingssysteem (Linux), alsof je het zelf in de terminal typt..(punt): Plakt de variabele$targetdirect achter de tekstping -c 4.
Vraag: Wat denk je dat dit script doet als een gebruiker de volgende tekst invult bij het IP-adres: 127.0.0.1; whoami?
Antwoord
Het systeem stuurt testpakketjes (netwerkverkeer) naar het IP-adres (127.0.0.1 is het adres van de server zelf) om te kijken of het doelwit bereikbaar is. De terminal geeft tekst terug met de resultaten van die test.
2. Run (Uitvoeren)โ
Oefen het ping-commando in de terminal hieronder. Typ ping 127.0.0.1 en bekijk de output.
3. Investigate (Onderzoeken)โ
Je hebt zojuist gepingd. Maar we zijn hier om te hacken.
Vraag: Hoe kun je in een Linux-terminal twee afzonderlijke commando's op exact dezelfde regel achter elkaar uitvoeren?
Tip
Kijk op je Cheatsheet onder "Linux Commando's". Er is een specifiek leesteken dat als "scheidingsteken" werkt.
Antwoord
Je kunt de puntkomma (;) of de dubbele ampersand (&&) gebruiken. Bijvoorbeeld: commando1 ; commando2.
4. Modify & Make (Aanpassen & Maken)โ
Probeer nu een invoer die ping combineert met een tweede Linux-commando (zoals ls of whoami). Oefen eerst in de terminal hieronder:
Werkt het in de terminal? Probeer het nu ook op DVWA:
- Start
DVWAin je Kali-omgeving en ga naar de challengeCommand Injection. - Zorg dat je
DVWA Securityop low hebt staan. (Vergeten hoe dit moet? Ga dan naar de cheatsheet). - Vul je payload in het invulveld in en klik op Submit.
Tip
De webserver plakt jouw invoer achter het woord ping. Als jij 127.0.0.1; ls typt, voert de server ping 127.0.0.1; ls uit.
Antwoord
Vul in: 127.0.0.1; ls
Het resultaat van een succesvolle poging (je ziet de bestanden van de server!) zie je hieronder:

5. โ Wat moest je zien?โ
:::tip Controle
- Na
127.0.0.1; lszie je twee blokken output: eerst de ping-resultaten, daarna een bestandslijst van de server. - De bestandslijst bevat PHP-bestanden zoals
index.phpโ echte serverbestanden. - Geen rode foutmelding.
Zie je alleen ping-output zonder bestandslijst? Controleer of je de puntkomma (;) correct hebt getypt en op Submit hebt geklikt.
:::
6. Er gaat iets mis...โ
Wat gebeurt er als je alleen ; ls invult (zonder IP-adres ervoor)?
Je krijgt waarschijnlijk een melding zoals ping: usage error. Omdat de linkerkant van de puntkomma niet klopt (een ping zonder adres), mislukt de ping. Echter, in Linux wordt het commando รกchter de puntkomma vaak tรณch uitgevoerd! Bij gebruik van && stopt Linux wรฉl direct als het eerste deel faalt.
Walkthroughโ
Kom je er niet uit? Bekijk dan deze walkthrough: