SSRF参考SSRF
服务器端请求伪造(Server-Side Request Forgery,简称SSRF)是一种由攻击者构造并由服务端发起请求的安全漏洞。与客户端请求伪造(CSRF)不同,SSRF利用的是服务器的权限和信任关系,使服务器成为攻击的”代理人”。本质上,SSRF是一种”服务器被动代理攻击”,攻击者通过操纵服务器,使其向攻击者指定的目标发送请求。
SSRF是CTF以至于安全场景中都十分常见的漏洞,形成的根本原因是服务端应用程序在处理用户可控的URL或资源地址时,没有实施足够的验证和限制。当应用程序需要从其他服务器获取数据(如图片、文件、API响应等)时,如果直接使用用户提供的URL而不进行严格过滤,就可能导致SSRF漏洞。
从技术机制上看,SSRF漏洞的形成通常涉及以下几个关键环节:
-
用户输入控制:应用程序允许用户指定资源的URL或地址
-
服务器端请求:应用程序使用这些用户提供的地址发起服务器端请求
-
缺乏验证:应用程序未对请求目标进行充分的验证和限制
-
特权执行:请求以服务器的身份和权限执行,可能访问内部资源
常见的SSRF分为内网SSRF,外网SSRF,本地SSRF,云元数据SSRF,同时又有无回显,有回显,半回显的区分,在CTF中本地SSRF(LFI)和内网SSRF比较常用
通常来说SSRF在以下场景可以使用:
- url中包含download参数的文件下载,以及类似的含参数的url通信,管理和监控服务,这些类型主要集中在有参数的情况
- 还有就是和各种漏洞连用,比如XXE,命令执行,文件上传,反序列化等等,所有后续不知道怎么写的题都可以扫扫内网,很容易就会有新收获
- 指定的url ping工具,如SUCTF2026里的uri
常见的利用,我们可以使用各种协议来获取信息,
file://:读取本地文件dict://:进行内网端口扫描和目录扫描gopher://<host>:<port>/<gopher-path>_<data>:发送 POST 请求或任意 TCP 数据流
然后就是有一定漏洞利用能力后利用shell或者对应漏洞获得的能力来进行内网SSRF扫描,来找一个内网端口
还有就是当可以进行DNS查询时,使用DNS重绑定,不过该情况得要时DNS缓存很小的时候才可以,又是需要进行爆破草可以成功
然后聊聊绕过
- 各种编码绕过,十进制,八进制,十六进制,混合编码,ipv6地址,短地址或零地址(某些系统),短链接,URL编码,双重编码,Unicode字符绕过
- 特殊字符绕过比如@和#主要利用过滤器的行为尽心绕过
- 自定义域名解析,注册一个域名使域名解析为127.0.0.1,子域名构造,将目标ip嵌入,nip.io服务直接解析对应ip
然后讲讲如何防御,
- 我们可以对内网地址进行限制如192开头,127.0.0.1等等
- 对返回的信息进行验证和过滤
- 限制请求端口
- 仅允许http或https协议
- 使用DNS缓存,设置host白名单
- 锁定DNS将设置为ip返回的第一个值
- 过滤DNS解析中的内网地址