Всем привет! Сегодня мы разберём прохождение Medium машины Unicode на Hack The Box (HTB).
Из этого прохождения вы узнаете, как использовать Unicode символы для обхода WAF. Также разберем как можно сгенерировать JWT, который будет использовать open redirect, необходимый для аутентификации за администратора сайта.
Разведка
Nmap
Запустим сканирование машины и посмотрим открытые порты и сервисы на них. Сканировать будем все TCP порты с параметрами -sCV (для использования стандартных скриптов и обнаружения версий сервисов):
nmap -sCV -p- 10.10.11.126
Nmap нашел 2 открытых TCP порта – SSH (22) и HTTP (80):
Судя по выводу перед нами, машина на Ubuntu 20.04.
HTTP TCP 80
Заходим на сайт. Сайт посвящен компании Hackmedia:
На сайте есть ссылки на формы login и register:
Кнопка Google about us ведет на редирект /redirect/?url=google.com.
Зарегистрируемся и войдем. После входа оказываемся на странице dashboard:
Страница создана на Flask, о чем говорит “Powered by Flask” в самом низу.
Находим 2 ссылки – /pricing и /upload.
На странице Pricing не находим ничего интересного.
Страница Upload содержит форму загрузки файла. Разрешено загружать только PDF файлы.
Программное обеспечение
Используя расширение для браузера Wappalyzer узнаем, что Web Server сайта – Nginx 1.18.0.
Перебор директорий
Для перебора директорий сайта будем использовать gobuster и исключим из вывода ответы с кодом 503 и 200 (т.к. ответ возвращается для несуществующих страниц):
gobuster dir -u http://10.10.11.126 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -b 503,200
Ничего интересного на найденных страницах не обнаруживаем. Значит нужно смотреть сайт.
Становимся администратором hackmedia.htb
Аутентификация
Исследуем процесс аутентификации на сайте. После того как пользователь ввел учетные данные на странице /login происходит перенаправление на страницу /dashboard и устанавливается кука auth:
Кука auth напоминает JWT токен. С помощью сервиса jwt.io проверим это:
Добавим hackmedia.htb из jku в /etc/hosts:
10.10.11.126 hackmedia.htb
Подмена JKU
JWKS
Значение jku http://hackmedia.htb/static/jwks.json. Это простой JSON объект с алгоритмом и двумя элементами n и e, которые создают публичный ключ RSA:
Таким образом, если подменить ссылку на наш сервер и создать собственный jwks с собственными значениями n и e, то можно получить возможность генерировать токены аутентификации.
Собственный JWKS.json
Для генерации пары ключей воспользуемся командами:
openssl genrsa -out unicode.pem
openssl rsa -in unicode.pem -pubout -outform PEM -out unicode_pub.pem
Для генерации n и e используем команду:
openssl rsa -in unicode_pub.pem -pubin -text -noout
Modulus – n, а Exponent – e (AQAB).
Для получения Modulus в виде строки воспользуемся командой:
openssl rsa -in unicode_pub.pem -pubin -noout -modulus
Скопируем modulus в файл modulus. Затем сформируем base64 строку для получения n:
сat modulus | xxd -r -p | base64 -w0
Скачаем jwks.json и изменим значение n:
Подмена auth
Разместим сгенерированный jwks.json на нашем сервере, подменим jku и разместим в качестве публичного и приватного ключей – ранее сгенерированные ключи unicode.pem:
Установим сгенерированный токен в качестве куки auth и выполним вход на страницу:
Ошибка говорит, что jku не прошел валидацию.
Используем Open Redirect
Вспоминаем, что на главной странице hackmedia.htb мы видели Open Redirect на google. Можем воспользоваться им для получения валидной ссылки в jku:
http://hackmedia.htb/static/../redirect/?url= 10.10.14.64/jwks.json
Заново получим JWT с измененным JKU:
Admin dashboard
Для получения доступа к админ панели изменим user на admin в JWT:
Заменим куку auth и получим доступ к dashboard администратора:
Получение доступа за Code
LFI
Admin dashboard
Dashboard содержит разные данные и ссылки на отчеты. Отчет Current mount ведет на страницу /display/?page=mountly.pdf, а отчет Last quarter – на страницу /display/?page=quaterly.pdf.
Directory Traversal
Выполним попытку прочитать файл /etc/passwd:
http://hackmedia.htb/display/?page=/etc/passwd
В ответ получим страницу 404 /filenotfound с текстом, что на сайте присутствует много разных фильтров:
Необходимо обойти фильтрацию.
Unicode Path Traversal
Обойти фильтры можно заменив символы ‘.’ (или ‘/’) на их Unicode аналоги.
Например, можно использовать символ ‘‥‘(U+2025) или ‘︰’ (U+FE30). После нормализации эти символы преобразуются в две точки, что позволит нам выполнять path traversal.
После нескольких попыток получим /etc/passwd:
Проникновение в систему
Код приложения
Поскольку мы знаем, что web сервер использует flask, то можно догадаться, что в папке приложения будет основной файл app.py. Получим содержимое этого файла:
Изучая код обнаружим, что существует база данных и данные для подключения находятся в файле db.yaml:
user.txt
/etc/passwd содержал пользователя code, поэтому воспользуемся учетными данными из db.yaml и подключимся по SSH:
Получаем root
Разведка
Выполним команду:
sudo -l
Обнаружим, что мы можем выполнять /usr/bin/treport как root.
Запустим treport от sudo:
oot.txt
Попробуем прочитать флаг с помощью опции Read Threat Report:
получаем ошибку NOT ALLOWED.
Попробуем прочитать флаг с помощью опции Download A Threat Report:
получаем ошибку INVALID URL.
Заметим, что для отправки запросов на скачивание отчетов используется curl. Выполним обход фильтра с помощью использования File:// и получим флаг root.txt:
Подписывайтесь на наш паблик ВКонтакте, Telegram, Яндекс.Дзен, канал на YouTube и RuTube чтобы не пропустить новые Прохождения машин на Hack The Box!
#Hack the box #hackthebox #HTB #hacker #hacking #хакер #хакерство #хакеры #secware #кибербезопасность