Paladin
19.11.2023, 20:51
https://forum.antichat.xyz/attachments/4931363/1700410180365.png
Привет уважаемые форумчане!
Перед тем, как мы начнем рассматривать очень интересную и сложную тему, мне бы хотелось сказать несколько слов. Меня можно поздравить, я перестал быть куратором курса 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.
https://forum.antichat.xyz/attachments/4931363/1700410390441.png
Изучим запрос к этому серверу. Запускаем Burp Suite и обновляем страницу, после чего смотрим перехваченный запрос.
https://forum.antichat.xyz/attachments/4931363/1700410457679.png
Не видим ничего такого, что напоминало бы нам формат XML. Ничего удивительного, XML разметка отправляется методом POST. Меняем метод запроса, для чего загоняем его в Repiter и в меню выбираем Changerequestmethod
https://forum.antichat.xyz/attachments/4931363/1700410548724.png
Теперь наш запрос имеет нужный метод, отправляем его
https://forum.antichat.xyz/attachments/4931363/1700410680716.png
Упс! Приложение начинает наглеть и требует нужный тег. Ну и как нам его найти? Тот, кто обучается на курсе может посмотреть видео к уроку и написать несложный скрипт на Python, который сгенерирует нужную нагрузку, благодаря которой мы вычислим нужный тег. Но мы сегодня рассмотрим самый простой способ – фаззинг.
Отправляем наш запрос в Intruder. И добавляем в наш запрос следующую разметку:
XXE
В качестве типа атаки выбираем Pitchfork, а в качестве словарей наш любимый directory-list-2.3-medium. Запускаем атаку и видим чудо. Надпись XXE прописалась в теге title. Значит через него и будем выводить нужную нам информацию.
https://forum.antichat.xyz/attachments/4931363/1700410775404.pngЧтение файлов
Для начала попробуем вывести один из системных файлов, например, /etc/passwd. Для этого создадим сущность title и делаем так, чтобы она вернула нам значение файла:
]>
&title;
https://forum.antichat.xyz/attachments/4931363/1700410857367.png
Класс!
Теперь хочу обратить ваше внимание на использование враппера file://. В принципе, в данном случае, мы могли его вообще не использовать и результат бы не поменялся:
https://forum.antichat.xyz/attachments/4931363/1700410942865.png
В некоторых случаях он необходим. Не нужно забывать, что в этом случае нам нужно задать абсолютный путь. Без враппера файл будет открываться из текущей директории.
Без враппера
https://forum.antichat.xyz/attachments/4931363/1700410991664.png
С враппером, без указания пути (Ничего нет)
https://forum.antichat.xyz/attachments/4931363/1700411029188.png
С враппером, с указанием пути
https://forum.antichat.xyz/attachments/4931363/1700411089543.pngЧтение файлов PHP
Если у нас есть нужда прочитать файл php, то здесь придется действовать несколько по-другому. Так как в коде php будет много всяких пробелов, тегов, переносов строк и прочей лабуды, мы не сможет прочитать его так, как рассмотрели выше. Например, файл index.php.
https://forum.antichat.xyz/attachments/4931363/1700411278143.png
Поэтому воспользуемся враппером php://
php://filter/read=convert.base64-encode/resource=index.php
Здесь мы конвертируем содержимое файла в base64 и потом спокойно его раскодируем:
https://forum.antichat.xyz/attachments/4931363/1700412088068.png
https://forum.antichat.xyz/attachments/4931363/1700412179527.pngRCE
Выполнение удаленных команд осуществляется при помощи враппера expect://
Для демонстрации этого примера воспользуемся одной из задач с платформы античат .
Как показано на скрине, команда id успешно выполнилась.
https://forum.antichat.xyz/attachments/4931363/1700412268124.pngOut-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-атака сработала:
https://forum.antichat.xyz/attachments/4931363/1700412447768.png
Запросы прошли, значит XXE сработала
Пробуем прочитать файл. Создаем файл xxe.dtd куда прописываем следующий код
">
%eval;
%getdata;
А в запросе такую нагрузку
%xxe;]>
https://forum.antichat.xyz/attachments/4931363/1700412580478.pngКак видим, файл мы прочитали.
Ну вот в общем-то и все. До новых встреч!!!
Привет уважаемые форумчане!
Перед тем, как мы начнем рассматривать очень интересную и сложную тему, мне бы хотелось сказать несколько слов. Меня можно поздравить, я перестал быть куратором курса 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.
https://forum.antichat.xyz/attachments/4931363/1700410390441.png
Изучим запрос к этому серверу. Запускаем Burp Suite и обновляем страницу, после чего смотрим перехваченный запрос.
https://forum.antichat.xyz/attachments/4931363/1700410457679.png
Не видим ничего такого, что напоминало бы нам формат XML. Ничего удивительного, XML разметка отправляется методом POST. Меняем метод запроса, для чего загоняем его в Repiter и в меню выбираем Changerequestmethod
https://forum.antichat.xyz/attachments/4931363/1700410548724.png
Теперь наш запрос имеет нужный метод, отправляем его
https://forum.antichat.xyz/attachments/4931363/1700410680716.png
Упс! Приложение начинает наглеть и требует нужный тег. Ну и как нам его найти? Тот, кто обучается на курсе может посмотреть видео к уроку и написать несложный скрипт на Python, который сгенерирует нужную нагрузку, благодаря которой мы вычислим нужный тег. Но мы сегодня рассмотрим самый простой способ – фаззинг.
Отправляем наш запрос в Intruder. И добавляем в наш запрос следующую разметку:
XXE
В качестве типа атаки выбираем Pitchfork, а в качестве словарей наш любимый directory-list-2.3-medium. Запускаем атаку и видим чудо. Надпись XXE прописалась в теге title. Значит через него и будем выводить нужную нам информацию.
https://forum.antichat.xyz/attachments/4931363/1700410775404.pngЧтение файлов
Для начала попробуем вывести один из системных файлов, например, /etc/passwd. Для этого создадим сущность title и делаем так, чтобы она вернула нам значение файла:
]>
&title;
https://forum.antichat.xyz/attachments/4931363/1700410857367.png
Класс!
Теперь хочу обратить ваше внимание на использование враппера file://. В принципе, в данном случае, мы могли его вообще не использовать и результат бы не поменялся:
https://forum.antichat.xyz/attachments/4931363/1700410942865.png
В некоторых случаях он необходим. Не нужно забывать, что в этом случае нам нужно задать абсолютный путь. Без враппера файл будет открываться из текущей директории.
Без враппера
https://forum.antichat.xyz/attachments/4931363/1700410991664.png
С враппером, без указания пути (Ничего нет)
https://forum.antichat.xyz/attachments/4931363/1700411029188.png
С враппером, с указанием пути
https://forum.antichat.xyz/attachments/4931363/1700411089543.pngЧтение файлов PHP
Если у нас есть нужда прочитать файл php, то здесь придется действовать несколько по-другому. Так как в коде php будет много всяких пробелов, тегов, переносов строк и прочей лабуды, мы не сможет прочитать его так, как рассмотрели выше. Например, файл index.php.
https://forum.antichat.xyz/attachments/4931363/1700411278143.png
Поэтому воспользуемся враппером php://
php://filter/read=convert.base64-encode/resource=index.php
Здесь мы конвертируем содержимое файла в base64 и потом спокойно его раскодируем:
https://forum.antichat.xyz/attachments/4931363/1700412088068.png
https://forum.antichat.xyz/attachments/4931363/1700412179527.pngRCE
Выполнение удаленных команд осуществляется при помощи враппера expect://
Для демонстрации этого примера воспользуемся одной из задач с платформы античат .
Как показано на скрине, команда id успешно выполнилась.
https://forum.antichat.xyz/attachments/4931363/1700412268124.pngOut-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-атака сработала:
https://forum.antichat.xyz/attachments/4931363/1700412447768.png
Запросы прошли, значит XXE сработала
Пробуем прочитать файл. Создаем файл xxe.dtd куда прописываем следующий код
">
%eval;
%getdata;
А в запросе такую нагрузку
%xxe;]>
https://forum.antichat.xyz/attachments/4931363/1700412580478.pngКак видим, файл мы прочитали.
Ну вот в общем-то и все. До новых встреч!!!