Содержание статьи
Наша цель — захват машины Forgot с площадки Hack The Box. Уровень сложности — средний.
warning
Подключаться к машинам с HTB рекомендуется только через VPN. Не делай этого с компьютеров, где есть важные для тебя данные, так как ты окажешься в общей сети с другими участниками.
Разведка
Сканирование портов
Добавляем IP-адрес машины в /
:
10.10.11.188 forgot.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
).
Nmap нашел нам два открытых порта: 22 — служба OpenSSH 8.2p1 и 80 — веб‑сервер Werkzeug 2.1.2, запущенный из Python 3. Переходим на сайт, где нас сразу встречает форма авторизации.
С помощью Burp Suite построим карту сайта, для чего в контекстном меню Burp History выбираем Engagement tools → Discover content.
Ничего нового и полезного для продвижения не находим. Просмотрим комментарии в исходном коде страниц, может быть, получится узнать что‑то интересное. Чтобы удобно отобразить все комментарии с сайта, в Burp переходим к контекстному меню и выбираем Engagement tools → Find comments.
В итоге находим пользователя. Попробуем запросить смену пароля для него.
Так как была отправлена ссылка для сброса пароля, пользователь реален.
Точка входа
По HTTP-заголовкам ответа определяем, что на сервере работает Varnish. Это ускоритель HTTP, разработанный для динамических веб‑сайтов с большим количеством контента и API. Пробуем в HTTP-заголовке Host
запроса указать свой адрес, активируем листенер и ловим входящий запрос.
Во входящем запросе присутствует токен для сброса пароля. Идем на указанную страницу, где нам сразу предлагают установить новый пароль.
Меняем пароль, авторизуемся и осматриваемся на сайте.
Нам доступны страницы Tickets и Escalate. На первой мы видим проблемы и их статус, на второй есть форма связи с администратором. Отметим для себя проблему с учетными данными для доступа по SSH.
Есть еще страница, но ссылка на нее неактивна. Хоть ее и можно найти в исходном коде страницы, доступ все равно запрещен. Нужны права администратора.
Точка опоры
У нас есть связь с администратором через форму заявок. Я потестировал ее на наличие уязвимостей XSS, но ничего не обнаружил. А вот благодаря карте сайта можно найти страницы, а вернее каталог, где можно отравить кеш. Так, на всех страницах, кроме тех, что в каталоге /
, счетчик все время обнуляется. А вот в каталоге /
он растет до значения 240 (четыре минуты), после чего уже обнуляется.
Кеширование заключается в сохранении копии ресурса, чтобы вернуть ее в ответ на дальнейшие запросы. Запрос на ресурс, уже имеющийся в веб‑кеше, перехватывается, и вместо того, чтобы обращаться к серверу, загружается копия из кеша. Таким образом снижается нагрузка на сервер, которому не приходится самому отвечать всем клиентам, и повышается производительность.
www
Подробнее о механизмах кеширования сайтов ты можешь прочитать, например, в статье «Веб‑кеширование на примере покупки молока в магазине» на «Хабрахабре».
Отравление веб‑кеша — это атака, при которой атакующий использует поведение веб‑сервера и кеша таким образом, чтобы в кеше другим пользователям доставлялся опасный HTTP-ответ. То есть без взаимодействия с другими пользователями уязвимость проэксплуатировать не получится.
Первым делом стоит проверить, выполняется ли кеширование для несуществующих страниц.
Счетчик (заголовок Age
) растет, значит, для несуществующих страниц в каталоге /
происходит кеширование. Теперь нам нужно найти ключ кеша — какое‑то значение в HTTP-запросе, при изменении которого счетчик кеша будет обнуляться. В данном случае ключом оказалось значение заголовка Host
.
При этом обрати внимание, что в первом запросе кешированный ответ содержит наш куки!
Продвижение
Собираем все воедино. Мы можем отправить админу сообщение, содержащее ссылку, и он на нее перейдет. При этом есть каталог, кеширующий ответ сервера, причем ответ может вернуть куки пользователя. Поэтому отправим администратору ссылку на любой несуществующий файл в каталоге /
, спустя время обратимся к нему же и проверим заголовок Set-Cookie
.
Продолжение доступно только участникам
Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
Вариант 2. Открой один материал
Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.
Я уже участник «Xakep.ru»