Найти в Дзене

HTB Unicode. Прохождение машины на Hack The Box

Всем привет! Сегодня мы разберём прохождение 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 ссы
Оглавление

Прохождение Medium машины Unicode на Hack The Box (HTB)
Прохождение Medium машины Unicode на Hack The Box (HTB)

Всем привет! Сегодня мы разберём прохождение 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):

-2

Судя по выводу перед нами, машина на Ubuntu 20.04.

HTTP TCP 80

Заходим на сайт. Сайт посвящен компании Hackmedia:

-3

На сайте есть ссылки на формы login и register:

-4
-5

Кнопка Google about us ведет на редирект /redirect/?url=google.com.

Зарегистрируемся и войдем. После входа оказываемся на странице dashboard:

-6

Страница создана на Flask, о чем говорит “Powered by Flask” в самом низу.

Находим 2 ссылки – /pricing и /upload.

-7
-8

На странице Pricing не находим ничего интересного.

Страница Upload содержит форму загрузки файла. Разрешено загружать только PDF файлы.

Программное обеспечение

Используя расширение для браузера Wappalyzer узнаем, что Web Server сайта – Nginx 1.18.0.

-9

Перебор директорий

Для перебора директорий сайта будем использовать 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
-10

Ничего интересного на найденных страницах не обнаруживаем. Значит нужно смотреть сайт.

Становимся администратором hackmedia.htb

Аутентификация

Исследуем процесс аутентификации на сайте. После того как пользователь ввел учетные данные на странице /login происходит перенаправление на страницу /dashboard и устанавливается кука auth:

-11

Кука auth напоминает JWT токен. С помощью сервиса jwt.io проверим это:

-12

Добавим hackmedia.htb из jku в /etc/hosts:

10.10.11.126 hackmedia.htb

Подмена JKU

JWKS

Значение jku http://hackmedia.htb/static/jwks.json. Это простой JSON объект с алгоритмом и двумя элементами n и e, которые создают публичный ключ RSA:

-13

Таким образом, если подменить ссылку на наш сервер и создать собственный 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
-14

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
-15

Скачаем jwks.json и изменим значение n:

-16

Подмена auth

Разместим сгенерированный jwks.json на нашем сервере, подменим jku и разместим в качестве публичного и приватного ключей – ранее сгенерированные ключи unicode.pem:

-17

Установим сгенерированный токен в качестве куки auth и выполним вход на страницу:

-18

Ошибка говорит, что jku не прошел валидацию.

Используем Open Redirect

Вспоминаем, что на главной странице hackmedia.htb мы видели Open Redirect на google. Можем воспользоваться им для получения валидной ссылки в jku:

http://hackmedia.htb/static/../redirect/?url= 10.10.14.64/jwks.json

Заново получим JWT с измененным JKU:

-19

Admin dashboard

Для получения доступа к админ панели изменим user на admin в JWT:

-20

Заменим куку auth и получим доступ к dashboard администратора:

-21

Получение доступа за Code

LFI

Admin dashboard

Dashboard содержит разные данные и ссылки на отчеты. Отчет Current mount ведет на страницу /display/?page=mountly.pdf, а отчет Last quarter – на страницу /display/?page=quaterly.pdf.

-22

Directory Traversal

Выполним попытку прочитать файл /etc/passwd:
http://hackmedia.htb/display/?page=/etc/passwd

В ответ получим страницу 404 /filenotfound с текстом, что на сайте присутствует много разных фильтров:

-23

Необходимо обойти фильтрацию.

Unicode Path Traversal

Обойти фильтры можно заменив символы ‘.’ (или ‘/’) на их Unicode аналоги.

Например, можно использовать символ ‘‥‘(U+2025) или ‘︰’ (U+FE30). После нормализации эти символы преобразуются в две точки, что позволит нам выполнять path traversal.

После нескольких попыток получим /etc/passwd:

-24

Проникновение в систему

Код приложения

Поскольку мы знаем, что web сервер использует flask, то можно догадаться, что в папке приложения будет основной файл app.py. Получим содержимое этого файла:

-25

Изучая код обнаружим, что существует база данных и данные для подключения находятся в файле db.yaml:

-26

user.txt

/etc/passwd содержал пользователя code, поэтому воспользуемся учетными данными из db.yaml и подключимся по SSH:

-27

Получаем root

Разведка

Выполним команду:

sudo -l
-28

Обнаружим, что мы можем выполнять /usr/bin/treport как root.

Запустим treport от sudo:

-29

oot.txt

Попробуем прочитать флаг с помощью опции Read Threat Report:

-30

получаем ошибку NOT ALLOWED.

Попробуем прочитать флаг с помощью опции Download A Threat Report:

-31

получаем ошибку INVALID URL.

Заметим, что для отправки запросов на скачивание отчетов используется curl. Выполним обход фильтра с помощью использования File:// и получим флаг root.txt:

-32

Подписывайтесь на наш паблик ВКонтактеTelegramЯндекс.Дзен, канал на YouTube и RuTube чтобы не пропустить новые Прохождения машин на Hack The Box!

#Hack the box #hackthebox #HTB #hacker #hacking #хакер #хакерство #хакеры #secware #кибербезопасность