Полет в стратосферу. Ломаем Struts через Action-приложение и мастерим Forward Shell

В этой статье я покажу, как захватить стратосферу, а точнее — получить рут на виртуалке Stratosphere с CTF-площадки Hack The Box. На этот раз мы повоюем с фреймворком Apache Struts для получения RCE-уязвимости в веб-приложении, рассмотрим в действии редко обсуждаемую, но очень полезную концепцию получения удаленной сессии Forward Shell, а также поиграем с угоном библиотеки и эксплуатацией функции eval() для скрипта на Python.

HTB — Stratosphere

Несмотря на то что Stratosphere не слишком сложна (5,2 балла из 10), прохождение этой ВМ доставило мне немало удовольствия благодаря возможности попрактиковаться с редко встречаемой техникой Forward Shell.

Помимо этого, вот с чем мы столкнемся на пути к флагу суперпользователя:

  • разведка и сбор информации об используемом ПО для обнаружения фреймворка Apache Struts;
  • выявление слабых мест Struts для атаки на веб-приложение, построенное на Java EE и Action;
  • поиск удобного способа взаимодействия с хостом в условиях беспощадно фильтруемого исходящего трафика HTTP;
  • обнаружение слабого пароля для базы данных MySQL и извлечение из нее авторизационных данных пользователя для подключения к машине по SSH;
  • два способа эксплуатации уязвимого приложения на Python: абъюз функции eval() и «угон» импортируемого модуля.

 

Разведка

Приступим, пожалуй. Сначала заглядываем в открытые порты с помощью героя всех фильмов про хакеров — сканера Nmap.

root@kali:~# nmap -n -Pn -sV -sC -oA nmap/stratosphere 10.10.10.64
root@kali:~# cat nmap/stratosphere.nmap
# Nmap 7.70 scan initiated Sat Aug 10 23:56:34 2019 as: nmap -n -v -Pn -sV -sC -oA nmap/initial 10.10.10.64
Nmap scan report for 10.10.10.64
Host is up (0.054s latency).
Not shown: 997 filtered ports
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.4p1 Debian 10+deb9u2 (protocol 2.0)
| ssh-hostkey:
| 2048 5b:16:37:d4:3c:18:04:15:c4:02:01:0d:db:07:ac:2d (RSA)
| 256 e3:77:7b:2c:23:b0:8d:df:38:35:6c:40:ab:f6:81:50 (ECDSA)
|_ 256 d7:6b:66:9c:19:fc:aa:66:6c:18:7a:cc:b5:87:0e:40 (ED25519)
80/tcp open http
| fingerprint-strings:
| [ ....................................................... ]
| [ ............ [содержимое строки-отпечатка] ............ ]
| [ ....................................................... ]
| GetRequest:
| [ ....................................................... ]
| [ ................ [ответ на GET-запрос] ................ ]
| [ ....................................................... ]
| http-methods:
| Supported Methods: GET HEAD POST PUT DELETE OPTIONS
|_ Potentially risky methods: PUT DELETE
|_http-title: Stratosphere
8080/tcp open http-proxy
| fingerprint-strings:
| [ ....................................................... ]
| [ ............ [содержимое строки-отпечатка] ............ ]
| [ ....................................................... ]
| GetRequest:
| [ ....................................................... ]
| [ ................ [ответ на GET-запрос] ................ ]
| [ ....................................................... ]
| http-methods:
| Supported Methods: GET HEAD POST PUT DELETE OPTIONS
|_ Potentially risky methods: PUT DELETE
|_http-open-proxy: Proxy might be redirecting requests
|_http-title: Stratosphere
2 services unrecognized despite returning data. If you know the service/version, please submit the following fingerprints at https://nmap.org/cgi-bin/submit.cgi?new-service :
==============NEXT SERVICE FINGERPRINT (SUBMIT INDIVIDUALLY)==============
| [ ....................................................... ]
| [ .... [отпечаток неопознанного сервиса на порте 80] .... ]
| [ ....................................................... ]
==============NEXT SERVICE FINGERPRINT (SUBMIT INDIVIDUALLY)==============
| [ ....................................................... ]
| [ ... [отпечаток неопознанного сервиса на порте 8080] ... ]
| [ ....................................................... ]
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Read data files from: /usr/bin/../share/nmap
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
# Nmap done at Sat Aug 10 23:56:59 2019 -- 1 IP address (1 host up) scanned in 24.41 seconds

В этот раз Nmap разразился мощнейшим потоком информации, большую часть из которой я не стал включать в листинг, потому что она бесполезна для наших нужд: в основном это были строки — отпечатки неопознанных сервисов, которые сканер не смог идентифицировать и попросил сделать это за него. Также я не стал приводить содержимое ответов на GET-запросы, которые Nmap решил отправить на веб — 80-й и 8080-й порты.

В остальном имеем классическую (пока) схему.

  • Secure Shell на 22-м порте, который так и не научился «не палить» версию ОС — с ходу мы видим, что имеем дело с виртуалкой, на которой развернут дистрибутив Debian версии 9 (Stretch), о чем свидетельствует ревизия deb-пакета в баннере OpenSSH.
  • Неопознанные веб-сервер на 80-м порте и прокси на 8080-м.

С веба и начнем.

 

Веб — порт 80

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

 

Браузер

На http://10.10.10.64 тебя встретит цветастый градиент сайта Stratosphere.

Главная страница Stratosphere

При переходе по ссылке GET STARTED NOW сервер выплюнет страницу с таким наполнением.

<!-- view-source:http://10.10.10.64/GettingStarted.html -->

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8"/>
    <title>Stratosphere -- Getting Started</title>
</head>
<body>
    <h1>Site under construction. Please check back later.</h1>
</body>
</html>

Говорят, что сайт пока только разрабатывается, поэтому пусто. Придерживаясь классической разведывательной тактики, следующим шагом сканируем серверы на словарные директории.

 

gobuster

Из всех инструментов для поиска дефолтных директорий мне больше других нравится gobuster. Этот многопоточный брутфорсер написан на Go, что позволяет без лишних усилий закинуть бинарник в систему и сразу же запустить его. Gobuster поддерживается создателем в актуальном состоянии, серьезно обновляется с выходом новых версий, и, что немаловажно, он действительно быстрый.

Указав нужный хост через опцию -u и словарь для перебора имен директорий (один из стандартных для Kali) через -w, запустим перебор в расширенном режиме (опция -e позволяет выводить найденные URL-адреса в полном виде), сохраняя при этом вывод утилиты во внешний файл через -o для отчетности.

root@kali:~# gobuster dir -u ‘http://10.10.10.64’ -w /usr/share/dirbuster/wordlists/directory-list-2.3-medium.txt -e -o gobuster/stratosphere.gobuster
===============================================================
Gobuster v3.0.1
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@_FireFart_)
===============================================================
[+] Url: http://10.10.10.64
[+] Threads: 10
[+] Wordlist: /usr/share/dirbuster/wordlists/directory-list-2.3-medium.txt
[+] Status codes: 200,204,301,302,307,401,403
[+] User Agent: gobuster/3.0.1
[+] Expanded: true
[+] Timeout: 10s
===============================================================
2019/08/11 00:44:24 Starting gobuster
===============================================================
http://10.10.10.64/manager (Status: 302)
http://10.10.10.64/Monitoring (Status: 302)
Progress: 13738 / 220561 (6.23%)^C
[!] Keyboard interrupt detected, terminating.
===============================================================
2019/08/11 00:45:39 Finished
===============================================================

Обнаружив два любопытных адреса, я остановил перебор (больше ничего не найдется, поверь на слово) и пошел проверять то, что предложил мне gobuster.

/manager

Перейдя по адресу http://10.10.10.64/manager, видим стандартный сервер-менеджер Apache Tomcat. Доступа к нему у нас, конечно же, нет.

Сервер-менеджер Apache Tomcat
/Monitoring

На http://10.10.10.64/Monitoring — кое-что гораздо интереснее.

Action-приложение Apache Struts

От кнопок SIGN ON и REGISTER толку мало — обе они ведут к сообщению о том, что сайт все еще на стадии разработки.

«Сайт еще разрабатывается»
 

Apache Struts

Главная зацепка — это Action-приложение, представленное на веб-странице скриншотом ранее, которое часто связано с фреймворком Struts.

Struts предназначен для создания веб-приложений, базирующихся на технологии Java EE — наборе правил и спецификаций для Java, который описывает архитектуру серверной платформы для построения приложений.

Простыми словами, Struts — это реализация концепции «модель — представление — контроллер» (Model — View — Controller, MVC), созданная в Apache Software Foundation. Action здесь представляет собой запрос клиента, обрабатываемый контроллером (сервлетом ActionServlet) на сервере. Круговорот трафика в мире Apache Struts изображен на картинке ниже.

Взаимодействие «клиент — сервер» для Apache Struts (источник — NetBeans)

«Это, конечно, здорово, но что все это может дать для нашей задачи проникновения в систему?» — вопросишь ты. Не так давно в механизме взаимодействия, описанном выше, была обнаружена уязвимость, позволяющая выполнить произвольный код на удаленном хосте, рейтинг опасности которой был оценен в максимальные 10.0 по нотации CVSSv2.

Источник: xakep.ru

Ответить

Ваш адрес email не будет опубликован. Обязательные поля помечены *