Категория > Новости > HTB Sink. Учимся прятать запросы HTTP и разбираемся с AWS Secrets Manager - «Новости»
HTB Sink. Учимся прятать запросы HTTP и разбираемся с AWS Secrets Manager - «Новости»16-10-2021, 00:01. Автор: Forman |
HackTheBox. Для этого нам понадобится проэксплуатировать уязвимость HTTP Request Smuggling, а получив точку опоры, будем разбираться с технологией AWS Secrets Manager. Скучать точно не придется!warningПодключаться к машинам с HTB рекомендуется только через VPN. Не делай этого с компьютеров, где есть важные для тебя данные, так как ты окажешься в общей сети с другими участниками. РазведкаСканирование портовАдрес машины — 10.10.10.225, добавляем его в Справка: сканирование портовСканирование портов — стандартный первый шаг при любой атаке. Он позволяет атакующему узнать, какие службы на хосте принимают соединение. На основе этой информации выбирается следующий шаг к получению точки входа. Наиболее известный инструмент для сканирования — это Nmap. Улучшить результаты его работы ты можешь при помощи следующего скрипта. ports=$(nmap -p- --min-rate=500 $1 | grep^[0-9] | cut -d '/' -f 1 | tr 'n' ',' | sed s/,$//)nmap -p$ports -A $1 Он действует в два этапа. На первом производится обычное быстрое сканирование, на втором — более тщательное сканирование, с использованием имеющихся скриптов (опция Результат работы скрипта В результате сканирования находим три открытых порта: 22 (служба SSH), 3000 (Gitea) и 5000 (Gunicorn). Начнем с Git. ![]() Мы видим какие‑то имена пользователей (запишем их, могут пригодиться!), но больше ничего интересного нет. Поэтому переходим к Gunicorn. На сайте, который он отдает, нужно регистрироваться. Сделаем это, авторизуемся и посмотрим, что нам станет доступно. Осмотр сайтов я рекомендую проводить через Burp, чтобы можно было просмотреть все отправляемые и получаемые данные. Так после отправки комментария в ответе замечаем заголовок Запрос в истории BurpОтвет сервера в истории Burp HAProxy — это серверное приложение, которое обеспечивает высокую доступность сайта и балансирует нагрузку TCP и HTTP-приложений между несколькими серверами. Дальше я попытался посканировать директории. У меня ничего не вышло, зато сообщение об ошибке помогло выяснить используемую версию HAProxy — 1.9.10. Ошибка, полученная при сканировании директорий Погуглив, узнаем, что эта версия уязвима к атаке HTTP Request Smuggling. Точка входаHTTP Request SmugglingHTTP Request Smuggling — это метод вмешательства в процесс обработки сайтом HTTP-запросов, полученных от одного или нескольких пользователей. Уязвимость часто имеет критический характер и позволяет злоумышленнику обойти меры безопасности, получить несанкционированный доступ к конфиденциальным данным и напрямую поставить под угрозу других пользователей приложения. Уязвимость возникает из‑за того, что спецификация HTTP предоставляет два разных способа указать, где заканчивается запрос: заголовок Заголовок
POST / HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Content-Length: 6
p=test
Заголовок
POST / HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Transfer-Encoding: chunked
a
param=test
0
Так мы можем использовать одновременно два заголовка. Первый сервер будет разделять запросы по первому заголовку, а второй — по второму, тем самым встраивая свои запросы и пропуская их дальше. Приступим к реализации. Отправим комментарий и перехватим запрос в Burp Proxy. Запрос на сервер Его стоит преобразовать следующим образом: укажем заголовок Измененный запрос После редиректа видим явно не тот комментарий, который отправляли. ![]() Дело в том, что внутренний сервер неправильно интерпретировал размер переданных данных из‑за путаницы в определяющих его HTTP заголовках, поэтому отобразил больше информации, чем должен был. Блок дополнительной информации, отображенной в комментарии, был взят из следующего запроса другого пользователя. В этом запросе передавались ![]() Так как это сервис хранения заметок, сразу просмотрим, что может хранить админ. Находим три заметки. Записи администратора Каждая из них содержит учетные данные. ![]() Точка опорыС найденными учетными данными получается авторизоваться в Git от имени Страница Git пользователя root Я начал просмотр с конца. Важные данные нашлись в коммите вот по этой ссылке:
http://sink.htb:3000/root/Log_Management/commit/e8d68917f2570f3695030d0ded25dc95738fb1baa
Исходный код logs.phpА в этом коммите нашелся приватный ключ:
http://sink.htb:3000/root/Key_Management/commit/b01a6b7ed372d154ed0bc43a342a5e1203d07b1e
Исходный код dev_keysНеобходимо проверить этот ключ. Для этого сформируем список пользователей и попытаемся подключиться по SSH. Для автоматизации я использовал Metasploit Framework.
msfconsole
use auxiliary/scanner/ssh/ssh_login_pub
set RHOSTS sink.htb
set USER_FILE users.txt
set KEY_PATH root.key
run
![]() ![]() В итоге находим пользователя, к учетке которого подходит ключ. Так мы получаем стабильную точку опоры в виде доступа по SSH. ![]() Перейти обратно к новости |