SSRF

image-20250210101110729

一、漏洞概述

  • 定义 :SSRF(Server - Side Request Forgery)即服务器端请求伪造,是一种攻击者通过操纵服务器端的应用程序,使其向攻击者指定的地址发送请求的攻击方式。
  • 背景 :SSRF 漏洞通常发生在服务器端提供了从其他服务器获取数据的功能,但没有对目标地址做过滤与限制的情况下。攻击者可以利用这个漏洞,让服务器向内部网络或外部网络中的任意地址发送请求,从而获取敏感信息或执行攻击操作。

二、漏洞成因

  • 服务器端对用户输入的 URL 过于信任 :服务器端没有对用户输入的 URL 进行严格的过滤和验证,直接使用用户输入的 URL 来发起请求,导致攻击者可以构造恶意的 URL 来控制服务器的请求目标。
  • 缺乏对请求地址的限制 :服务器端没有对请求的地址进行限制,允许服务器向任意地址发送请求,包括内部网络和外部网络中的敏感地址。

三、漏洞危害

  • 内网探测与攻击 :攻击者可以利用 SSRF 漏洞探测服务器所在的内网环境,获取内网中的敏感信息,如服务器的 IP 地址、端口号、服务版本等,进而对内网中的其他服务器或应用进行攻击。
  • 本地文件读取 :攻击者可以通过构造恶意的 URL,利用 SSRF 漏洞读取服务器本地的文件,如配置文件、源代码等,从而获取敏感信息。
  • 拒绝服务攻击(DoS) :攻击者可以利用 SSRF 漏洞向服务器发送大量的请求,消耗服务器的资源,导致服务器无法正常响应合法用户的请求,从而实现拒绝服务攻击。

四、漏洞利用场景

  • 端口扫描与内网探测 :攻击者可以通过 SSRF 漏洞扫描服务器所在的内网或本地端口,获取服务的 banner 信息,从而窥探网络结构。例如,攻击者可以构造一个 URL,让服务器向内网中的某个 IP 地址和端口发送请求,通过分析服务器的响应来判断该端口是否开放以及运行的服务类型。
  • 攻击内网服务 :攻击者可以利用 SSRF 漏洞对内网中的其他服务进行攻击,如对内网中的 Web 应用进行 SQL 注入、命令执行等攻击,获取内网中的敏感数据或控制权。
  • 读取本地文件 :攻击者可以通过构造特定的 URL,利用 SSRF 漏洞读取服务器本地的文件,如使用 file:// 协议读取服务器上的配置文件、源代码等。

五、漏洞防御措施

  • 严格校验用户输入的 URL :对用户输入的 URL 进行严格的过滤和验证,禁止访问不安全的 URL,如内网 IP 地址、本地文件路径等。
  • 限制服务器的网络访问权限 :通过配置服务器的防火墙、网络策略等,限制服务器能够访问的地址范围,禁止服务器访问内网中的敏感地址。
  • 禁用危险协议 :禁用服务器端不需要的协议,如 file://gopher://dict:// 等,只允许使用安全的协议,如 HTTP 和 HTTPS。
  • 统一错误信息 :避免根据错误信息判断端口状态,防止攻击者通过分析错误信息来获取服务器的内部信息。
  • 使用白名单 :实现一个 URL 白名单,只允许服务器访问预定义的、安全的 URL,从而防止服务器访问恶意地址。