Command Injection

Was ist eine Command Injection?

Eine Command Injection ist eine Sicherheitslücke, die in jeder Anwendung gefunden werden kann, die Zugriff auf das System hat.

In einer Webanwendung kommt es zu einer Command Injection, wenn der Server die Eingabe eines Benutzers verwendet, um einen Befehl auf dem System auszuführen, ohne ihn zu säubern.

Das System verwendet diesen Befehl in einer Shell und sendet das Ergebnis an den Server, der es an den Benutzer zurücksendet.

Command Injection

Das Ausführen eines Befehls auf der Shell eines Servers mit Benutzereingaben kann seltsam anmuten. Der Hauptvorteil ist die Möglichkeit, einen auf dem Betriebssystem verfügbaren Befehl zu verwenden, der keine Entsprechung in der Sprache des Servers hat.

Shell-Befehle sind ebenfalls sehr flexibel und verfügen über eine Vielzahl von Optionen.

Es kann viel Zeit gespart werden, wenn Sie Shell-Befehle verwenden, anstatt sie umzukodieren.

 

Impact

Da sie Zugriff auf das Betriebssystem des Servers hat, kann die Command Injection ernste Folgen haben.

  • Exfiltration von Dateien: Ein Hacker kann Dateien an den Browser zurücksenden, wodurch er den Quellcode der Website einsehen und weitere Schwachstellen finden oder die Datenbank anzeigen lassen kann.
  • Modifikation von Dateien: Neben der Exfiltration kann der Hacker auch Dateien bearbeiten und löschen.
  • Systemüberlastung: Durch das Starten bestimmter Befehle ist es leicht möglich, ein System zum Absturz zu bringen.
  • Installieren einer Backdoor: Der Hacker kann Dateien auf dem Server erstellen und Code einfügen, um die Verbindung wiederherzustellen, wenn er viel einfacher Befehle eingeben möchte.
 

Es gibt viele Möglichkeiten der Ausnutzung, eine Shell kann eine große Anzahl von Befehlen ausführen.

Die Gefahr hängt direkt mit der Konfiguration des Servers zusammen. Wenn es möglich ist, eine Privilegieneskalation zum Admin-Benutzer durchzuführen, kann der Hacker alles tun, was er will.

 

Demonstration

1. Die grundsätzliche Verwendung eines php ping-Formulars

Um zu zeigen, wie eine Befehlsinjektion ausgenutzt werden kann, verwenden wir ein Formular auf einer Webseite, um einen Domainnamen einzugeben und Informationen wie Erstellungsdatum, E-Mail und Telefonnummer des Betreibers abzurufen.

Command Injection

Loris ist in diesem Beispiel der Hacker.

Er schreibt zunächst „google.com“ in die Eingabe des Formulars.

Command Injection

 

Wenn er auf die Schaltfläche klickt, hat der Server Zugriff auf die Eingabe und führt sie auf seinem System aus.

 

Command injection

 

Wenn die Ausführung beendet ist, sendet der Server die Ausgabe an den Benutzer.

 

Command injection
 

Hier können Sie sehen, was angezeigt wird:

  
Command injection

 

Wenn Loris das sieht, versteht er, dass der „whois-Befehl verwendet wurde.

 

2. Erkennung von Unverträglichkeiten

Um zu verstehen, wie man eine Command Injection testet, müssen Sie die Struktur eines Befehls kennen. Nehmen wir das Beispiel von Linux, weil es ein sehr verbreitetes Betriebssystem für Server ist.

Command injection
 

Wenn wir diesem Muster folgen, können wir den Befehl ableiten, den der Server verarbeitet hat:

  
Command injection
 

Loris fügt dann am Ende des Befehls ein Zeichen hinzu, um seinen eigenen Befehl hinzufügen zu können.

Die sinnvollste Wahl sind hier das „; “ und das „|„, da sie keiner Bedingung unterliegen.

Jetzt muss nur noch ein Befehl zum Testen hinzugefügt werden. Er wird „echo“ verwenden, das das Argument zurückgibt, das ihm übergeben wurde.

  
Command injection
 

Loris gibt seine Nutzlast in Form der Seite ein und findet unten auf der Seite „test“.

  
Command injection

3. Ausnutzung der Injection

Da die Sicherheitslücke nun bestätigt wurde, kann Loris sie ausnutzen.

In diesem Beispiel ist es ohne Schutz der Benutzereingabe möglich, viele Aktionen durchzuführen. Es hängt alles davon ab, was der Hacker will.

Hier stellen wir einige Befehle vor, die von Loris verwendet werden können, um die Umgebung zu verstehen.

Command injection
Command injection
Command injection
  • whoami: Hier erfahren Sie den Benutzer, der diesen Befehl ausgeführt hat.
  • pwd: Er gibt den Ordner zurück, in dem sich der Benutzer befindet.
  • ls -la [Ordner]: Es zeigt die verschiedenen Dateien in einem Ordner an. Mit der Option -la können Sie versteckte Dateien zum Ergebnis hinzufügen und Eigenschaften anzeigen (Eigentümer, Ausführungsrecht, Erstellungsdatum usw.).

 

Loris entscheidet sich für den Befehl „wget“, der zum Herunterladen einer Datei von einer URL verwendet wird. Damit kann er ein Backdoor-Skript installieren. Er wird auch die Ausführungsrechte erhalten und es dann ausführen.

Command injection
 

Die Hintertür wird ausgeführt. Loris muss sich nur mit der Backdoor auf dem Server verbinden.

 
  
Command injection
 
 

Loris hat Zugriff auf eine Shell auf dem Server, was ihm erlaubt, bei der Ausnutzung schneller zu sein.

Wenn eine MongoDB läuft und falsch konfiguriert ist, muss er nur den folgenden Befehl eingeben, um die Datenbanken anzuzeigen.

 
Command injection

 

Von hier aus kann Loris alle Daten wie die verschiedenen Benutzernamen und Passwörter extrahieren. Er kann sie auch entfernen.

Empfehlungen von OWASP

Um Befehlsinjektionen zu verhindern, gibt OWASP folgende Ratschläge:

  • Vermeiden Sie die Verwendung des Systembefehls: Es gibt eine Funktion, die oft als Systembefehl arbeitet, und es ist sicherer, diese zu verwenden.
  • Umgehen von bösartigen Mustern: Mit Funktionen wie escapeshellarg() in PHP, die die Benutzereingaben bereinigen.
  • Verwenden Sie eine Whitelist für zulässige Werte: Dies schränkt die Benutzereingabe ein und verhindert alle Befehlsinjektionen, wenn es gut konfiguriert ist.

 

R&S®Cloud Protector vs. Command Injection

Um den Einschleusungen von Befehlen entgegenzuwirken, bietet R&S®Cloud Protector mehrere Lösungen an:

  • Erkennung von Escape-Zeichen und Befehlen:

            R&S®Cloud Protector durchsucht die Eingabebefehle und blockiert diejenigen, die die verschiedenen Operatoren enthalten, um beliebige Befehle hinzuzufügen, wie im vorliegenden Fall.

            Gleichzeitig prüft R&S®Cloud Protector, ob eines der Wörter der Anfrage ausführbar ist (Windows – Linux) und blockiert es gegebenenfalls.

Command injection
 

In diesem Beispiel wurden das Zeichen „; “ und der Befehl „ls-la“ erkannt. Daher wird die Abfrage blockiert und umgeleitet.

 

Fordern Sie Ihre 14-tägige gratis Testversion an

In nur 60 Sekunden Websites und Anwendungen schützen Worauf warten Sie?