你以为服务器只会帮你访问外网?SSRF 让它反过来咬你一口

很多人觉得"服务器主动发请求"这件事天然安全——毕竟请求是从可信域发出的嘛。但问题恰恰出在这里:如果你的应用允许用户指定一个 URL 让服务端去访问,攻击者就能让服务器变成一个跳板,去摸它本不该摸的东西。

场景很简单:一个网页截图工具、一个URL预览功能、一个Webhook订阅地址——用户输入一个 URL,服务器乖乖去 fetch。攻击者输入的不是 https://example.com,而是 http://169.254.169.254/latest/meta-data/。这是 AWS 实例的元数据端点,从外部根本访问不到,但服务器自己访问自己,一击即中。云环境的临时凭证、IAM 角色、数据库连接串,全泄露了。

更狠的玩法是协议切换。输入 gopher://internal-redis:6379/_*1%0d%0a$8%0d%0aflushall,利用 gopher 协议直接向内网 Redis 发送命令。Redis 没有认证?那攻击者就能写 SSH 公钥进去、写 crontab 反弹 shell,或者用主从复制直接加载恶意模块。整个过程从 SSRF 到 RCE,链路清晰得令人发指。

防御不是简单加个域名白名单就完事——攻击者用 0xa9fe01fe 这样的十进制 IP 绕过正则,用 ⓔⓥⓘⓛ.ⓒⓞⓜ 的 Unicode 变形绕过过滤,用 DNS Rebinding 让同一域名先后解析到内网 IP。真正有效的手段是:网络层禁止服务器访问内网段,协议层只允许 HTTP/HTTPS,应用层做 URL 解析后的规范化校验,三个层面缺一不可。

http://0x7f000001

#Security