SSRF基础
什么是SSRF
SSRF 代表服务器端请求伪造。这是一个漏洞,允许恶意用户使 Web 服务器向攻击者选择的资源发出额外或经过编辑的 HTTP 请求。
SSRF 的类型
SSRF 漏洞有两种类型;第一个是常规 SSRF,其中数据返回到攻击者的屏幕。第二个是盲目 SSRF 漏洞,其中发生了 SSRF,但没有信息返回到攻击者的屏幕。
影响是什么?
成功的 SSRF 攻击可能导致以下任何情况:
- 进入未经授权的区域。
- 访问客户/组织数据。
- 能够扩展到内部网络。
- 显示身份验证令牌/凭据。
查找SSRF漏洞
可以通过多种不同的方式在 Web 应用程序中发现潜在的 SSRF 漏洞。以下是四个常见位置的示例:
当地址栏的参数中使用完整 URL 时:
表单中的隐藏字段:
部分 URL,例如主机名:
或者可能只是 URL 的路径:
其中一些示例比其他示例更容易被利用,因此需要进行大量试验和错误才能找到有效的有效负载。
如果使用盲 SSRF,并且没有输出反射给您,则需要使用外部 HTTP 日志记录工具来监控请求,例如 requestbin.com、您自己的 HTTP 服务器或 Burp Suite 的协作者客户端。
常见的防御手段与应对
更了解安全漏洞的开发人员意识到 SSRF 漏洞的风险,可以在其应用程序中实施检查,以确保请求的资源符合特定规则。通常有两种方法,拒绝列表或允许列表。
拒绝列表
在拒绝列表 (Deny List) 中,接受除列表中指定的资源或与特定模式匹配的资源之外的所有请求。Web 应用程序可以使用拒绝列表来保护敏感端点、IP 地址或域不被公众访问,同时仍允许访问其他位置。限制访问的特定端点是 localhost,它可能包含服务器性能数据或其他敏感信息,因此 localhost 和 127.0.0.1 等域名会出现在拒绝列表中。攻击者可以使用替代本地主机引用绕过拒绝列表,例如 0、0.0.0.0、0000、127.1、127...*、2130706433、017700000001 或具有解析为 IP 地址 127.0.0.1 的 DNS 记录的子域,例如 127.0.0.1.nip.io。
此外,在云环境中,阻止对 IP 地址 169.254.169.254 的访问将是有益的,该地址包含已部署云服务器的元数据,包括可能的敏感信息。攻击者可以通过在自己的域上注册一个子域来绕过此问题,该子域的 DNS 记录指向 IP 地址 169.254.169.254。
允许列表
在允许列表中,除非所有请求都显示在列表中或与特定模式匹配,例如参数中使用的 URL 必须以 https://website.thm 开头的规则,否则所有请求都会被拒绝。攻击者可以通过在攻击者的域名上创建子域(例如 https://website.thm.attackers-domain.thm)来快速规避此规则。应用程序逻辑现在将允许此输入,并允许攻击者控制内部 HTTP 请求。
打开重定向
如果上述绕过不起作用,那么攻击者还有一个技巧,即开放重定向。开放重定向是服务器上的一个端点,网站访问者会在其中自动重定向到另一个网站地址。以 link https://website 为例。thm/link?url=https://tryhackme.com 的创建此端点是为了记录访客出于广告/营销目的点击此链接的次数。但是想象一下,存在一个潜在的 SSRF 漏洞,其严格的规则只允许以 https://website 开头的 URL。thm/。攻击者可以利用上述功能将内部 HTTP 请求重定向到攻击者选择的域。