尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

SSRF漏洞原理、利用与防御全解析

SSRF漏洞原理、利用与防御全解析 1. SSRF漏洞本质与危害解析SSRFServer-Side Request Forgery服务端请求伪造漏洞本质是攻击者通过构造恶意请求诱使服务器向非预期目标发起网络请求。这种漏洞之所以危险是因为它打破了服务器作为受信边界的假设使得内网服务暴露在攻击面之下。在实际渗透测试中我遇到过最典型的场景是某电商平台的图片上传功能支持通过URL获取远程图片。表面看这是个便利功能但未对用户输入的URL做严格校验导致攻击者可以通过file://协议读取服务器本地文件或者通过http://协议探测内网服务。更危险的是当服务器配置了特殊角色如AWS的EC2实例元数据服务攻击者可以直接获取云服务凭据。关键点SSRF不同于CSRF它利用的是服务器对内部网络的信任关系而非用户会话。这使得防御难度显著增加。2. 深度利用技术剖析2.1 协议利用实战不同协议在SSRF利用中扮演不同角色HTTP/HTTPS最基础的探测方式常用于扫描内网IP段和端口file://直接读取服务器本地文件如file:///etc/passwdGopher这个古老协议堪称SSRF的瑞士军刀它能构造任意TCP流量。我曾用以下Payload成功利用Redis未授权访问gopher://127.0.0.1:6379/_*3%0d%0a$3%0d%0aset%0d%0a$1%0d%0a1%0d%0a$57%0d%0aDict通过字典协议获取服务信息如dict://localhost:6379/info2.2 云环境特殊利用云平台的元数据服务是SSRF的高价值目标。以AWS为例访问http://169.254.169.254/latest/meta-data/可能获取IAM临时凭证。我在一次测试中通过以下步骤完成入侵发现存在SSRF的Web应用获取EC2实例的AWS_ACCESS_KEY_ID通过AWS CLI枚举S3存储桶发现包含敏感数据的存储桶并下载2.3 DNS重绑定攻击这是绕过IP黑名单的高级技巧。攻击流程如下注册一个域名并设置极短的TTL如evil.com配置DNS服务器使第一次查询返回合法IP如1.1.1.1后续查询返回内网IP如192.168.1.1服务器校验时看到合法IP实际请求时解析到内网3. 防御方案与绕过艺术3.1 常规防御手段的缺陷大多数开发者会采用这些防御措施但都存在被绕过的可能防御方式常见绕过方法域名黑名单使用大小写变异如LocAlHOST、特殊字符127。0。0。1IP黑名单使用进制编码0177.0.0.1、DNS重绑定协议白名单利用URL解析差异如http://example.comevil.com3.2 深度防御方案经过多次实战检验我总结出这些有效防御措施网络层隔离禁止服务器出站流量到非必要端口使用独立的网络命名空间关键服务如Redis绑定127.0.0.1而非0.0.0.0请求处理策略def safe_fetch(url): parsed urllib.parse.urlparse(url) if parsed.scheme not in [http,https]: raise ValueError(Invalid scheme) if not is_whitelisted(parsed.hostname): raise ValueError(Host not allowed) if is_internal_ip(parsed.hostname): raise ValueError(Internal IP detected) # 使用单独的网络会话发起请求 with requests.Session() as s: s.mount(http://, NoHTTPAdapter()) return s.get(url, timeout3)云环境加固禁用实例元数据服务或启用IMDSv2为EC2角色配置最小权限原则4. 高级绕过技巧实录4.1 URL解析差异利用不同库对URL的解析存在差异这是绕过防御的黄金机会。例如http://foobar:80evil.comPython的urllib解析为访问evil.comPHP的parse_url认为访问bar:804.2 302跳转攻击即使应用校验了初始URL如果目标服务返回302跳转仍可能导致SSRF。防御时需要禁用重定向requests.get(url, allow_redirectsFalse)4.3 非预期端口利用我曾通过SSRF攻击暴露在8000端口的Jenkins服务虽然80端口被严格防护。建议实施全面的端口管控。5. 企业级防护建议对于大型企业我建议采用以下纵深防御体系流量监控层部署网络层IDS检测异常出站请求分析HTTP User-Agent等特征应用架构层将需要外联的功能抽离到独立微服务实施严格的服务间认证安全开发规范禁止直接使用用户输入构造请求统一使用经过安全封装的HTTP客户端库在一次金融行业渗透测试中我们发现某系统虽然实现了URL校验但通过精心构造的IPv6地址[::ffff:127.0.0.1]仍成功触发了SSRF。这提醒我们防御方案需要覆盖所有边界情况。
返回列表