在本节中,将解释什么是服务器端请求伪造(SSRF),描述一些常见的示例,并解释如何查找和利用各种SSRF漏洞。
什么是SSRF?
服务器端请求伪造(SSRF)是一种Web安全漏洞,允许攻击者诱导服务器端应用程序向非法位置发出请求。
在典型的SSRF攻击中,攻击者可以利用漏洞服务器与仅限内部访问的其他服务器建立连接。
在其他情况下,可能会强制漏洞服务器连接到指定的外部系统,从而导致敏感信息的泄露。
SSRF攻击的影响?
成功的SSRF攻击无论对易受攻击的服务器本身还是与之通信的其他后端系统,通常会导致未经授权的操作或访问内部数据。
在某些情况下,SSRF漏洞可能允许攻击者执行任意命令执行。
也可以利用SSRF漏洞向外部第三方系统发起恶意攻击,这种利用方式主要发生在具有漏洞的托管组织中。
SSRF攻击通常利用信任关系来升级漏洞应用程序的攻击并执行未经授权的操作,这些信任关系可能与服务器本身有关,也可能与同一组织内的其他后端系统有关。
针对服务器本身的SSRF攻击
在针对服务器本身的SSRF攻击中,攻击者诱使应用程序通过其环回网络接口向服务器发送HTTP请求。这通常涉及一个带有主机名的URL,比如127.0.0.1或localhost。
例如,考虑一个购物应用程序,它允许用户查看某项商品是否在特定商店中有库存。要提供库存信息,应用程序必须查询各种后端API,具体取决于相关产品和商店,这个功能是通过前端HTTP请求将URL传递给相关后端API来实现的。因此,当用户查看商品的库存状态时,他们的浏览器会发出如下请求:
这会导致服务器向指定的URL发出请求,检索库存状态并将其返回给用户。
在这种情况下,攻击者可以修改请求以指定服务器本身的本地URL,如下:
在这里,服务器将获取/admim的内容并将其返回给用户。
攻击者可以直接访问/admin,但管理功能通常只有经过身份验证的合法用户才能访问。因此,直接访问URL的攻击者看不到任何感兴趣的内容。但是,当对/admin的请求来自服务器本身时,会绕过正常的访问控制。因为该请求来自受信任的位置,所以应用程序授予对管理功能完全的访问权限。
为什么应用程序会以这种方式运行,并且隐式信任来自本地计算机的请求?这可能有多种原因:
●访问控制检查可能位于应用程序服务器前面的不同组件,当与服务器本身建立连接时,会绕过检查。
●出于灾难恢复的目的,应用程序可能允许来自本地计算机的任何用户在不登录的情况下进行管理访问。这为管理员提供了一种在丢失凭据时恢复系统的方法,这里的假设是只有完全信任的用户会直接来自服务器本身。
●管理界面可能正在侦听与主应用程序不同的端口号,因此用户无法直接访问,只能通过本地访问。
这种信任关系(来自本地机器请求的处理方式与普通请求不同)通常是使SSRF成为严重漏洞的原因。
寻找SSRF漏洞的隐藏攻击面
许多服务器端请求伪造漏洞相对容易被发现,因为应用程序的正常流量涉及包含完整URL的请求参数,而其他有些SSRF则比较难找到。
◆请求中的部分URL
有时,应用程序仅将主机名或URL路径的一部分放入请求参数中。然后,提交的值会在服务器端合并到请求的完整URL中。
如果这个值很容易被识别为主机名或URL路径,那么潜在的攻击面就很明显了。但作为完整SSRF的可利用性可能会受到限制,因为无法控制整个URL的所有请求。
◆数据格式中的URL
一些应用程序以其规范允许包含可能由数据解析器请求格式的URL传输格式,一个明显的例子就是XML数据格式,已广泛用于Web应用程序中,用于将结构化数据从客户端传输到服务器。当应用程序接受XML格式的数据并对其进行解析时,可能容易受到XXE注入的攻击,进而容易受到XXE的SSRF攻击。
◆通过Referer头的SSRF
一些应用程序使用跟踪访问者的服务器端分析软件。该软件经常在请求中记录Referer标头,因为这对于跟踪传入链接特别有用。通常,分析软件实际上会访问出现在Referer标头中的任何第三方URL。
这通常用于分析引用站点的内容,包括传入链接中使用的锚文本。
因此,Referer标头通常代表SSRF漏洞的有效攻击面。
场景试验-针对本地服务器的基本SSRF:
https://portswigger.net/web-security/ssrf/lab-basic-ssrf-against-localhost
场景说明:
这个试验场景具有库存检查功能,可从内部系统获取数据。
试验目的:
要完成这个试验,需要更改库存检查URL以访问http://localhost/admin的管理界面并删除用户carlos。
攻击过程:
①打开页面后,直接访问下/admin,发现没有权限,但提示可以本地发送请求
②随便打开一个商品,并查询库存,可以看到这是个POST请求,最下面调用了一个API接口来查询库存,把这个请求发送给Repeater
③修改下API接口的连接,访问本地/admin,可以看到成功访问到管理员面板
④再次修改API的连接,删除用户carlos,完成本试验
针对其他后端系统的SSRF攻击
SSRF经常出现的另一种类型的信任关系是应用程序服务器能够与用户无法直接访问的其他后端系统进行交互。这些系统通常具有不可路由的私有IP地址。
由于后端系统通常受到网络拓扑的保护,因此它们通常具有较弱的安全防护。在许多情况下,内部后端系统会包含敏感功能,任何能够与系统交互的人无需身份验证即可访问这些功能。
在前面的示例中,假设在后端URL https://192.168.0.68/admin处有个管理界面,在这里,攻击者可以通过提交以下请求,利用SSRF漏洞访问管理页面:
场景试验-针对后端系统的基本SSRF:
https://portswigger.net/web-security/ssrf/lab-basic-ssrf-against-backend-system
场景说明:
这个试验场景具有库存检查功能,可从内部系统获取数据。
试验目的:
要完成这个试验,需要使用库存检查功能扫描内部192.168.0.X范围以查找端口8080上的管理界面,然后使用它删除用户carlos。
攻击过程:
①打开页面后选择一件商品并查询下库存,将这个POST请求发送给Intruder
②在Intruder中Positions选项卡,修改下API后的URL,并将私有地址的最后一位设置为变量
③在Intruder中Payloads选项卡,设置这个变量类型为Number,并设置其范围和每次增加的数量,随后点击"Attack"
④在扫描结果中可以看到有一个响应200 OK的,这个就是后端管理系统的地址,记住这个地址
⑤将前面的查询库存请求发送给Repeater,并直接修改下API接口的连接,访问/admin管理面板,注意端口号是8080
⑥再次修改API接口连接,删除carlos用户,完成本试验
试验小结:
上面两个场景示例演示了SSRF攻击最基本的两类影响,即对本地当前服务器和本地后端服务器的未授权访问,这也是内部私有区域横向攻击的一种手段。
SQL注入攻击-检索隐藏的数据
HTTP高级请求走私-响应队列中毒
HTTP Host头漏洞攻击-概念梳理
原文始发于微信公众号(H君网安白话):服务器端请求伪造(SSRF)-概念梳理
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论