tip
Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Unterstützen Sie HackTricks
- Überprüfen Sie die Abonnementpläne!
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.
Wichtiger Hinweis:
dl
ist eine PHP-Funktion, die verwendet werden kann, um PHP-Erweiterungen zu laden. Wenn die Funktion nicht deaktiviert ist, könnte sie missbraucht werden, um disable_functions
zu umgehen und beliebige Befehle auszuführen.
Es gibt jedoch einige strenge Einschränkungen:
- Die
dl
-Funktion muss vorhanden und nicht deaktiviert sein. - Die PHP-Erweiterung muss mit der gleichen Hauptversion (PHP-API-Version) kompiliert sein, die der Server verwendet (diese Informationen können Sie in der Ausgabe von phpinfo sehen).
- Die PHP-Erweiterung muss im Verzeichnis liegen, das durch die
extension_dir
-Direktive definiert ist (Sie können es in der Ausgabe von phpinfo sehen). Es ist sehr unwahrscheinlich, dass ein Angreifer, der versucht, den Server auszunutzen, Schreibzugriff auf dieses Verzeichnis hat, sodass diese Anforderung wahrscheinlich verhindern wird, dass Sie diese Technik missbrauchen.
Wenn Sie diese Anforderungen erfüllen, lesen Sie den Beitrag weiter https://antichat.com/threads/70763/ um zu erfahren, wie man disable_functions umgeht. Hier ist eine Zusammenfassung:
Die dl-Funktion wird verwendet, um PHP-Erweiterungen dynamisch während der Skriptausführung zu laden. PHP-Erweiterungen, die typischerweise in C/C++ geschrieben sind, erweitern die Funktionalität von PHP. Der Angreifer, der bemerkt, dass die dl
-Funktion nicht deaktiviert ist, beschließt, eine benutzerdefinierte PHP-Erweiterung zu erstellen, um Systembefehle auszuführen.
Schritte, die der Angreifer unternimmt:
- PHP-Versionserkennung:
- Der Angreifer bestimmt die PHP-Version mit einem Skript (
<?php echo 'PHP Version is '.PHP_VERSION; ?>
).
- PHP-Quellcode-Akquisition:
- Lädt den PHP-Quellcode von der offiziellen PHP-Website oder dem Archiv, wenn die Version älter ist.
- Lokale PHP-Installation:
- Entpackt und installiert die spezifische PHP-Version auf seinem System.
- Erweiterungserstellung:
- Studiert die Erstellung von PHP-Erweiterungen und inspiziert den PHP-Quellcode.
- Konzentriert sich darauf, die Funktionalität der exec-Funktion in
ext/standard/exec.c
zu duplizieren.
Hinweise zum Kompilieren der benutzerdefinierten Erweiterung:
- ZEND_MODULE_API_NO:
- Die
ZEND_MODULE_API_NO
inbypass.c
muss mit dem aktuellen Zend Extension Build übereinstimmen, abrufbar mit:
php -i | grep "Zend Extension Build" |awk -F"API4" '{print $2}' | awk -F"," '{print $1}'
- PHP_FUNCTION-Modifikation:
- Für neuere PHP-Versionen (5, 7, 8) muss
PHP_FUNCTION(bypass_exec)
möglicherweise angepasst werden. Der bereitgestellte Codeausschnitt beschreibt diese Modifikation.
Dateien der benutzerdefinierten Erweiterung:
- bypass.c:
- Implementiert die Kernfunktionalität der benutzerdefinierten Erweiterung.
- php_bypass.h:
- Header-Datei, die die Eigenschaften der Erweiterung definiert.
- config.m4:
- Wird von
phpize
verwendet, um die Build-Umgebung für die benutzerdefinierte Erweiterung zu konfigurieren.
Kompilierung der Erweiterung:
- Kompilierungsbefehle:
- Verwendet
phpize
,./configure
undmake
, um die Erweiterung zu kompilieren. - Das resultierende
bypass.so
befindet sich dann im Unterverzeichnis der Module.
- Bereinigung:
- Führt nach der Kompilierung
make clean
undphpize --clean
aus.
Hochladen und Ausführen auf dem Opfer-Host:
- Versionskompatibilität:
- Stellt sicher, dass die PHP-API-Versionen zwischen dem System des Angreifers und dem des Opfers übereinstimmen.
- Erweiterungsladung:
- Nutzt die
dl
-Funktion, um Einschränkungen zu umgehen, indem relative Pfade oder ein Skript zur Automatisierung des Prozesses verwendet werden.
- Skriptausführung:
- Der Angreifer lädt
bypass.so
und ein PHP-Skript auf den Server des Opfers hoch. - Das Skript verwendet die
dl_local
-Funktion, umbypass.so
dynamisch zu laden und ruft dannbypass_exec
mit einem über dencmd
-Abfrageparameter übergebenen Befehl auf.
Befehlsausführung:
- Der Angreifer kann jetzt Befehle ausführen, indem er auf zugreift:
http://www.example.com/script.php?cmd=<command>
Diese detaillierte Anleitung beschreibt den Prozess der Erstellung und Bereitstellung einer PHP-Erweiterung zur Ausführung von Systembefehlen, indem die dl
-Funktion ausgenutzt wird, die idealerweise deaktiviert sein sollte, um solche Sicherheitsverletzungen zu verhindern.
tip
Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Unterstützen Sie HackTricks
- Überprüfen Sie die Abonnementpläne!
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.