Einleitung
Command Injection Schwachstellen sind eine der gefährlichsten Web-Schwachstellen. Viele Sicherheitstester und Kopfgeldjäger zielen darauf ab, Command Injection-Schwachstellen zu finden, da sie Auswirkungen auf die Zielanwendung haben können.
Dieser Artikel bietet einen Überblick über Schwachstellen in Command Injection sowie eine Einführung in verschiedene Schwachstellen, die letztendlich zu Command Injection führen können.
Was ist Befehlsinjektion?
Command Injection ist eine Art Web-Sicherheitsanfälligkeit, die es Angreifern ermöglicht, beliebige Betriebssystembefehle auf dem Server auszuführen, auf dem die Anwendung ausgeführt wird. Command Injection-Schwachstellen treten auf, wenn die Anwendungen Shell-Befehle oder Skripte verwenden, die Shell-Befehle im Hintergrund ausführen.
Betrachten wir die folgende URL einer Anwendung, die Base64-Codierung von Benutzereingaben durchführt.
http://target-site.com/encode.php?text=helloworld
Diese Benutzereingabe wird als get-Parameter an den encode übergeben.PHP-Datei.
Das Folgende ist der Quellcode von encode.php:
<?php
$input=$_GET;
system(„echo -n“. $Eingang.“ / base64″);
?>
Wie wir aus dem vorhergehenden Codeausschnitt erkennen können, wird die Benutzereingabe an die PHP-Funktion system () übergeben, mit der Betriebssystembefehle in PHP ausgeführt werden.
Wenn ein Benutzer einen Systembefehl an die Eingabe anhängt, wird er als Betriebssystembefehl ausgeführt, der folgendermaßen aussieht:
http://target-site.com/encode.php?text=test;id
Das Folgende ist die an den Benutzer zurückgegebene Antwort:
testdWlkPTMzKHd3dy1kYXRhKSBnaWQ9MzMod3d3LWRhdGEpIGdyb3Vwcz0zMyh3d3ctZGF0YSkK
As we can see, the word test is not encoded but there is a long encoded text returned in response. Decoding this text looks like this:
$ echo -n „dWlkPTMzKHd3dy1kYXRhKSBnaWQ9MzMod3d3LWRhdGEpIGdyb3Vwcz0zMyh3d3ctZGF0YSkK“ | base64 -d
uid=33(www-data) gid=33(www-data) groups=33(www-data)
As you can see, the encoded text is the output of the id command passed to the application.
Why are command injection vulnerabilities dangerous?
Die Command Injection-Klasse von Sicherheitsanfälligkeiten gilt als eine der gefährlichsten Web-Sicherheitsanfälligkeiten, da sie einem Angreifer die Kontrolle über das zugrunde liegende Betriebssystem geben. Diese Steuerung kann auf verschiedene Arten verwendet werden, einschließlich der seitlichen Bewegung durch das interne Netzwerk unter Verwendung des Vertrauens, das der Zielserver mit anderen Systemen im Netzwerk hat.
Sicherheitsanfälligkeiten, die zur Befehlsausführung führen können
Während Sicherheitsanfälligkeiten bei der Befehlsausführung auftreten, wenn die anfällige Anwendung es dem Endbenutzer ermöglicht, die Standardfunktionalität der Anwendung zu erweitern und Systembefehle auszuführen, ist es auch möglich, Befehle über den Code der Anwendung auszuführen. Dies wird allgemein als Codeausführung bezeichnet. Selbst wenn es eine Sicherheitsanfälligkeit bei der Codeausführung gibt, besteht das Endziel darin, beliebige Systembefehle über diese auszuführen. In Anbetracht dessen lassen Sie uns einige der Sicherheitsanfälligkeiten diskutieren, die zur Befehlsausführung durch Befehlsinjektion oder Codeausführung führen können.
Im Folgenden sind einige der Sicherheitsanfälligkeiten aufgeführt, die letztendlich zu Befehlsinjektionsangriffen führen können.
Arbitrary Command injection
Wie in unserem vorherigen Beispiel erläutert, können Anwendungen Anwendungen haben, die beliebige Systembefehle direkt vom Benutzer empfangen und auf dem zugrunde liegenden Host ausführen. Dies ist ein Klassenbeispiel für die Sicherheitsanfälligkeit bei der Befehlsinjektion.
Uploads beliebiger Dateien
Wenn Anwendungen Benutzern das Hochladen von Dateien mit beliebigen Dateierweiterungen ermöglichen, kann dies zu einer Befehlsinjektion führen, wenn diese hochgeladenen Dateien im Webroot abgelegt werden. Dies ist eine weitere gängige Methode, mit der Webanwendungen anfällig für Befehlsinjektionen werden können.
Unsichere Serialisierung
Abgesehen von den Standard-Command-Injection-Schwachstellen kann die Ausführung beliebiger Befehle auch mit anderen Schwachstellen wie der unsicheren Deserialisierung möglich sein. Dies nutzt die Tatsache aus, dass der serverseitige Code den vom Benutzer übergebenen serialisierten Inhalt deserialisiert, ohne ihn ordnungsgemäß zu validieren. Obwohl dies allgemein als unsichere Serialisierungsklasse von Sicherheitsanfälligkeiten bekannt ist, führt es schließlich zur Befehlsinjektion, wenn die Zielanwendung bestimmte Anforderungen erfüllt, z. B. dass im Klassenpfad geeignete Gadgets verfügbar sind.
Serverseitige Vorlageninjektion
Wenn Webanwendungen serverseitige Vorlagentechnologien wie Jinja2 oder Twig verwenden, um dynamische HTML-Antworten zu generieren, ist eine serverseitige Vorlageninjektion möglich. SSTI-Sicherheitsanfälligkeiten treten auf, wenn Benutzereingaben auf unsichere Weise in eine Vorlage eingebettet werden und Remotecodeausführung auf dem Server zur Folge hat.
XML external Entity injection
XML external Entity vulnerability ist eine weitere Art von Sicherheitsanfälligkeit, die bei Anwendungen auftritt, die benutzergesteuerte XML-Eingaben mit einem schwach konfigurierten XML-Parser analysieren. XXE-Schwachstellen führen in der Regel dazu, dass beliebige Dateien vom Server gelesen und Denial-of-Service-Angriffe ausgelöst werden.
Sie können jedoch auch zur Befehlsausführung auf dem Server führen, wenn bestimmte Bedingungen erfüllt sind. Wenn beispielsweise PHP expect:// wrapper auf dem angreifbaren Zielserver aktiviert ist, können beliebige Befehle auf dem Server ausgeführt werden.
Bitte beachten Sie, dass dies keine vollständige Liste der Sicherheitsanfälligkeiten ist, die zu Command Injection führen können, und dass es mehrere andere Sicherheitsanfälligkeiten gibt, die zu Command Injection führen können, wenn sie bestimmte Bedingungen erfüllen.
Fazit
Es ist offensichtlich, dass es verschiedene Sicherheitslücken gibt, die zur Ausführung von Befehlen auf dem Server führen können. Entwickler müssen sich dieser Command Injection-Sicherheitsanfälligkeiten bewusst sein, da diese Sicherheitsanfälligkeiten von großer Bedeutung sind, da sie die volle Kontrolle über die zugrunde liegende Infrastruktur geben können.
In den nächsten Artikeln dieser Serie werden wir einige weitere Konzepte im Zusammenhang mit der Befehlsinjektion behandeln, z. B. das Identifizieren und Ausnutzen der blinden Befehlsinjektion.