Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
В этом райтапе я покажу технику отравления веб‑кеша, которая позволяет получить куки администратора сайта. Доступ к Varnish Cache мы получим через сброс пароля, а для повышения привилегий проэксплуатируем уязвимость в модуле TensorFlow для Python.
Наша цель — захват машины Forgot с площадки Hack The Box. Уровень сложности — средний.
warning
Подключаться к машинам с HTB рекомендуется только через VPN. Не делай этого с компьютеров, где есть важные для тебя данные, так как ты окажешься в общей сети с другими участниками.
Добавляем IP-адрес машины в /etc/hosts
:
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.
Страница Tickets
Страница Escalate
Есть еще страница, но ссылка на нее неактивна. Хоть ее и можно найти в исходном коде страницы, доступ все равно запрещен. Нужны права администратора.
Поиск ссылки на административную страницу
У нас есть связь с администратором через форму заявок. Я потестировал ее на наличие уязвимостей XSS, но ничего не обнаружил. А вот благодаря карте сайта можно найти страницы, а вернее каталог, где можно отравить кеш. Так, на всех страницах, кроме тех, что в каталоге /static
, счетчик все время обнуляется. А вот в каталоге /static
он растет до значения 240 (четыре минуты), после чего уже обнуляется.
Ответ сервера на страницу login
Ответ сервера на страницу в каталоге static
Кеширование заключается в сохранении копии ресурса, чтобы вернуть ее в ответ на дальнейшие запросы. Запрос на ресурс, уже имеющийся в веб‑кеше, перехватывается, и вместо того, чтобы обращаться к серверу, загружается копия из кеша. Таким образом снижается нагрузка на сервер, которому не приходится самому обслуживать всех клиентов, и повышается производительность.
www
Подробнее о механизмах кеширования сайтов ты можешь прочитать, например, в статье «Веб‑кеширование на примере покупки молока в магазине» на «Хабрахабре».
Отравление веб‑кеша — это атака, при которой атакующий использует поведение веб‑сервера и кеша таким образом, чтобы в кеше другим пользователям доставлялся опасный HTTP-ответ. То есть без взаимодействия с другими пользователями уязвимость проэксплуатировать не получится.
Первым делом стоит проверить, выполняется ли кеширование для несуществующих страниц.
Счетчик (заголовок Age
) растет, значит, для несуществующих страниц в каталоге /static
происходит кеширование. Теперь нам нужно найти ключ кеша — какое‑то значение в HTTP-запросе, при изменении которого счетчик кеша будет обнуляться. В данном случае ключом оказалось значение заголовка Host
.
При этом обрати внимание, что в первом запросе кешированный ответ содержит наш куки!
Собираем все воедино. Мы можем отправить админу сообщение, содержащее ссылку, и он на нее перейдет. При этом есть каталог, кеширующий ответ сервера, причем ответ может вернуть куки пользователя. Поэтому отправим администратору ссылку на любой несуществующий файл в каталоге /static
, спустя время обратимся к нему же и проверим заголовок Set-Cookie
.
Отправка сообщения администратору
Запрос на несуществующую страницу
Источник: xakep.ru