В этом райтапе я разберу атаку на веб‑консоль Flask Werkzeug, работу с удаленным отладчиком Chrome и покажу, как эксплуатировать нашумевшую уязвимость в sudoedit для чтения произвольных файлов в системе.
Поможет мне в этом тренировочная машина Agile с площадки Hack The Box. Уровень ее сложности — средний.
Подключаться к машинам с 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.
Одно из первых действий при тестировании безопасности веб‑приложения — это сканирование методом перебора каталогов, чтобы найти скрытую информацию и недоступные обычным посетителям функции. Для этого можно использовать программы вроде dirsearch, DIRB или ffuf. Я предпочитаю feroxbuster.
При запуске указываем следующие параметры:
feroxbuster -u
В результате сканирования находим редирект на домен 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
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
9990 рублей 4000 р.
[TD]
920 р.
[/TD]
Я уже участник «Xakep.ru»
Поможет мне в этом тренировочная машина 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
You do not have permission to view link please Вход or Регистрация
-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»