SSRF(服务器端请求伪造)的危害是什么?
SSRF(Server-Side Request Forgery,服务器端请求伪造)是一种由攻击者构造请求,由服务端发起请求的安全漏洞。
简单来说,攻击者借用服务器的身份,去访问攻击者自己无法直接访问的目标。
SSRF 的危害非常大,因为它不仅能泄露信息,往往还能作为进一步渗透内网的跳板,甚至直接导致服务器被接管。以下是 SSRF 的主要危害:
1. 内网探测与端口扫描 (Internal Reconnaissance)
服务器通常位于防火墙之后,拥有访问内网的权限。攻击者利用 SSRF 可以:
- 扫描内网 IP: 探测内网中存活的主机。
- 扫描端口: 探测内网服务开放的端口(如 22, 80, 443, 3306, 6379 等),从而了解内网架构和服务分布。
- 指纹识别: 获取内网服务的 Banner 信息,识别软件版本,寻找已知漏洞。
2. 攻击内网脆弱服务 (Attacking Internal Services)
许多内网服务(如 Redis, Memcached, Elasticsearch, MongoDB 等)出于便利性考虑,往往没有开启认证或配置了弱口令,且只允许本地(Localhost)或内网访问。
- Redis 攻击: 利用
gopher://或dict://协议构造特殊请求,攻击内网 Redis,写入 SSH 公钥或计划任务(Cron),从而获取服务器 Shell(RCE)。 - FastCGI / PHP-FPM: 攻击内部的 FastCGI 端口,执行恶意 PHP 代码。
- Struts2 / JBoss / WebLogic: 触发内网未修复的旧漏洞,导致远程代码执行。
3. 获取云服务器元数据 (Cloud Metadata Leakage) —— 极高危
这是在云环境(AWS, 阿里云, GCP, Azure)中最常见的致命攻击。云主机通常通过一个特定的内部 IP(如 169.254.169.254)来获取实例的元数据。
- 攻击者访问
http://169.254.169.254/latest/meta-data/。 - 后果: 可以获取临时的 Access Key ID 和 Secret Access Key。
- 影响: 攻击者利用这些凭证可以接管整个云账号,操作对象存储(S3)、数据库,甚至创建新的挖矿实例。
4. 读取本地敏感文件 (Local File Inclusion)
如果服务端程序支持 file:// 协议,且未做严格过滤,攻击者可以读取服务器本地文件。
- 例如:
file:///etc/passwd(查看用户列表)、file:///etc/hosts(查看内网映射)、file:///proc/net/arp(查看内网 ARP 表)。 - 甚至可以读取应用程序的源代码或配置文件(获取数据库密码)。
5. 绕过防火墙与访问控制 (Bypassing ACLs)
很多应用或管理后台设置了 IP 白名单,只允许 127.0.0.1 或内网 IP 访问。
- 由于请求是由服务器本身发起的,防火墙会认为这是“可信流量”。
- 攻击者利用 SSRF 可以访问这些受限的管理界面(如 Tomcat Manager, WebLogic Console 等)。
6. 拒绝服务攻击 (DoS)
攻击者可以让服务器去访问超大文件或不仅存在的资源,导致服务器资源耗尽。
- 带宽消耗: 让服务器下载超大文件。
- 连接耗尽: 让服务器向无响应的 IP 发起大量请求,占用连接池。
总结:SSRF 的核心逻辑
SSRF 的本质是信任边界的滥用。
- 攻击者视角: 我进不去内网,但服务器在内网。
- 利用方式: 我骗服务器帮我发请求。
- 最终结果:
- 信息泄露(云凭证、源码、内网拓扑)。
- 内网漫游(当跳板机)。
- 权限获取(通过 Redis/FastCGI 等服务拿 Shell)。
常见利用协议
除了 HTTP/HTTPS,SSRF 往往结合以下协议造成更大危害:
file://:读文件。gopher://:万能协议,可伪造任意 TCP 数据流(攻击 Redis、MySQL 的利器)。dict://:操作 Redis 等服务。ftp:///sftp://:网络连接测试或文件操作。
右滑查看面试常问