Хакер - HTB Shoppy. Повышаем привилегии через группу Docker
hacker_frei
RalfHacker
Содержание статьи
- Разведка
- Сканирование портов
- Точка входа
- Точка опоры
- Продвижение
- Локальное повышение привилегий
В этом райтапе я покажу разные техники сканирования веб‑сайта, затем проэксплуатируем инъекцию NoSQL, чтобы обойти авторизацию. Под конец прохождения разберемся с пользовательским менеджером паролей и повысим привилегии через группу Docker.
Нашей целью будет захват тренировочной машины Shoppy с площадки Hack The Box.
WARNING
Подключаться к машинам с HTB рекомендуется только через VPN. Не делай этого с компьютеров, где есть важные для тебя данные, так как ты окажешься в общей сети с другими участниками.
РАЗВЕДКА
Сканирование портов
Добавляем IP-адрес машины в /etc/hosts:
10.10.11.180 shoppy.htb
И запускаем сканирование портов.
Справка: сканирование портов
Сканирование портов — стандартный первый шаг при любой атаке. Он позволяет атакующему узнать, какие службы на хосте принимают соединение. На основе этой информации выбирается следующий шаг к получению точки входа.
Наиболее известный инструмент для сканирования — это Nmap. Улучшить результаты его работы ты можешь при помощи следующего скрипта:
#!/bin/bash
ports=$(nmap -p- --min-rate=500 $1 | grep ^[0-9] | cut -d '/' -f 1 | tr '\n' ',' | sed s/,$//)
nmap -p$ports -A $1
Он действует в два этапа. На первом производится обычное быстрое сканирование, на втором — более тщательное сканирование, с использованием имеющихся скриптов (опция -A).

Скрипт нашел нам два открытых порта: 22 — служба OpenSSH 8.4p1 и 80 — веб‑сервер Nginx 1.23.1. Естественно, начинаем с веб‑сервера.

На самом сайте ничего интересного найти не удалось, поэтому приступаем к сканированию на предмет скрытых каталогов и файлов.
Справка: сканирование веба c ffuf
Одно из первых действий при тестировании безопасности веб‑приложения — это сканирование методом перебора каталогов, чтобы найти скрытую информацию и недоступные обычным посетителям функции. Для этого можно использовать программы вроде dirsearch и DIRB.
Я предпочитаю легкий и очень быстрый ffuf. При запуске указываем следующие параметры:
-w— словарь (я использую словари из набора SecLists);-t— количество потоков;-u— URL.
ffuf -u 'http://shoppy.htb/FUZZ' -w directory_2.3_medium_lowercase.txt -t 256

Так получаем страницу авторизации, с которой мы, скорее всего, и начнем наше тестирование сайта.

Не забываем просканировать и поддомены, использовать можно все тот же ffuf. В этот раз будем перебирать заголовок Host (параметр -H). Но в ответ попадут абсолютно все варианты, поэтому отфильтруем варианты по размеру.
ffuf -u 'http://shoppy.htb/' -H 'Host: FUZZ.shoppy.htb' -w bitquark-subdomains-top100000.txt -t 256 -f
s 169

Находим еще один сайт и добавляем его в /etc/hosts:
10.10.11.180 shoppy.htb mattermost.shoppy.htb

ТОЧКА ВХОДА
Так как по адресу mattermost.shoppy.htb расположен готовый продукт, а на shoppy.htb — самописный сервис, начнем со второго. Первым делом я решил перебрать по словарю разные нагрузки для обхода авторизации — от учетных данных admin:admin до инъекций SQL и LDAP. Делать такие переборы удобнее всего с помощью Burp Intruder.

В результатах перебора видим много ответов, размер которых равен 318 байтам, но есть и выбивающиеся из общего списка. При этом в самом ответе нам выдают cookie и отправляют на страницу /admin.

Обнаруживаем, что нагрузка '||2||' в поле логина эксплуатирует NoSQL-инъекцию, что помогает обойти авторизацию.

В верхнем углу видим кнопку поиска. Скорее всего, это и даст нам дальнейший вектор атаки. Переходим к поиску и вводим любую комбинацию.

Тут больше всего привлекает внимание URL:
http://shoppy.htb/admin/search-users?username=qwe
Попытки «протыкать кавычки и скобки» ни к чему не привели. Но так как это функция, работающая с именами пользователей, давай переберем возможные имена.
ТОЧКА ОПОРЫ
Для перебора снова используем Burp Intruder. А словарь для перебора имен берем из знаменитого набора словарей SecLists.


В итоге получаем два доступных логина: admin и john. Первый мы уже знали и до этого, но он нам ничего не дал, поэтому в браузере вбиваем второго пользователя и получаем ссылку на экспорт каких‑то данных:
http://shoppy.htb/exports/export-search.json

Пароль похож на хеш MD5, поэтому воспользуемся сайтом CrackStation для поиска прообраза.

На SSH залогиниться не вышло, но зато получаем доступ к Mattermost, а так как это корпоративный чат, то не исключена возможность найти что‑то интересное.

В итоге в одном из чатов нам удалось найти учетные данные для подключения к какой‑то машине.

С найденными учетными данными подключаемся к хосту и забираем первый флаг.

ПРОДВИЖЕНИЕ
Скрипт PEASS для Linux ничего не показал, кроме того, что для проверки sudoers нужно ввести пароль пользователя. Поэтому проверяем в ручном режиме.
sudo -l

Таким образом, мы можем выполнить приложение /home/deploy/password-manager от имени пользователя deploy без ввода пароля. Это исполняемый ELF-файл.

Поскольку перед нами менеджер паролей, попробуем его проанализировать. Скачиваем файл с удаленного хоста на локальный и закидываем в любой удобный декомпилятор.
scp jaeger@10.10.11.180:/home/deploy/password-manager ./
Я, как всегда, использую IDA Pro с Hex-Rays. Программа, по всей видимости, написана на C++. Сразу в главной функции находим пароль от программы — Sample. Вот такой плохой менеджер паролей (ну и машина легкая, для новичков).

Вводим найденный пароль в менеджер и получаем учетные данные другого пользователя.
sudo -u deploy /home/deploy/password-manager

Локально меняем пользователя с помощью su.

ЛОКАЛЬНОЕ ПОВЫШЕНИЕ ПРИВИЛЕГИЙ
Снова проводить разведку нет смысла, так как всю информацию мы уже собрали. Но после выполнения команды id обратим внимание, что мы состоим в группе docker, а это дает нам право его запускать. В случаях, когда нам разрешено запускать файлы, для запуска которых в обычной среде нужны привилегии, я обращаюсь к базе GTFOBins.
GTFOBins — это список исполняемых файлов Unix, которые можно использовать для обхода локальных ограничений безопасности в неправильно настроенных системах. Проект собирает законные функции двоичных файлов Unix, которыми можно злоупотреблять, чтобы получить доступ к командным оболочкам, повысить привилегии или передать файлы.
Находим готовый рецепт для Docker и используем его.

docker run -v /:/mnt --rm -it alpine chroot /mnt sh

Машина захвачена!
Читайте ещё больше платных статей бесплатно: https://t.me/hacker_frei