SSRF (服务器端请求伪造) 漏洞总结 1. 漏洞概述 SSRF (Server-side request forgery) 是一种 Web 安全漏洞,允许攻击者导致服务器端应用程序向非预期的位置发起请求。在典型的 SSRF 攻击中,攻击者可能迫使服务器连接到组织内部的基础设施,或者连接到任意的第三方系统,从而泄露敏感数据(如授权凭据)。 2. 影响范围 成功的 SSRF 攻击通常会导致以下后果: 未经授权的操作或数据访问:访问组织内部或应用程序可通信的其他后端系统中的数据。 任意命令执行:在某些情况下,SSRF 漏洞可能允许攻击者执行任意命令。 恶意后续攻击:可能导致源自托管该易受攻击应用程序的组织的恶意后续攻击。 3. 常见攻击方式 3.1 针对服务器的攻击 (SSRF attacks against the server) 攻击者让应用程序通过回环网络接口向托管应用程序的服务器本身发起 HTTP 请求。这通常涉及提供指向回环适配器( )或 的 URL。 正常请求示例: 攻击请求示例(修改 URL 为本地地址): 原理: 服务器认为请求来自受信任的本地位置,从而绕过正常的访问控制,允许访问管理功能(如 )。 3.2 针对其他后端系统的攻击 (SSRF attacks against other back-end systems) 应用程序可能与后端系统交互,这些系统通常具有不可路由的私有 IP 地址,且安全性较弱。 攻击请求示例: 原理: 攻击者利用 SSRF 漏洞访问后端管理界面(如 ),这些系统通常缺乏认证或认证较弱。 4. 绕过常见 SSRF 防御方案 4.1 绕过黑名单输入过滤器 (SSRF with blacklist-based input filters) 某些应用程序会阻止包含特定主机名(如 , )或敏感 URL(如 )的输入。 绕过技术: 使用替代 IP 表示法:例如 , , 或 。 DNS 重绑定:注册一个解析到目标 IP 的域名(如 )。 URL 编码或大小写变异:混淆被阻止的字符串。 重定向:提供一个你控制的 URL,该 URL 重定向到目标 URL(例如从 重定向到 )。 4.2 绕过白名单输入过滤器 (SSRF with whitelist-based input filters) 某些应用程序只允许匹配白名单的值。 绕过技术: 嵌入凭据:在 URL 的主机名前使用 字符。例如: 。 URL 片段:使用 字符指示 URL 片段。例如: 。 DNS 命名层次结构:利用 DNS 层级放置所需输入。例如: 。 URL 编码混淆:使用 URL 编码字符来混淆 URL 解析代码,或者尝试双重编码。 4.3 通过开放重定向绕过 (Bypassing SSRF filters via open redirection) 如果应用程序存在开放重定向漏洞,可以利用它来绕过基于过滤器的防御。 正常请求示例: 返回重定向到: 攻击请求示例: 原理: 应用程序首先验证 URL 是否在允许域内,然后请求该 URL。该请求触发重定向,最终向攻击者选择的内部 URL 发起请求。 5. 其他关键信息 盲注 SSRF (Blind SSRF vulnerabilities):当应用程序发出后端 HTTP 请求,但响应未返回给应用程序的前端响应时发生。盲 SSRF 更难利用,但可能导致服务器或其他后端组件上的完全远程代码执行。 寻找隐藏的攻击面: 请求中的部分 URL:应用程序可能只接受主机名或 URL 路径的一部分作为参数,但服务器端将其组合成完整 URL。 数据格式中的 URL**:例如 JSON 或 XML 中包含 URL。