SSRF 示例
直接拼接用户输入的url。
服务器指定url后用户可以拼接一些其他
用户可以控制子域名
指明接口服务器,去做验证。
查找 SSRF
可以通过许多不同的方式在 Web 应用程序中发现潜在的 SSRF 漏洞。以下是四个常见位置的示例:
在地址栏中的参数中使用完整 URL 时:
表单中的隐藏字段:
部分 URL,例如仅主机名:
或者可能只是 URL 的路径:
其中一些示例比其他示例更容易被利用,这就是需要大量试验和错误才能找到有效负载的地方。
如果使用没有输出的盲 SSRF,则需要使用外部 HTTP 日志记录工具来监视请求,例如 requestbin.com、您自己的 HTTP 服务器或 Burp Suite 的 Collaborator 客户端。
击败常见的 SSRF 防御
更精通安全的开发人员意识到 SSRF 漏洞的风险,可以在其应用程序中实施检查,以确保请求的资源符合特定规则。通常有两种方法,拒绝列表或允许列表
拒绝列表
拒绝列表是指接受除列表中指定的资源或与特定模式匹配的资源之外的所有请求。Web 应用程序可以使用拒绝列表来保护敏感端点、IP 地址或域不被公众访问,同时仍允许访问其他位置。限制访问的特定端点是 localhost,它可能包含服务器性能数据或其他敏感信息,因此 localhost 和 127.0.0.1 等域名将出现在拒绝列表中。攻击者可以使用替代的 localhost 引用(如 0、0.0.0.0、0000、127.1、127.*.*.*、2130706433、017700000001)或具有解析为 IP 地址 127.0.0.1 的子域(如 127.0.0.1.nip.io)绕过拒绝列表。
此外,在云环境中,阻止对 IP 地址 169.254.169.254 的访问将是有益的,该地址包含已部署云服务器的元数据,包括可能的敏感信息。攻击者可以通过在自己的域上注册子域,并使用指向 IP 地址 169.254.169.254 的 DNS 记录来绕过此漏洞。
允许列表
在允许列表中,所有请求都会被拒绝,除非它们出现在列表中或与特定模式匹配,例如参数中使用的 URL 必须以 https://website.thm 开头的规则。 攻击者可以通过在攻击者的域名(如 https://website.thm.attackers-domain.thm)上创建子域来快速规避此规则。应用程序逻辑现在将允许此输入,并允许攻击者控制内部 HTTP 请求。
打开重定向
如果上述绕过不起作用,攻击者还有另一个技巧,即开放重定向。开放重定向是服务器上的一个端点,网站访问者会自动重定向到另一个网站地址。以链接 https://website.thm/link?url=https://tryhackme.com 为例。创建此端点是为了记录访问者出于广告/营销目的单击此链接的次数。但想象一下,存在一个潜在的 SSRF 漏洞,其规则严格,只允许以 https://website.thm/ 开头的 URL。攻击者可利用上述功能将内部 HTTP 请求重定向到攻击者选择的域。