摘要:即使 Redis 部署在内网,也可借助 SSRF 漏洞 + Gopher 协议作为跳板攻击内网 Redis。本文讲解 Gopher 协议攻击原理、payload 构造方式,同时给出对应的防御手段,破除 “内网服务无需安全防护” 的误区。
前言
很多网站存在 SSRF 漏洞,网站服务器可以访问内网资源,外部攻击者无法直接访问内网。 内网 Redis 经常不设密码,只监听内网,攻击者可以利用 SSRF + Gopher 协议,构造 Redis 指令数据包,通过网站服务器代发指令攻击内网 Redis,实现写公钥、写 webshell。
一、什么是 Gopher 协议
Gopher 是一种旧协议,可以发送任意 TCP 原始数据包。SSRF 漏洞支持 gopher 协议时,可以向内网任意端口发送自定义 TCP 报文,我们就可以构造 Redis 命令发给内网 6379 端口。
二、攻击流程
- 网站存在 SSRF 漏洞,支持 gopher 协议;
- 网站服务器内网可以访问内网 Redis(192.168.x.x:6379);
- 攻击者构造 gopher 协议的 Redis 指令 payload;
- 访问 SSRF 接口,网站服务器代为发送数据包给内网 Redis;
- Redis 执行命令,写入公钥 /webshell。
关键点:攻击者不能直接连内网 Redis,借网站服务器当跳板。
三、Payload 示例
gopher://192.168.1.10:6379/_%0D%0Aset%20test%20hello%0D%0Asave%0D%0AURL 编码后的 Redis 指令,通过 SSRF 发送到内网 Redis。
四、防御方案
- SSRF 漏洞修复:过滤内网 IP、禁用 gopher、dict 等危险协议;
- 内网 Redis 同样需要设置密码,不能因为在内网就裸奔;
- 内网网络隔离,业务服务器和缓存服务器之间做访问控制;
- Redis 高危命令禁用。
五、思考
很多运维有误区:内网服务不用做安全。 SSRF、代码漏洞都可以作为跳板,从外网打入内网,内网安全同样不能松懈。
免责声明:文章仅安全学习,禁止非法测试。