Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
В этом райтапе я покажу, как через уязвимость в расширении браузера получить доступ к файлам другого пользователя. Найденные критически важные данные помогут нам закрепиться на хосте, а захватим контроль над ним мы при помощи уязвимости в веб‑сервисе. А потом нам предстоит побег из Docker!
Захватывать будем учебную машину Extension с площадки Hack The Box. Уровень — «сложный».
warning
Подключаться к машинам с HTB рекомендуется только через VPN. Не делай этого с компьютеров, где есть важные для тебя данные, так как ты окажешься в общей сети с другими участниками.
Добавляем IP-адрес машины в /etc/hosts
:
10.10.11.171 extension.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 7.6p1 и 80 — веб‑сервер Nginx 1.14.0. Начинаем, конечно же, с сайта.
Главная страница сайта http://extension.htb
На сайте видим указанный домен, который добавляем в файл /etc/hosts
.
10.10.11.171 extension.htb snippet.htb
Так как он реальный, мы можем просканировать поддомены. Я использую сканер ffuf.
Справка: сканирование веба c ffuf
Одно из первых действий при тестировании безопасности веб‑приложения — это сканирование методом перебора каталогов, чтобы найти скрытую информацию и недоступные обычным посетителям функции. Для этого можно использовать программы вроде dirsearch и DIRB.
Я предпочитаю легкий и очень быстрый ffuf. При запуске указываем следующие параметры:
-w
— словарь (я использую словари из набора SecLists);
-t
— количество потоков;
-u
— URL;
-r
— выполнять редиректы;
-fs
— фильтровать страницы по размеру;
-fc
— исключить из результата ответы с кодом 403.
Место перебора помечается словом FUZZ
.
Команда получается следующая:
ffuf -u 'http://snippet.htb/' -r -w subdomains-top1million-110000.txt -t 256 -H 'Host: FUZZ.snippet.htb' --fl 30
Результат сканирования поддоменов с помощью ffuf
Так находим еще два поддомена, которые тоже добавляем в файл /etc/hosts
. Там найдем сервисы Gitea и RoundCube.
10.10.11.171 extension.htb snippet.htb dev.snippet.htb mail.snippet.htb
Главная страница http://dev.snippet.htb
Главная страница http://mail.snippet.htb
В Gitea можем без авторизации посмотреть существующих пользователей.
Пользователи Gitea
Сканирование каталогов на пользовательском сайте тоже ничего не дало.
ffuf -u 'http://snippet.htb/FUZZ' -r -w directory_2.3_medium_lowercase.txt -t 256
Результат сканирования каталогов с помощью ffuf
Тогда посмотрим на пользовательский сайт через Burp. Нас интересует Burp History.
Вкладка Burp History
В коде страницы видим использование какого‑то API. Изучив его подробнее, находим возможность не только получать разную информацию, но и дампить ее.
API для дампа информации
Первым делом я решил посмотреть на пользователей сайта, но это получится только после авторизации.
Запрос страницы /users
А вот при запросе дампа нам отвечают, что мы не указали нужный параметр. То есть никакой авторизации не требуется.
Запрос страницы /management/dump
Так как нам интересна информация о пользователях, в качестве значения будем использовать users
. Но имя параметра нужно будет перебрать. Раз ответ пришел в формате JSON, передавать параметр мы будем так же. Для перебора я использовал Burp Intruder.
Burp Intruder — вкладка Positions
Результат перебора имени параметра
И находим название нужного параметра — download
. Ответ очень большой, поэтому сохраняем в файл и выводим в jq
.
Полученные данные
Нам доступны хеши паролей пользователей, поэтому для перебора попробуем узнать алгоритм с помощью hashid
.
Распознавание алгоритма хеширования
В качестве алгоритма шифрования, скорее всего, используется SHA-256. Давай выберем из списка все пары логинов и паролей.
cat users.dump| jq | grep 'email"|password' | cut -d '"' -f 4 > users.txt
Затем можно все последовательности .htbn
заменить двоеточием, тогда мы получим строки типа логин:пароль
. Отправляем список программе John the Ripper и указываем формат хеша. Спустя несколько секунд получим пароль.
john -form=dynamic='sha256($p)' --wordlist=~/tmp/wordlists/Passwords/rockyou.txt creds.txt
Результат перебора хешей
С полученными учетными данными мы можем авторизоваться на сайте.
Главная страница авторизованного пользователя
Мы можем перейти к сниппетам и создать свой. Так у нас будет возможность менять и удалять его.
Доступные сниппеты
При изменении сниппета передаются его параметры и тип: публичный или нет. Тогда я решил перебрать идентификатор сниппета, чтобы узнать, как работает контроль доступа к изменению параметров. И у нас получилось сделать публичным чей‑то сниппет.
Запрос на публикацию сниппета
Доступные сниппеты
Просмотрим вытащенный нами сниппет и найдем там HTTP-заголовок базовой аутентификации. Декодируем строку Base64 и получаем учетные данные для пользователя jean
.
Содержимое сниппета
Учетные данные пользователя
С полученными учетными данными можем авторизоваться в Gitea. Там нам доступен один проект.
Репозиторий extension
Сам проект — это плагин браузера для быстрого оповещения об ошибках. В настройках проекта находим соавтора, это нам пригодится.
Соавторы проекта
Просматривая историю изменений, обращаем внимание, что при публикации сообщения его текст должен фильтроваться.
Старый фильтр сообщений
Находим подобный фрагмент в коде текущего параметра.
Новый фильтр сообщений
Из сообщения удаляется любая последовательность символов, если она заключена в треугольные скобки, то есть похожа на HTML-тег. Также если присутствует последовательность символов, приведенных в переменной filter
. Но в самом регулярном выражении ошибка, так удалится только первое вхождение последовательности в тегах. Проверим это, для чего запустим веб‑сервер и отправим следующую строку:
qwe<qwe><img src="http://10.10.14.7/test">
Отправка сообщения
Опубликованное сообщение
Логи веб‑сервера
В логах веб‑сервера увидим подключение, значит, можно проэксплуатировать хранимую XSS.
Источник: xakep.ru