HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ ЧАТ
loading...
Скрыть
Вернуться   ANTICHAT > БЕЗОПАСНОСТЬ И УЯЗВИМОСТИ > Уязвимости > Веб-уязвимости
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #1  
Старый 19.11.2023, 20:51
Paladin
Новичок
Регистрация: 28.10.2015
Сообщений: 1
С нами: 5549366

Репутация: 0
По умолчанию



Привет уважаемые форумчане!
Перед тем, как мы начнем рассматривать очень интересную и сложную тему, мне бы хотелось сказать несколько слов. Меня можно поздравить, я перестал быть куратором курса WAPT. Буду теперь помогать студентам посредством написания статей и других бесполезных опусов, которые, надеюсь помогут им в освоении материала курса. В ходе учебы кураторы периодически снабжают учеников дополнительной литературой или ссылками на полезные источники. Часто они разрозненные, противоречивые и что самое ужасное - на басурманском языке, где ничего не понятно. Вот я и решил все, что написано на этих ресурсах испытывать на практике на нашей лаборатории и делится этими исследованиями. Вполне возможно, я собираюсь заниматься х@#%&й, но даже если и так, это в любой момент можно бросить и просто отдыхать. А вдруг кому-то пригодится! Теперь перейду непосредственно к теме статьи.
XXE
Когда я проходил курс WAPT, эта тема оставила неизгладимый отпечаток на моем сознании и стоило приличного количества волос, выдранных из ж0#@, ну в общем вы поняли. Эта тема стала одной из тех, которые вызвали наибольшее количество боли и уничтожила большое количество нервных клеток. Попробуем сегодня вместе на простом примере разобраться с этим типом уязвимости.

XML External Entity (XXE) – это тип атаки, использующий уязвимости в анализаторах XML. При атаке XXE можно внедрить специально созданный XML-контент в приложение, которое его обрабатывает. XXE позволяет определять объекты на основе содержимого URL-адреса или пути к файлу. Когда сервер считывает внедренную нагрузку XML, он анализирует внешний объект, объединяет его с окончательным документом и возвращает его пользователю с конфиденциальными данными внутри.

Как правило к XXE уязвимы приложения без надлежащей валидации входных данных, а также без отключенной обработки внешних сущностей в синтаксическом анализаторе XML. Однако многие XML парсеры уже имеют защиту от XXE атак.
ТИПЫ XXE
XXE атаки делятся на типы по принципу того, какой способ используется для доставки полезной нагрузки и какой импакт это несет атака при тестировании на проникновение. Существует 6 типов XXE атак:

1. Извлечение файлов – самое банальное применение, при котором мы можем извлекать файлы с целевого сервера

2. SSRF-Атаки – использование XXE-атак для выполнения атак типа SSRF(Server-Side Request Forgery)

3. Blind XXE – атака, при которой атакующий не получает ответ от сервера, с помощью которого можно понять уязвимо ли приложение к XXE-атакам

4. Инъекция через File Upload – атака, при которой атакующий загружает файл, содержащий XML компоненты

5. Billion Laughs – атака типа denial-of-service (DoS)

6. XInclude – атака с внедрением полезной нагрузки в оператор XInclude

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

Перейдем к практике. Мы имеем сайт, на котором написано, что он ждет XML.


Изучим запрос к этому серверу. Запускаем Burp Suite и обновляем страницу, после чего смотрим перехваченный запрос.

Не видим ничего такого, что напоминало бы нам формат XML. Ничего удивительного, XML разметка отправляется методом POST. Меняем метод запроса, для чего загоняем его в Repiter и в меню выбираем Changerequestmethod


Теперь наш запрос имеет нужный метод, отправляем его


Упс! Приложение начинает наглеть и требует нужный тег. Ну и как нам его найти? Тот, кто обучается на курсе может посмотреть видео к уроку и написать несложный скрипт на Python, который сгенерирует нужную нагрузку, благодаря которой мы вычислим нужный тег. Но мы сегодня рассмотрим самый простой способ – фаззинг.

Отправляем наш запрос в Intruder. И добавляем в наш запрос следующую разметку:



XXE

В качестве типа атаки выбираем Pitchfork, а в качестве словарей наш любимый directory-list-2.3-medium. Запускаем атаку и видим чудо. Надпись XXE прописалась в теге title. Значит через него и будем выводить нужную нам информацию.
Чтение файлов
Для начала попробуем вывести один из системных файлов, например, /etc/passwd. Для этого создадим сущность title и делаем так, чтобы она вернула нам значение файла:

]>

&title;

Класс!

Теперь хочу обратить ваше внимание на использование враппера file://. В принципе, в данном случае, мы могли его вообще не использовать и результат бы не поменялся:

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

Без враппера

С враппером, без указания пути (Ничего нет)

С враппером, с указанием пути
Чтение файлов PHP
Если у нас есть нужда прочитать файл php, то здесь придется действовать несколько по-другому. Так как в коде php будет много всяких пробелов, тегов, переносов строк и прочей лабуды, мы не сможет прочитать его так, как рассмотрели выше. Например, файл index.php.

Поэтому воспользуемся враппером php://

php://filter/read=convert.base64-encode/resource=index.php

Здесь мы конвертируем содержимое файла в base64 и потом спокойно его раскодируем:


RCE
Выполнение удаленных команд осуществляется при помощи враппера expect://

Для демонстрации этого примера воспользуемся одной из задач с платформы античат .

Как показано на скрине, команда id успешно выполнилась.
Out-of-band
Бывают ситуации, когда XXE есть, а ответа мы никакого не получаем. Допустим в нашем примере нет никакого ответа от сервера, но мы догадываемся, что уязвимость присутствует. Это может говорить о том, что присутствует слепая XXE.

Вот пример того, как Out-of-band можно использовать для обнаружения слепых XXE-атак:

Предположим, что атакующий отправляет XML-файл, содержащий ссылку внешней сущности на контролируемый им URL, следующим образом:



]>

&title;

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

Если XXE-атака удалась, наш сервер получит отстук в виде GET запроса.

Для подобных целей нам не обязательно поднимать свой сервер, мы можем использовать Burp Collaborator, специальный инструмент Burp Suite, который нужен для отлова подобных слепых атак.

Сгенерируем ссылку в Burp Collaborator, вставим ее вместо http://xakep.com, у нас получится следующее:



]>

&title;

При отправке измененного запроса на сервер, тот начнет стучаться в наш Collaborator, в результате чего получаем отбивку о том, что запрос был, а значит XXE-атака сработала:

Запросы прошли, значит XXE сработала

Пробуем прочитать файл. Создаем файл xxe.dtd куда прописываем следующий код



">

%eval;

%getdata;

А в запросе такую нагрузку

%xxe;]>
Как видим, файл мы прочитали.
Ну вот в общем-то и все. До новых встреч!!!
 
Ответить с цитированием

  #2  
Старый 27.11.2023, 11:29
Cruel Lord
Новичок
Регистрация: 29.08.2023
Сообщений: 0
С нами: 1427397

Репутация: 0
По умолчанию

Так вот кто такой Paladin оказывается) Спасибо за статью
 
Ответить с цитированием

  #3  
Старый 19.12.2023, 05:16
boeng21
Новичок
Регистрация: 26.02.2021
Сообщений: 0
С нами: 2743052

Репутация: 0
По умолчанию

Объясните пожалуйста почему в некоторых случаях используются
foo, %, eval, &#x25?
 
Ответить с цитированием

  #4  
Старый 19.12.2023, 16:23
Paladin
Новичок
Регистрация: 28.10.2015
Сообщений: 1
С нами: 5549366

Репутация: 0
По умолчанию

Цитата:

boeng21 сказал(а):

Объясните пожалуйста почему в некоторых случаях используются
foo, %, eval, &#x25?

Блин, нереально сложный вопрос. Я серьезно. Гуглить пробовали? Вот небольшая ссылочка, которая поможет понять некоторые моменты - XML External Entity - Payloads All The Things

Вообще foo используют все программисты, это метапеременная. Здесь это имя типа документа.
% - объявление сущности
&#х25 - объявление сущности внутри другой сущности, по сути это % в URL кодировке
eval - это имя сущности
 
Ответить с цитированием

  #5  
Старый 19.12.2023, 23:03
aka 0vern0t
Новичок
Регистрация: 08.11.2023
Сообщений: 0
С нами: 1324740

Репутация: 0
По умолчанию

Хорошая статья
 
Ответить с цитированием
Ответ





Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT ™ © 2001- Antichat Kft.