资源链接:https://pan.quark.cn/s/a900691a3ec3
免责声明
由于传播、利用本公众泷羽Sec提供的文章、工具而造成的任何直接或者间接的后果及损失,均由使用者本人负责,公众号泷羽Sec团队及作者不为此承担任何责任,一旦造成后果请自行承担!
前言
研究大量有关服务器端请求伪造 (SSRF) 的文章和报告后,输出了一份有关 SSRF漏洞的全面概述
服务器端请求伪造(SSRF)
服务器端请求伪造(SSRF)是一种安全漏洞,攻击者可以利用这一漏洞从受影响的服务器向其他内部或外部资源发送特制请求。这种情况通常发生在Web应用程序接受用户输入的URL或IP地址,并在没有进行充分验证或清理的情况下直接使用这些输入发出请求时。
SSRF攻击的危害在于,攻击者可以通过受影响的服务器访问本不应公开的内部服务或敏感信息。例如,攻击者可以尝试访问内部数据库、云服务的元数据或其他受保护的资源,从而获取敏感数据或执行未授权的操作。
为了防止SSRF漏洞,开发者应采取以下措施:
- 输入验证:对用户输入的URL或IP地址进行严格的验证,确保只允许合法的、预定义的地址。
- 白名单机制:使用白名单限制可访问的资源,确保只有特定的、可信的地址可以被请求。
- 请求限制:限制服务器能够发出的请求类型和目标,避免请求内部服务或敏感信息。
- 网络隔离:将内部服务与外部网络隔离,减少潜在的攻击面。
- 监控与日志:实施监控和日志记录,以便及时发现异常请求和潜在的攻击行为。
通过这些措施,可以有效降低SSRF漏洞带来的风险,保护系统和数据的安全。
识别 SSRF 漏洞
识别目标应用程序中的 SSRF 需要了解该应用程序如何与外部资源交互、处理 URL 以及处理用户输入。您要做的第一件事是退后一步,查看目标应用程序中获取外部资源的所有功能。这可能是从加载图像到从其他服务器获取数据的任何内容。这些点是最有可能出现 SSRF 漏洞的入口点。
URL 导入功能:常见的一种。考虑一下应用程序基于 URL 获取某些内容的功能 — 可能是图像导入器或数据获取器。如果应用程序从外部 URL 获取内容,那么可以肯定它可能容易受到 SSRF 攻击,尤其是在没有适当验证的情况下。
这里的想法是尝试提供内部 URL,例如http://localhost或http://127.0.0.1。文件上传机制也可能隐藏 SSRF 漏洞,用户上传的文件中可能包含指向内部服务的嵌入式 URL。无头浏览器和 HTML 渲染功能也可能成为 SSRF 攻击的目标,尤其是在处理 HTML 内容时。
此外,检查服务器状态和监控功能、代理实现及安全机制中的漏洞也是识别 SSRF 的关键步骤。通过这些方法,您可以更全面地评估目标应用程序的安全性,并识别潜在的 SSRF 漏洞。
为了从该内部 Web 应用程序中窃取数据,攻击者可以利用 DNS 重新绑定,如下所示:
域名获取:攻击者获取域名example.com,并配置一个具有较低生存时间 (TTL) 设置的 DNS 服务器。此 DNS 服务器设置为将example.com解析为托管恶意 JavaScript 负载的 Web 应用程序的 IP 地址。
受害者互动:受害者通过http://example.com访问攻击者的 Web 应用程序。此时,浏览器将example.com解析为攻击者的服务器,并加载恶意 JavaScript 负载。
DNS 重新绑定:然后攻击者更新或“重新绑定” example.com的 DNS 设置以解析为内部 Web 应用程序192.168.1.3。
恶意请求:JavaScript 负载向http://example.com/sensitive-endpoint发起 HTTP GET 请求。由于 DNS 重新绑定,example.com现在解析为192.168.1.3。因此,受害者的浏览器将请求发送到内部 Web 应用程序。由于来源(即方案、主机和端口)保持不变,因此此请求不被视为跨源。因此,JavaScript 代码可以访问响应而不会违反同源策略。
数据泄露:最后,JavaScript 负载将响应数据泄露到攻击者控制的另一个域,例如http://harmfull.example.com。通过这种方式,攻击者能够在不被检测的情况下获取内部敏感数据,展示了 DNS 重新绑定攻击的潜在威胁。
在网络安全领域,SSRF(服务器端请求伪造)是一种常见的攻击方式,攻击者可以利用它访问内部网络或其他受限资源。为了防止这种攻击,许多应用程序实施了各种保护措施。然而,攻击者也可以使用一些技巧来绕过这些保护。以下是一些关于IP地址和协议的技巧,帮助理解如何在SSRF攻击中进行规避。
首先,针对IP地址的伪装,许多SSRF保护机制会阻止特定的主机地址,例如localhost或127.0.0.1。然而,攻击者可以利用一些不同的形式来伪装这些IP地址。比如,127.0.0.0到127.255.255.255的范围都可以被视为本地主机。此外,攻击者可以使用缩写形式(如127.1)、填充形式(如127.000000000000000.1)或全零形式(0.0.0.0,通常解析为本地机器)。其他形式还包括十进制(2130706433)、八进制(0177.0000.0000.0001)、十六进制(0x7f000001)以及IPv6环回地址(0:0:0:0:0:0:0:1或::1),甚至IPv4映射的IPv6环回(::ffff:127.0.0.1)。
其次,基于协议的绕过也是一种有效的策略。许多SSRF过滤器主要关注HTTP(S)协议,但实际上,许多Web应用程序还支持其他协议,如FTP或SMTP。通过切换到这些未被监控的协议,攻击者可能能够访问受限资源。
此外,IP混淆技术也可以帮助攻击者绕过过滤器。通过以不寻常的方式对IP地址进行编码或操作,例如使用十六进制、八进制或十进制表示,攻击者可以使这些地址不易被简单的过滤规则识别。
最后,URL编码和解析技巧也是一种常见的绕过方法。许多SSRF过滤器在处理不常见或编码的URL格式时会遇到困难。如果过滤器无法彻底规范或验证URL,攻击者可以尝试使用URL编码、双重编码或添加空字节来规避检测。此外,通过测试目标应用程序中不同解析器如何解释URL,攻击者可以识别出允许访问被阻止端点的不一致之处。
对于SSRF有效负载的详细参考,建议查看PayloadsAllTheThings GitHub存储库,以获取更多信息和示例。
SSRF 的实用工具
SSRFmap,自动 SSRF 模糊测试和开发工具,下载SSRFmap的源码_GitHub_帮酷
GitHub - knassar702/lorsrf:快速 CLI 工具,用于查找可用于查找 SSRF 或……的参数
GitHub - blackhatethicalhacking/SSRFPwned:使用内置自定义有效负载检查 SSRF……GitHub - Th0h0/autossrf:基于智能上下文的 SSRF 漏洞扫描程序。
GitHub - vysecurity/IPFuscator:IPFuscator - 一种自动生成替代 IP 的工具
GitHub - mogwailabs/DNSrebinder:一个基于 Python 的最小 DNS 服务器,用于测试/验证 DNS 重新绑定