Ga naar hoofdinhoud

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 $target direct achter de tekst ping -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.

Terminal laden...

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:

Terminal laden...

Werkt het in de terminal? Probeer het nu ook op DVWA:

  1. Start DVWA in je Kali-omgeving en ga naar de challenge Command Injection.
  2. Zorg dat je DVWA Security op low hebt staan. (Vergeten hoe dit moet? Ga dan naar de cheatsheet).
  3. 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:

succes

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

:::tip Controle

  • Na 127.0.0.1; ls zie 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: