Ques/Help/Req HTB Agile. Ломаем PIN к веб-консоли Flask Werkzeug

XakeR

Member
Регистрация
13.05.2006
Сообщения
1 912
Реакции
0
Баллы
16
Местоположение
Ukraine
В этом райтапе я разберу атаку на веб‑консоль Flask Werkzeug, работу с удаленным отладчиком Chrome и покажу, как эксплуатировать нашумевшую уязвимость в sudoedit для чтения произвольных файлов в системе.

Поможет мне в этом тренировочная машина Agile с площадки Hack The Box. Уровень ее сложности — средний.

warning​


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



Разведка​




Добавляем IP-адрес машины в /etc/hosts:

10.10.11.203 agile.htb

И запускаем сканирование портов.

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


Сканирование портов — стандартный первый шаг при любой атаке. Он позволяет атакующему узнать, какие службы на хосте принимают соединение. На основе этой информации выбирается следующий шаг к получению точки входа.

Наиболее известный инструмент для сканирования — это Nmap. Улучшить результаты его работы ты можешь при помощи следующего скрипта:

#!/bin/bashports=$(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.9p1 и 80 — веб‑сервер Nginx 1.18.0. Как обычно в такой ситуации, сразу идем смотреть веб.

Главная страница agile.htb

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

Справка: сканирование веба c feroxbuster​


Одно из первых действий при тестировании безопасности веб‑приложения — это сканирование методом перебора каталогов, чтобы найти скрытую информацию и недоступные обычным посетителям функции. Для этого можно использовать программы вроде dirsearch, DIRB или ffuf. Я предпочитаю feroxbuster.

При запуске указываем следующие параметры:

  • -u — URL;
  • -w — словарь (я использую словари из набора SecLists);
  • -t — количество потоков;
  • -d — глубина сканирования.

feroxbuster -u -w directory_2.3_medium_lowercase.txt -d 2 -t 256 Результат сканирования каталогов

В результате сканирования находим редирект на домен superpass.htb. Добавляем его в файл /etc/hosts и проверяем.

10.10.11.203 agile.htb superpass.htb Главная страница сайта superpass.htb

Точка входа​


На сайте есть возможность зарегистрироваться и авторизоваться. Сделаем это, чтобы расширить область тестирования.

Форма авторизации

Теперь нам доступен онлайновый сервис для хранения учетных данных.

Страница vault

Нам нужно протестировать максимально возможное число функций сервиса. Создаем тестовую запись и экспортируем пароли.

Экспорт паролей

Файл скачивается автоматически, просмотрим весь процесс в Burp History.

Burp History

Имя файла для скачивания передается в параметре fn на странице download. Стоит проверить, можно ли выполнить обход каталога и получить другой произвольный файл.

Содержимое файла /etc/passwd

Получаем содержимое файла /etc/passwd, а это значит, что на сайте есть уязвимость LFI.



Точка опоры​




Первым делом, когда обнаруживаем LFI, нужно проверить все файлы, которые могут содержать интересную информацию. На GitHub можно найти много таких словарей, а перебирать по ним будем с помощью Burp Intruder.

Burp Intruder — вкладка Payload positions

В результате ничего особенного не нашли, только из файла /etc/passwd узнаем о наличии тестовой версии сайта на домене test.superpass.htb, а также получим переменные окружения процесса из файла /proc/self/environ.

Содержимое файла /etc/hostsСодержимое файла /proc/self/environ

Переменные окружения раскрыли нам пользователя www-data, от имени которого работает сервис. Интересна и переменная CONFIG_PATH, где указан файл настроек /app/config_prod.json. Но при попытке прочитать его получаем ошибку Bad Request.

Запрос на загрузку файла /app/config_prod.json

Иногда при отображении ошибок приложение может раскрывать пути к файлам, в которых произошла ошибка. Поэтому попробуем скачать несуществующий файл /etc/qweqweqwe.txt.

Запрос на загрузку файла /etc/qweqweqwe.txt

Приложение предоставило большой вывод, в котором и присутствует путь к исполняемому файлу сайта:

/app/app/superpass/views/vault_views.py Содержимое файла vault_views.py

Моей первой идеей было получить SECRET_KEY от Flask, чтобы можно было вручную генерировать идентификаторы сессии других пользователей и получать сохраненные пароли. Но в этом случае секретный ключ Flask не был явно задан.



При регистрации и авторизации можно добиться ошибки Flask, что дает нам возможность запросить дебаг‑консоль Werkzeug. Но проблема в том, что она защищена девятизначным PIN-кодом.

Страница ошибки Flask WerkzeugКонсоль Werkzeug

Присоединяйся к сообществу «Xakep.ru»!​


Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее

-60%

1 year​


9990 рублей 4000 р.


[TD]

1 month_r​


920 р.
[/TD]

Я уже участник «Xakep.ru»
 
198 114Темы
635 085Сообщения
3 618 401Пользователи
EeOneНовый пользователь
Верх