25 lines
2.8 KiB
Markdown
25 lines
2.8 KiB
Markdown
**XML external entity (XXE)** - уязвимость, открывающая атакующему возможность вмешиваться в обработку приложением данных XML. Обычно это открывает возможность атакующему просматривать файлы на сервере приложения и взаимодействовать с любым back-end или дополнительной системой, к которой имеет доступ само приложение.
|
|
|
|
## Что такое XML?
|
|
|
|
**XML - extensible markup language** - расширяемый язык разметки, предназначенный для хранения и транспортировки данных. Как и HTML, использует древоподобную структуру тегов и данных. Ранее был в моде как формат данных для транспортировки, но сейчас в основном используют **json**.
|
|
|
|
**XML сущьность** - способ представления элемента данных в ввиде XML документа, вместо использования оригинальных данных. Это значит, что < И > будут представленны как **<** и **>**
|
|
|
|
**DTD (Document type definition)** - содержит объявления, которые могут определить структуру XML документа, типы данных и другие элементы. Объявляется в отдельном DOCTYPE в начале документа.
|
|
|
|
```XML
|
|
<!DOCTYPE foo [ <!ENTITY myentity "my entity value" > ]>
|
|
```
|
|
В качестве примера.
|
|
|
|
## Использование XML для получения файлов
|
|
|
|
Что бы провести XXE иньекцию, которая возвращает файлы из файловой системы, необходимо модифицировать XML. Есть два пути:
|
|
1. Объявление или редактирование DOCTYPE элемента, который объявляет внешнюю сущность, имеющую доступ к файловой системе.
|
|
2. Изменение данных в XML, который возвращаяется в ответе приложения, чтобы использовать определенную внешнюю сущность.
|
|
|
|
## Эксплуатация XXE для совершения SSRF атаки
|
|
|
|
Для совершения такой гибридной атаки необходимо объявить внешнюю XML сущность используя необходимую нам ссылку, и использовать объявленную переменную как данные.
|