SSRF参考SSRF

服务器端请求伪造(Server-Side Request Forgery,简称SSRF)是一种由攻击者构造并由服务端发起请求的安全漏洞。与客户端请求伪造(CSRF)不同,SSRF利用的是服务器的权限和信任关系,使服务器成为攻击的”代理人”。本质上,SSRF是一种”服务器被动代理攻击”,攻击者通过操纵服务器,使其向攻击者指定的目标发送请求。

SSRF是CTF以至于安全场景中都十分常见的漏洞,形成的根本原因是服务端应用程序在处理用户可控的URL或资源地址时,没有实施足够的验证和限制。当应用程序需要从其他服务器获取数据(如图片、文件、API响应等)时,如果直接使用用户提供的URL而不进行严格过滤,就可能导致SSRF漏洞。

从技术机制上看,SSRF漏洞的形成通常涉及以下几个关键环节:

  1. 用户输入控制:应用程序允许用户指定资源的URL或地址

  2. 服务器端请求:应用程序使用这些用户提供的地址发起服务器端请求

  3. 缺乏验证:应用程序未对请求目标进行充分的验证和限制

  4. 特权执行:请求以服务器的身份和权限执行,可能访问内部资源

常见的SSRF分为内网SSRF,外网SSRF,本地SSRF,云元数据SSRF,同时又有无回显,有回显,半回显的区分,在CTF中本地SSRF(LFI)和内网SSRF比较常用

通常来说SSRF在以下场景可以使用:

  1. url中包含download参数的文件下载,以及类似的含参数的url通信,管理和监控服务,这些类型主要集中在有参数的情况
  2. 还有就是和各种漏洞连用,比如XXE,命令执行,文件上传,反序列化等等,所有后续不知道怎么写的题都可以扫扫内网,很容易就会有新收获
  3. 指定的url ping工具,如SUCTF2026里的uri

常见的利用,我们可以使用各种协议来获取信息,

  • file:// :读取本地文件
  • dict:// :进行内网端口扫描和目录扫描
  • gopher://<host>:<port>/<gopher-path>_<data> :发送 POST 请求或任意 TCP 数据流

然后就是有一定漏洞利用能力后利用shell或者对应漏洞获得的能力来进行内网SSRF扫描,来找一个内网端口

还有就是当可以进行DNS查询时,使用DNS重绑定,不过该情况得要时DNS缓存很小的时候才可以,又是需要进行爆破草可以成功

然后聊聊绕过

  1. 各种编码绕过,十进制,八进制,十六进制,混合编码,ipv6地址,短地址或零地址(某些系统),短链接,URL编码,双重编码,Unicode字符绕过
  2. 特殊字符绕过比如@和#主要利用过滤器的行为尽心绕过
  3. 自定义域名解析,注册一个域名使域名解析为127.0.0.1,子域名构造,将目标ip嵌入,nip.io服务直接解析对应ip

然后讲讲如何防御,

  1. 我们可以对内网地址进行限制如192开头,127.0.0.1等等
  2. 对返回的信息进行验证和过滤
  3. 限制请求端口
  4. 仅允许http或https协议
  5. 使用DNS缓存,设置host白名单
  6. 锁定DNS将设置为ip返回的第一个值
  7. 过滤DNS解析中的内网地址