服务器端请求伪造(SSRF)漏洞进阶与防护
字数 1081 2025-11-05 08:31:57
服务器端请求伪造(SSRF)漏洞进阶与防护
描述
SSRF(Server-Side Request Forgery)漏洞允许攻击者诱使服务器向任意域发起HTTP请求,从而访问内部资源或绕过网络边界控制。与基础SSRF不同,进阶场景涉及协议处理、绕过技巧及云环境下的风险升级。例如,攻击者可能利用URL解析差异或云元数据服务(如AWS的169.254.169.254)窃取敏感信息。
解题过程
-
漏洞原理深化
- 服务器未严格校验用户输入的URL(如通过参数
url=接收目标地址),直接使用curl、file_get_contents()等函数发起请求。 - 进阶风险包括:
- 协议滥用:利用
file://、dict://、gopher://等协议读取本地文件或与内网服务交互(如Redis未授权访问)。 - URL解析差异:某些库(如Python的
requests与PHP的parse_url())对@、#等符号解析规则不同,可用于绕过黑名单。 - 云元数据接口:云服务器实例的元数据接口(如AWS/阿里云)通常可通过内网IP访问,泄露实例密钥、配置信息。
- 协议滥用:利用
- 服务器未严格校验用户输入的URL(如通过参数
-
攻击场景示例
- 步骤1:探测内网服务
尝试将参数url=http://192.168.1.1:8080修改为url=http://169.254.169.254/latest/meta-data/,验证服务器是否可访问云元数据。 - 步骤2:协议绕过防护
若黑名单禁止http,可尝试:- 使用进制编码:
url=http://2130706433(十进制IP127.0.0.1) - 利用重定向:先请求一个可控制的重定向服务(如Burp Collaborator),最终跳转到目标内网地址。
- 使用进制编码:
- 步骤1:探测内网服务
-
防护策略
- 白名单校验:仅允许访问预设的域名或IP(如只允许
api.trusted.com),拒绝非预期协议(如file://)。 - 网络层隔离:限制服务器出站流量,禁止访问内网IP段(如
10.0.0.0/8)和云元数据地址。 - 代理层过滤:通过中间代理对出站请求进行二次校验,阻断非常规URL格式。
- 代码层加固:使用
urlparse等库严格解析URL,避免通过字符串拼接生成请求目标。
- 白名单校验:仅允许访问预设的域名或IP(如只允许
-
实际案例
- 某电商平台通过SSRF访问内网Redis,利用
gopher://协议发送命令,直接篡改数据库数据。 - 修复方案:将Redis绑定到本地回环地址
127.0.0.1,并设置密码认证。
- 某电商平台通过SSRF访问内网Redis,利用
通过以上步骤,可系统理解SSRF漏洞的进阶利用手法及多维防护措施。