XXE

XXE

@black_boards

Сегодня будет разговор об XXE - атаках, что это, почему, зачем, а главное посмотрим нагрузки и пример в .Net приложениях.

Идея уязвимости в том, что мы используем внешние сущности при парсинге xml файлов, рассмотрим сразу пример.

Создаем файл index.php у себя на сервере. (код частично взят с root-me.org)

<? PHP


Вот так выглядит наша форма

А теперь взглянем на такой XML файл, вроде бы ничего необычного.

<? xml version = "1.0" encoding = "UTF-8"?>


Загрузите его в отдельный файл на сервер и скормим по текстовому полю.

В результате получается сообщение, что наш xml файл валидный, то есть это означает, что структура тегов нашего xml совпадает с ожидаемой, а так же видит, что вывелся загловок RSS Tutorial, то есть у нас есть вывод.


Теперь изменим файл и добавим DTD сущность

<! DOCTYPE rss [


Получаем в результате запроса следующего варианта.

Но не всегда парсеры выводят содержимое на страницу. В таком случае нам поможет техника Out-Of-Band. Это техника работает в три этапа.


Этап первый - создаем нагрузку.

XML:

<! ENTITY% payl SYSTEM "php: //filter/read=convert.base64-encode/resource=CoDEbY.php">


Видим, что на этот раз файл состоит из двух сущностей, одна которая создает Полезная нагрузка, вторая, которая отсылает его на внешний сервис.


Этап второй - создаем принимающий скрипт

<? PHP



Этап третий - подгружаем в наш скрипт ссылку на на полезную нагрузку с этапа 1 и читаем файл flag.txt

В результате видим закодированное в base64 - сообщение, которое после расшифровки означает:

Векторы XXE

1) Читать локальные файлы и ресурсы с помощью врапперов php: //, file: //

2) Проводить DOS атаки

3) Получить RCE


Если с полезной нагрузкой DDOS всё понятно (приведу их ниже)

<! DOCTYPE вход [<! ENTITY pay SYSTEM "файл: /// dev / random">]> & pay; для linux 

<! ENTITY dos SYSTEM "c: \ pagefile.sys"> для окон


то посмотрим на последний вариант.

Здесь, для получения RCE, используется только обертка.

Пример:

<? xml version = "1.0" encoding = "utf-8"?>



Результат

На этом закончим с веб-сайтом.

Для этого я написал небольшое приложение.

        private void button1_Click (отправитель объекта, EventArgs e)


После выбора кнопки программа для выбора файла xml, выберем файл с содержимым.

<? xml version = "1.0"?>


В результате получаем профит, текст именно в этом файле.

На этом всё


https://github.com/enjoiz/XXEinjector  а вот мощная тулзочка для автоматической эксплуатации.


Report Page