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 а вот мощная тулзочка для автоматической эксплуатации.