Категория > Новости > HTB Unicode. Подделываем токен JWT и захватываем сервер через curl - «Новости»
HTB Unicode. Подделываем токен JWT и захватываем сервер через curl - «Новости»9-05-2022, 00:01. Автор: Борис |
Hack The Box.warningПодключаться к машинам с HTB рекомендуется только через VPN. Не делай этого с компьютеров, где есть важные для тебя данные, так как ты окажешься в общей сети с другими участниками. РазведкаСканирование портов Добавляем IP-адрес машины в
10.10.11.126 unicode.htb
И запускаем сканирование портов. Справка: сканирование портовСканирование портов — стандартный первый шаг при любой атаке. Он позволяет атакующему узнать, какие службы на хосте принимают соединение. На основе этой информации выбирается следующий шаг к получению точки входа. Наиболее известный инструмент для сканирования — это Nmap. Улучшить результаты его работы ты можешь при помощи следующего скрипта. ports=$(nmap -p- --min-rate=500 $1 | grep^[0-9] | cut -d '/' -f 1 | tr 'n' ',' | sed s/,$//)nmap -p$ports -A $1 Он действует в два этапа. На первом производится обычное быстрое сканирование, на втором — более тщательное сканирование, с использованием имеющихся скриптов (опция Результат работы скрипта Мы нашли два открытых порта:
Начнем с исследования сайта. Главная страница сайта На первой же странице видим открытый редирект. Это стоит отметить, так как редиректы можно использовать для обхода ряда фильтров и проверок. Также на сайте есть возможность зарегистрироваться и авторизоваться. Сделаем и то и другое. Работу желательно вести в Burp Proxy, чтобы у нас оставались все записи. Burp Proxy После логина видим редирект с присвоенным идентификатором сессии Главная страница сайта после авторизации Удалось найти форму загрузки файлов, но ее тестирование ни к чему не привело. Вернемся к идентификатору сессии — это JWT. JSON Web Token состоит из трех частей: заголовка (header), полезной нагрузки (payload) и подписи. Заголовок и полезная нагрузка представляют собой объекты JSON, при этом нагрузка может быть любой, это именно те критически важные данные, которые передаются приложению. Заголовок содержит определенные поля:
Третий элемент вычисляется на основании первых и зависит от выбранного алгоритма. Токены могут быть перекодированы в компактное представление: к заголовку и полезной нагрузке применяется алгоритм Base64-URL, после чего добавляется подпись и все три элемента разделяются точками. К примеру, можно с помощью Burp Inspector декодировать заголовок. Декодированный заголовок Попробуем разобрать эти данные. Для этого нам понадобится либо приложение jwt_tool, либо онлайновый ресурс jwt.io. Я буду использовать второй вариант. В заголовке у нас присутствует параметр Декодирование JWT Вернемся к параметру
10.10.11.126 hackmedia.htb unicode.htb
JSON Web Key Set (JWKS) — это набор открытых ключей, которые используются для проверки веб‑токена, выпущенного сервером авторизации и подписанного с использованием алгоритма подписи RS256. RS256 генерирует асимметричную подпись. Чтобы подписать JWT, должен использоваться закрытый ключ, а для проверки подписи нужен другой открытый ключ. Просмотреть структуру JWKS мы можем, обратившись к URL, указанному в jku, — Используемый JWKS Дальнейший вектор очевиден: необходимо изменить имя пользователя на Точка входаТеперь разберемся с подписью. В заголовке указан адрес JWKS, что дает нам следующую идею: сгенерировать свою пару ключей для подписи токена и соответствующий им JWKS. Мы поместим JWKS на своем веб‑сервере и затем в заголовке пропишем адрес, указывающий на этот сервер. Для генерирования ключей воспользуемся сайтом mkjwk.org. Выставим используемые параметры и получим ключи. Генерирование ключей Теперь вернемся к токену на jwt.io. Изменим имя пользователя на Создание JWT-токена Вставляем данный токен в Burp и после запроса получаем ответ об ошибке проверки Ответ от сервера При этом на наш веб‑сервер запрос не пришел. Значит, есть проверка того, какой сервер указан в
http://hackmedia.htb/static/../redirect/?url=10.10.14.73/jwks.json
Новые параметры JWTПри использовании нового JWT видим, что на наш сервер пришел запрос. Логи веб‑сервера Но доступ мы не получаем. Скорее всего, это связано с данными в файле JWKS. Просмотрим тогда файл с сервера и изменим в нем только параметр Панель администратора В итоге получаем административную панель. Точка опорыИзучая сайт, сразу натыкаемся на страницу, которая передает контент в параметре. Страница /display Попробуем указать там какой‑нибудь файл, например Сообщение, что обнаружена атака Тогда я применил словарь, в котором содержатся разные способы обхода фильтров для LFI, и получил отличную от остальных реакцию сервера. Содержимое файла /etc/hosts Перейти обратно к новости |