Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
phuip-fpizdam — Exploit for CVE-2019-11043 | Kitploit
Outils/GitHubGitHub/neex/phuip-fpizdam
Vulnerability AnalysisExploitationWeb Application ExploitationPenetration TestingLearning & EducationPayload Development
GitHubneex/phuip-fpizdam

phuip-fpizdam

Exploit for CVE-2019-11043

Voir le dépôt
1.8k249il y a 6 ansVérifié par Kitploit

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

PHuiP-FPizdaM

Qu'est-ce que c'est

Ceci est un exploit pour un bogue dans php-fpm (CVE-2019-11043). Dans certaines configurations nginx + php-fpm, il est possible de déclencher le bogue depuis l'extérieur. Cela signifie qu'un utilisateur web peut exécuter du code si vous avez une configuration vulnérable (voir ci-dessous).

Compte-rendu

Bien que nous ayons été trop paresseux pour rédiger un compte-rendu, Orange Tsai a publié une analyse parfaite sur son blog. Chapeau à lui.

Mes slides de ZeroNights 2019 sont disponibles.

Qu'est-ce qui est vulnérable

Si un serveur web exécute nginx + php-fpm et que nginx a une configuration comme

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

qui ne comporte pas non plus de vérifications d'existence de script (comme try_files), alors vous pouvez probablement le pirater avec cet exploit.

La liste complète des conditions préalables

  1. Nginx + php-fpm, location ~ [^/]\.php(/|$) doit être transmis à php-fpm (peut-être que la regexp peut être plus stricte, voir #1).
  2. Il doit y avoir une affectation de la variable PATH_INFO via l'instruction fastcgi_param PATH_INFO $fastcgi_path_info;. De plus, SCRIPT_FILENAME doit être défini en utilisant fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; (il pourrait y avoir un chemin constant au lieu de $document_root). Au début, nous pensions qu'elles étaient toujours présentes dans le fichier fastcgi_params, mais ce n'est pas vrai.
  3. Il doit y avoir un moyen de définir PATH_INFO sur une valeur vide. Cet exploit suppose que la directive fastcgi_split_path_info est présente et contient une regexp commençant par ^ et se terminant par $, donc il essaie de casser la regexp avec un caractère de nouvelle ligne.

N'est-ce pas connu pour être vulnérable depuis des années ?

Il y a longtemps, php-fpm ne restreignait pas les extensions des scripts, ce qui signifie que quelque chose comme /avatar.png/some-fake-shit.php pouvait exécuter avatar.png en tant que script PHP. Ce problème a été corrigé vers 2010.

Le problème actuel ne nécessite pas de téléchargement de fichier, fonctionne dans les versions les plus récentes (jusqu'à ce que le correctif soit arrivé), et, surtout, l'exploit est beaucoup plus cool.

Comment exécuter

Installez-le avec

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

Si vous obtenez des erreurs de compilation étranges, assurez-vous d'utiliser go >= 1.13. Exécutez le programme avec phuip-fpizdam [url] (en supposant que $GOPATH/bin est dans votre $PATH, sinon spécifiez le chemin complet vers le binaire). Une bonne sortie ressemble à ceci :

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!

Après cela, vous pouvez commencer à ajouter ?a=<votre commande> à tous les scripts PHP (vous pourriez avoir besoin de plusieurs tentatives).

Alternativement, vous pouvez utiliser une image Docker pour exécuter l'exploit :

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

Environnements de test

Avec Docker

Si vous souhaitez reproduire le problème ou jouer avec l'exploit localement via Docker, procédez comme suit :

  1. Clonez ce dépôt et allez dans le répertoire reproducer.
  2. Créez l'image Docker avec docker build -t reproduce-cve-2019-11043 .. Cela prend beaucoup de temps car il clone en interne le dépôt PHP et le compile à partir des sources. Cependant, ce sera plus facile si vous voulez déboguer l'exploit. La révision construite est celle juste avant le correctif.
  3. Exécutez le Docker avec docker run --rm -ti -p 8080:80 reproduce-cve-2019-11043.
  4. Vous avez maintenant http://127.0.0.1:8080/script.php, qui est un fichier vide.
  5. Exécutez l'exploit avec phuip-fpizdam http://127.0.0.1:8080/script.php
  6. Si tout va bien, vous pourrez exécuter des commandes en ajoutant ?a= au script : http://127.0.0.1:8080/script.php?a=id. Essayez plusieurs fois car seuls certains workers php-fpm sont infectés.

Avec des conteneurs système LXD

Si vous souhaitez reproduire le problème ou jouer avec l'exploit localement via LXD, procédez comme suit :

  1. Créez deux conteneurs système, vulnerable et attacker. Vous pouvez utiliser l'image de conteneur ubuntu:18.04 pour les deux conteneurs.
  2. Dans le conteneur vulnerable, installez nginx et php-fpm. Configurez le bloc serveur comme cette configuration. Créez un fichier vide /var/www/html/index.php.
  3. Dans le conteneur attacker, installez le langage Go (sudo snap install go --classic), clonez ce dépôt, et exécutez go build dans le répertoire du dépôt.
  4. Exécutez l'attaque comme suit : ./phuip-fpizdam http://vulnerable.lxd/index.php. Essayez plusieurs types afin d'infecter tous les workers php-fpm.

Pour des instructions plus détaillées, consultez Testing CVE-2019-11043 (php-fpm security vulnerability) with LXD system containers.

À propos de PHP5

Le buffer underflow dans php-fpm est présent dans PHP version 5. Cependant, cet exploit utilise une optimisation utilisée pour stocker les variables FastCGI, _fcgi_data_seg. Cette optimisation n'est présente que dans php 7, donc cet exploit particulier ne fonctionne que pour php 7. Il pourrait y avoir une autre technique d'exploitation qui fonctionne en php 5.

Crédits

Anomalie originale découverte par d90pwn lors du Real World CTF. Cause racine trouvée par moi (Emil Lerner) ainsi que la manière de définir les options php.ini. L'ensemble final des options php.ini a été trouvé par beched.

Licence

Cet exploit est distribué selon les termes de la licence MIT.

Abstenez-vous de causer des dégâts avec cet exploit. Mais si vous piratez vraiment quelque chose avec ce truc, je serai heureux.

Télécharger l’outil
  • Cet exploit particulier suppose que PATH_INFO est défini après REQUEST_URI dans la configuration.
  • Aucune vérification d'existence de fichier comme try_files $uri =404 ou if (-f $uri). Si Nginx abandonne les requêtes vers des scripts inexistants avant le transfert FastCGI, nos requêtes n'atteignent jamais php-fpm. Ajouter cela est aussi le moyen le plus simple de corriger.
  • Cet exploit fonctionne uniquement pour PHP 7+, mais le bogue lui-même est présent dans les versions antérieures (voir ci-dessous).