原理SSRF服务器端请求伪造的本质是让服务器成为攻击者的代理。当应用程序需要“替用户”去访问一个远程资源时如果未能对用户提供的目标地址进行严格限制攻击者就能诱导服务器向本不该访问的内部系统发起请求。漏洞位置第一类是远程资源加载比如远程图片加载、网页抓取、分享预览、在线文档生成、文件远程导入、RSS 订阅、在线翻译或转码。这类功能通常接受一个 URL 参数服务器会根据这个地址去下载内容如果没校验目标地址就可能被用来访问内网或本地服务。第二类是回调和代理类入口比如 Webhook、回调地址、API 代理、网关转发、对象存储远程拉取。这些位置往往允许用户提供一个目标地址服务器会向该地址发起请求容易被当成跳板。第三类是解析类入口比如 XML、SVG、HTML 解析中如果支持外部实体或远程引用也可能触发 SSRF。尤其是 XXE 和 SSRF 经常联动出现。第四类是比较隐蔽的位置比如请求头中的 X-Forwarded-For、Referer或者后端把用户输入拼进 curl、requests、file_get_contents、HttpURLConnection 等网络请求函数时也可能形成 SSRF。伪协议SSRF 里协议是“怎么让服务器发起请求”的关键。后端如果直接把用户输入交给 cURL、file_get_contents、requests、HttpURLConnection 这类网络请求函数就可能被切换协议访问本地文件、内网服务或云元数据。HTTP / HTTPS最基础也最常见。用途主要是让服务器访问原本从外网无法访问的内部资源。常见利用访问内网 Web 服务例如http://127.0.0.1:8080/admin访问内网微服务、管理后台访问云实例元数据例如http://169.254.169.254探测内网端口是否开放根据响应状态、延时或报错判断示例http://127.0.0.1:8080/ https://169.254.169.254/latest/meta-data/HTTP/HTTPS 本身不能直接发送任意 TCP 数据但可以用来探测服务、读取返回内容或触发内网 Web 漏洞。FILE用于访问服务器本地文件系统。如果 SSRF 点有回显file 协议常被用来读取本地敏感文件。常见利用读取/etc/passwd读取/etc/hosts读取 Web 配置文件、日志、环境变量读取应用源码或数据库配置示例file:///etc/passwd file:///var/www/html/config.php file:///C:/Windows/System32/drivers/etc/hosts防御上file 协议通常应直接禁用尤其不能让用户可控的 URL 进入文件读取函数。DICTDICT 是基于 TCP 的字典查询协议但在 SSRF 里更多被用来探测端口和攻击内网服务尤其是 Redis。常见利用探测端口是否开放识别服务指纹攻击未授权 Redis执行简单单行命令示例dict://127.0.0.1:6379/info dict://127.0.0.1:6379/keys:*DICT 的限制是每次通常只能发送单行命令复杂操作需要分步执行并且要对特殊字符做编码。GOPHERGopher 是 SSRF 里最强大的协议之一。它可以构造原始 TCP 数据流所以能攻击 Redis、FastCGI、SMTP、MySQL 等内网服务。常见利用攻击内网 Redis写 Webshell 或写计划任务反弹 Shell攻击 FastCGI执行系统命令构造 HTTP GET/POST 请求访问内网服务绕过只允许 HTTP/HTTPS 的简单校验示例格式gopher://127.0.0.1:6379/_[编码后的TCP数据]Gopher 的关键在于 URL 中_后面的内容会被当作 TCP 数据发送给目标端口所以可以拼出 Redis 命令、FastCGI 包或 HTTP 请求包。FTPFTP 主要用于文件传输但在 SSRF 里危害相对弱一些更多用于探测端口或尝试访问远程文件。常见利用探测 FTP 端口是否开放尝试访问远程 FTP 文件某些环境下可能扩大协议攻击面示例ftp://127.0.0.1:21/ ftp://user:passtarget/fileFTP 是否能被利用取决于后端使用的网络库是否支持该协议以及是否允许访问内网地址。面试记忆版HTTP/HTTPS访问内网 Web、探测端口、读云元数据。FILE读本地文件。DICT探测端口、识别服务、攻击 Redis。GOPHER构造任意 TCP 数据最危险。FTP探测端口、访问远程文件危害相对小。最稳防御仍是只允许 http/https禁用 file、dict、gopher、ftp 等协议再做 IP 白名单、DNS 解析后校验、禁止自动重定向和出站网络隔离。防御只允许 http/https禁用 file://、gopher://、dict://、ftp:// 等危险协议。域名/IP 用白名单不用黑名单能白名单就白名单必须开放公网时至少校验不是内网、回环、链路本地和云元数据地址。DNS 解析后再校验 IP域名解析出真实 IP确认不在禁止网段如果业务允许把解析结果绑定到连接防 DNS 重绑定。禁止自动重定向关闭 HTTP 客户端的 30x 自动跳转必须跳转时对最终目标重新校验协议、域名和 IP。出站网络隔离服务器出口流量禁止访问内网段和元数据地址最好走受控出站代理。常见绕过手法绕过通常发生在“校验层”和“实际请求层”不一致时。协议绕过file://、gopher://、dict:// 等危险协议本地回环绕过localhost、127.0.0.1、[::1]、0、127.1 等IP 变形八进制、十六进制、十进制整数、混合进制URL 解析差异http://example.com127.0.0.1、# 片段截断重定向绕过先通过白名单再 301/302 跳转到内网DNS 重绑定首次解析返回公网 IP二次解析返回内网 IP短链接 / 开放重定向用可信域名做跳板NAT64 / IPv6 翻译用 IPv6 地址绕过 IPv4 黑名单危害SSRF 的危险点在于它能穿透网络边界探测内网存活主机、端口读取本地文件如 file:///etc/passwd访问内网管理后台、微服务、Redis、MySQL、FastCGI窃取云实例元数据例如 AWS/Aliyun/TencentCloud 的临时凭证结合 Gopher/Dict 等协议攻击内网服务触发 DoS甚至链式利用实现 RCE