Bug Bounty, Bug Hunting, XML, XML External Entity (XXE)

#49 Bug Bounty v.2 — XML External Entity (XXE)

Здравствуйте, дорогие друзья.

XML External Entity (XXE) — это уязвимость, которая может возникнуть при синтаксическом анализе приложения XML. Прежде чем углубиться в изучение того, что такое XXE, вам необходимо сначала хорошо разобраться в XML.

Основы XXE

Расширяемый язык разметки (XML) — это язык, предназначенный для хранения и передачи данных, аналогичный JSON. Пример того, как выглядит XML, можно найти ниже:

<?xml version=»1.0″ encoding=»UTF-8″?>

<bookstore>

<book category=»cooking»>

<title lang=»en»>Everyday Italian</title>

<author>Giada De Laurentiis</author>

<year>2005</year>

<price>30.00</price>

</book>

<book category=»children»>

<title lang=»en»>Harry Potter</title>

<author>J K. Rowling</author>

<year>2005</year>

<price>29.99</price>

</book>

</bookstore>

В первой строке вы можете увидеть пролог, который содержит версию XML и кодировку. Совет профессионала, если вы когда-нибудь увидите это в burp, вам следует немедленно протестировать его на наличие XXE:

● <?версия xml=»1.0″, кодировка=»UTF-8″?>

Ниже вы увидите тег “<bookstore>”, который представляет корневой узел. Есть два дочерних узла, называемых “<book>”, и каждый из них содержит дочерние узлы, называемые

“<title>,<author>,<year>,<price>”.

<root>

<child>

<subchild>…..</subchild>

</child>

</root>

Это базовая структура XML, но вам следует знать немного больше. Существует так называемое определение типа документа (DTD), которое определяет структуру, а также юридические элементы и атрибуты XML-документа, как показано ниже:

<?xml version=»1.0″?>

<!DOCTYPE note [ <!ENTITY user «Timcore»>

<!ENTITY message «got em»> ]>

<test><name>&user;</name></test>

Как показано выше, существует нечто, называемое СУЩНОСТЬЮ. Оно действует как переменная. В этом примере сущность “user” содержит текст “Timcore”. Эту сущность можно вызвать, набрав “&user;”, и оно будет заменено текстом “Timcore”.

Вы также можете использовать так называемый внешний объект, который будет загружать свои данные из внешнего источника. Это можно использовать для получения содержимого из URL-адреса или файла на диске, как показано ниже:

<!DOCTYPE foo [ <!ENTITY ext SYSTEM «http://example.com» > ]>

<!DOCTYPE foo [ <!ENTITY ext SYSTEM «файл:///путь/к/файлу» > ]>

XML External Entity (XXE) Attack

Я упоминал, что вы можете использовать внешние объекты для извлечения данных из файла на диске и сохранения их в переменной. Что, если мы попытаемся прочитать данные из файла “/etc/passwd” и сохранить их в переменную? Обратите внимание, что для чтения данных в ответе должна быть возвращена сущность.

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

Во время работы в burp я зафиксировал следующий POST-запрос, который, похоже, использует XML для отправки данных в серверную систему. Всякий раз, когда вы видите XML, вам следует проверять его на наличие XXE.

Чтобы проверить наличие XXE, просто введите свой вредоносный внешний объект и замените им значение каждого узла, как показано ниже:

Чтобы проверить наличие XXE, просто введите свой вредоносный внешний объект и замените им значение каждого узла

Как показано выше, я создал внешнюю сущность для получения данных из файла /etc/passwd и сохранил их в сущности xxe. Затем я поместил переменную в узел <идентификатор продукта>. Если сервер не блокирует внешние объекты, ответ будет передан вам.

Если сервер не блокирует внешние объекты, ответ будет передан вам

После этого вы сможете получить содержимое файла /etc/passwd, как показано выше.

Резюме

Большинство приложений передают данные с помощью JSON, но вы можете столкнуться с приложениями, использующими XML. При этом обязательно проверяйте наличие XXE. Использование этой уязвимости позволяет вам читать произвольные файлы, что может привести к полной компрометации компьютера.

На этом все. Всем хорошего дня!

Цикл статей по Bug Bounty.