Apache
Last updated
Last updated
Lerne & übe AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Lerne & übe GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Überprüfe, welche Erweiterungen den Apache-Server ausführen. Um sie zu suchen, kannst du ausführen:
Auch einige Orte, an denen Sie diese Konfiguration finden können, sind:
Diese Arten von Angriffen wurden von Orange in diesem Blogbeitrag eingeführt und dokumentiert, und das Folgende ist eine Zusammenfassung. Der "Verwirrungs"-Angriff missbraucht im Grunde, wie die Dutzenden von Modulen, die zusammenarbeiten, um einen Apache zu erstellen, nicht perfekt synchronisiert arbeiten, und das Modifizieren unerwarteter Daten in einigen von ihnen kann eine Schwachstelle in einem späteren Modul verursachen.
Das mod_rewrite
wird den Inhalt von r->filename
nach dem Zeichen ?
kürzen (modules/mappers/mod_rewrite.c#L4141). Das ist nicht ganz falsch, da die meisten Module r->filename
als URL behandeln. In anderen Fällen wird dies jedoch als Dateipfad behandelt, was ein Problem verursachen würde.
Pfadtrunkierung
Es ist möglich, mod_rewrite
wie im folgenden Regelbeispiel zu missbrauchen, um auf andere Dateien im Dateisystem zuzugreifen, indem einfach der letzte Teil des erwarteten Pfades entfernt wird, indem man ein ?
hinzufügt:
Irreführende RewriteFlag-Zuweisung
In der folgenden Rewrite-Regel wird die URL, solange sie mit .php endet, als php behandelt und ausgeführt. Daher ist es möglich, eine URL zu senden, die mit .php endet, nachdem das ?
-Zeichen verwendet wurde, während im Pfad ein anderer Dateityp (wie ein Bild) mit schädlichem php-Code geladen wird:
Es ist möglich, auf Dateien zuzugreifen, auf die der Benutzer nicht zugreifen sollte, selbst wenn der Zugriff mit Konfigurationen wie: verweigert werden sollte.
Dies liegt daran, dass PHP-FPM standardmäßig URLs empfängt, die mit .php
enden, wie http://server/admin.php%3Fooo.php
, und da PHP-FPM alles nach dem Zeichen ?
entfernt, ermöglicht die vorherige URL das Laden von /admin.php
, selbst wenn die vorherige Regel dies verboten hat.
Ein interessanter Fakt über Apache ist, dass die vorherige Umschreibung versucht, die Datei sowohl aus dem documentRoot als auch aus dem Root-Verzeichnis zuzugreifen. Eine Anfrage an https://server/abouth.html
wird die Datei in /var/www/html/about.html
und /about.html
im Dateisystem überprüfen. Dies kann im Grunde genommen missbraucht werden, um auf Dateien im Dateisystem zuzugreifen.
Offenlegung des CGI-Quellcodes
Es reicht aus, ein %3F am Ende hinzuzufügen, um den Quellcode eines cgi-Moduls offenzulegen:
PHP-Quellcode offenlegen
Wenn ein Server verschiedene Domains hat, wobei eine davon eine statische Domain ist, kann dies ausgenutzt werden, um das Dateisystem zu durchlaufen und PHP-Code offenzulegen:
Das Hauptproblem bei dem vorherigen Angriff ist, dass standardmäßig der Zugriff auf das Dateisystem in den meisten Fällen verweigert wird, wie in der Konfigurationsvorlage des Apache HTTP Servers:
Allerdings erlauben die Betriebssysteme Debian/Ubuntu standardmäßig /usr/share
:
Daher wäre es möglich, Dateien, die sich in /usr/share
in diesen Distributionen befinden, auszunutzen.
Lokales Gadget zur Informationsoffenlegung
Apache HTTP Server mit websocketd kann das dump-env.php-Skript unter /usr/share/doc/websocketd/examples/php/ exponieren, was sensible Umgebungsvariablen offenlegen kann.
Server mit Nginx oder Jetty könnten sensible Informationen von Webanwendungen (z.B. web.xml) über ihre standardmäßigen Webwurzeln, die unter /usr/share platziert sind, exponieren:
/usr/share/nginx/html/
/usr/share/jetty9/etc/
/usr/share/jetty9/webapps/
Lokales Gadget zu XSS
Auf Ubuntu Desktop mit LibreOffice installiert kann das Ausnutzen der Sprachumschaltfunktion der Hilfedateien zu Cross-Site Scripting (XSS) führen. Das Manipulieren der URL unter /usr/share/libreoffice/help/help.html kann zu bösartigen Seiten oder älteren Versionen über unsichere RewriteRule umleiten.
Lokales Gadget zu LFI
Wenn PHP oder bestimmte Front-End-Pakete wie JpGraph oder jQuery-jFeed installiert sind, können deren Dateien ausgenutzt werden, um sensible Dateien wie /etc/passwd zu lesen:
/usr/share/doc/libphp-jpgraph-examples/examples/show-source.php
/usr/share/javascript/jquery-jfeed/proxy.php
/usr/share/moodle/mod/assignment/type/wims/getcsv.php
Lokales Gadget zu SSRF
Durch die Nutzung von MagpieRSS's magpie_debug.php unter /usr/share/php/magpierss/scripts/magpie_debug.php kann eine SSRF-Schwachstelle leicht erstellt werden, die einen Zugang zu weiteren Exploits bietet.
Lokales Gadget zu RCE
Die Möglichkeiten für Remote Code Execution (RCE) sind vielfältig, mit anfälligen Installationen wie einer veralteten PHPUnit oder phpLiteAdmin. Diese können ausgenutzt werden, um beliebigen Code auszuführen, was das umfangreiche Potenzial der Manipulation lokaler Gadgets zeigt.
Es ist auch möglich, aus den erlaubten Ordnern auszubrechen, indem man Symlinks folgt, die von installierter Software in diesen Ordnern generiert wurden, wie:
Cacti Log: /usr/share/cacti/site/
-> /var/log/cacti/
Solr Data: /usr/share/solr/data/
-> /var/lib/solr/data
Solr Config: /usr/share/solr/conf/
-> /etc/solr/conf/
MediaWiki Config: /usr/share/mediawiki/config/
-> /var/lib/mediawiki/config/
SimpleSAMLphp Config: /usr/share/simplesamlphp/config/
-> /etc/simplesamlphp/
Darüber hinaus war es durch das Ausnutzen von Symlinks möglich, RCE in Redmine zu erlangen.
Dieser Angriff nutzt die Überlappung in der Funktionalität zwischen den Direktiven AddHandler
und AddType
, die beide verwendet werden können, um PHP-Verarbeitung zu aktivieren. Ursprünglich betrafen diese Direktiven unterschiedliche Felder (r->handler
und r->content_type
jeweils) in der internen Struktur des Servers. Aufgrund von Legacy-Code behandelt Apache jedoch diese Direktiven unter bestimmten Bedingungen austauschbar, indem r->content_type
in r->handler
umgewandelt wird, wenn erstere gesetzt ist und letztere nicht.
Darüber hinaus verwendet der Apache HTTP Server (server/config.c#L420
), wenn r->handler
vor der Ausführung von ap_run_handler()
leer ist, r->content_type
als Handler, was effektiv AddType
und AddHandler
identisch in der Wirkung macht.
In diesem Vortrag wurde eine Schwachstelle präsentiert, bei der ein falsches Content-Length
, das von einem Client gesendet wird, dazu führen kann, dass Apache fälschlicherweise den PHP-Quellcode zurückgibt. Dies war auf ein Fehlerbehandlungsproblem mit ModSecurity und der Apache Portable Runtime (APR) zurückzuführen, bei dem eine doppelte Antwort dazu führt, dass r->content_type
auf text/html
überschrieben wird.
Da ModSecurity Rückgabewerte nicht richtig behandelt, würde es den PHP-Code zurückgeben und nicht interpretieren.
TODO: Orange hat diese Schwachstelle noch nicht offengelegt
Wenn ein Angreifer in der Lage ist, den Content-Type
-Header in einer Serverantwort zu kontrollieren, kann er willkürliche Modul-Handler aufrufen. Allerdings wird der Großteil des Anforderungsprozesses bereits abgeschlossen sein, wenn der Angreifer dies kontrolliert. Es ist jedoch möglich, den Anforderungsprozess durch Ausnutzen des Location
-Headers neu zu starten, da, wenn der rückgegebene Status
200 ist und der Location
-Header mit einem /
beginnt, die Antwort als serverseitige Umleitung behandelt wird und verarbeitet werden sollte.
Laut RFC 3875 (Spezifikation über CGI) definiert Abschnitt 6.2.2 ein Verhalten für lokale Umleitungsantworten:
Das CGI-Skript kann einen URI-Pfad und eine Abfragezeichenfolge (‘local-pathquery’) für eine lokale Ressource in einem Location-Headerfeld zurückgeben. Dies zeigt dem Server an, dass er die Anfrage mit dem angegebenen Pfad erneut verarbeiten soll.
Daher ist es notwendig, um diesen Angriff durchzuführen, eine der folgenden Schwachstellen zu haben:
CRLF-Injection in den CGI-Antwort-Headern
SSRF mit vollständiger Kontrolle über die Antwort-Header
Zum Beispiel sollte /server-status
nur lokal zugänglich sein:
Es ist möglich, darauf zuzugreifen, indem der Content-Type
auf server-status
und der Location-Header mit /
beginnt.
Umleitung zu mod_proxy
, um auf jedes Protokoll unter jeder URL zuzugreifen:
Allerdings wird der X-Forwarded-For
-Header hinzugefügt, um den Zugriff auf Cloud-Metadatenendpunkte zu verhindern.
Greifen Sie auf den lokalen Unix-Domain-Socket von PHP-FPM zu, um ein PHP-Backdoor auszuführen, das sich in /tmp/
befindet:
Das offizielle PHP Docker Image enthält PEAR (Pearcmd.php
), ein Befehlszeilen-PHP-Paketverwaltungstool, das missbraucht werden kann, um RCE zu erlangen:
Überprüfen Sie Docker PHP LFI Zusammenfassung, geschrieben von Phith0n für die Details dieser Technik.
Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)