找回密码
 立即注册
首页 业界区 业界 漏洞解析--SSRF 从小白到透彻,一篇就够! ...

漏洞解析--SSRF 从小白到透彻,一篇就够!

费卿月 昨天 20:26
一、漏洞原理

1.1 核心

SSRF(Server-Side Request Forgery),即服务器端请求伪造。说白了,就是控制了一个内部服务器帮你发送网络请求。该网络请求可以用http/https协议, 也可能可以用dict/ftp/gopher协议。由于其他服务器信任该内部服务器,所以就相当于掌握了一个只会发包的间谍帮你发包,常常起到绕过防火墙,权限访问的作用。
1.2 原理详解

SSRF存在的条件如下

  • 应用中存在功能点允许用户指定 URL,常见此类功能点有:

    • 图片下载功能:http://example.com/fetch?url=http://attacker.com/logo.png
    • RSS 订阅、接口回调、在线文档解析等。

  • 后端对url没有做严格校验,对一些危险的协议和目标地址没有做限制。
    之后攻击者只需要进行一定的检测(见2.1),确认SSRF是否存在及危害程度利用方式,就可以对服务器进行一定程度的控制了。
二、检测与危害

2.1 检测方法

这里主要说明 黑盒检测 的思路与方式,白盒检测属于代码审计范畴,这里不过多阐述。
2.1.1 有回显检测——直接访问


  • 适用场景:应用会将请求结果直接返回给前端(回显型 SSRF)。
  • 方法:外网检测将url地址换成百度之类的地址看看有没有回显即可。内网检测访问一些内网文件(可能不是很高效,也可以用2.1.3的方法)
2.1.2 无回显外网检测——DNSLog


  • 适用场景:应用没有返回请求结果(盲 SSRF)。
  • 方法

    • 使用dnslog平台或自己搭建。dnslog平台可以使用https://dig.pm/
    • 控制url访问你的dnslog地址,有记录代表存在SSRF。
    • 不止可以用http/https协议,gopher/dict/ftp这些都试试,测试的时候多换换子域名,避免其实访问了但是没重复解析的记录。

2.1.3 内网检测——端口探测


  • 适用场景:确认 SSRF 能否访问内网,并进行端口/服务探测。
  • 方法

    • 构造内网 IP 和端口:
      1. http://target.com/fetch?url=http://192.168.0.1:8080/
      复制代码
    • 根据响应差异进行判断:

      • 快速无回显 → 端口开放关闭都有可能。
      • 慢速 → 端口过滤(如防火墙等拒绝访问,没有返回包)
      • 快速报连接错误或服务器错误 → 端口关闭。
      • 有返回内容 → 服务可被访问,潜在危害更大。


2.2 利用与危害

2.2.1 内网服务探测与访问


  • 思路:目标服务器通常部署在防火墙或网关后,能访问内网资源
  • 利用点

    • 扫描内网端口,确认存活主机与服务
    • 访问只对内开放的 HTTP 管理面板(如 Jenkins、Zabbix、Weblogic Console)
    • 访问敏感接口

2.2.2 云平台元数据服务利用


  • 思路:云厂商提供的元数据服务(Metadata Service),常见在 http://169.254.169.254
  • 利用点

    • AWS:/latest/meta-data/iam/security-credentials/ 获取临时凭证
    • GCP / 阿里云 / 腾讯云:类似接口获取 API Key / Access Token

  • 利用链
    SSRF → 访问元数据 → 获取云凭证 → 接管云账户(如启动实例、读写存储、注入代码)
2.2.3 gopher/file/dict协议


  • 思路:当 SSRF 点支持 gopher://、file:// 等协议
  • 利用点

    • gopher:// → 精确构造 TCP payload,例如:

      • 操纵 Redis 写入恶意数据
      • 操纵 SMTP 发邮件
      • 攻击 FastCGI → 触发 PHP 执行

    • file:// → 读取本地文件(如 /etc/passwd、源码文件、配置文件)

  • 利用链
    SSRF → gopher → 内网服务命令执行 → RCE
2.2.4 绕过访问控制 / 防火墙限制


  • 思路:SSRF 让目标服务器代替攻击者发请求
  • 利用点

    • 绕过 IP 白名单(服务器自己在白名单里)
    • 绕过防火墙(外部禁止访问,但服务器可内部访问)
    • 通过 302 跳转、DNS rebinding 绕过限制规则
    • 访问敏感信息/敏感接口

5. DoS / DDoS 利用


  • 思路:利用 SSRF 让服务器对某个地址发大量请求
  • 利用点

    • 对目标外部站点发动反射型 DDoS
    • 大量请求消耗本地资源,导致目标服务器性能下降

危害等级典型场景说明低危外网 HTTP 请求、探测存活只能当跳板,没有直接危害中危内网端口扫描、敏感信息泄露可辅助内网渗透高危元数据服务访问、内网接口接管云凭证泄露、系统敏感接口暴露严重gopher 等协议利用 → Redis/DB 注入 → RCESSRF 直接变成远程命令执行三、修复与绕过

1. 严格限制协议


  • 修复措施

    • 仅允许 http/https 协议
    • 禁用 file://、gopher://、ftp://、dict:// 等危险协议

  • 绕过技巧

    • 协议变形:hTtP://、HtTpS://(大小写混合)
    • URL 伪装:http://127.0.0.1@evil.com/ 实际请求的是 evil.com,但看起来像访问内网
    • URL 编码:http://%31%32%37.0.0.1/

2. 限制可访问的目标地址


  • 修复措施

    • 拒绝内网 IP 段:127.0.0.0/8、10.0.0.0/8、172.16.0.0/12、192.168.0.0/16
    • 拒绝云服务元数据 IP:169.254.169.254、100.100.100.200 等

  • 绕过技巧

    • IP 表示绕过

      • 十进制:2130706433 = 127.0.0.1
      • 八进制:0177.0.0.1
      • 十六进制:0x7f.0x00.0x00.0x01
      • IPv6:[::ffff:127.0.0.1]

    • DNS Rebinding

      • a.evil.com 第一次解析 → 外网 IP
      • 稍后解析 → 内网 IP

    • 子域名绕过

      • 白名单 *.trusted.com
      • 攻击者注册 evil.trusted.com


3. DNS 解析安全


  • 修复措施

    • 使用固定解析器
    • 检查解析结果是否落在黑名单网段

  • 绕过技巧

    • DNS Rebinding(经典):短 TTL + 多次解析结果变化
    • DNS 响应污染:攻击者控制权威 DNS 伪造响应

四、补充说明

4.1 gopher协议

gopher 协议是什么


  • 原始用途:gopher 是 1990 年代早期的网络协议,用于客户端访问远程文件或目录。
  • 特点:它是 纯 TCP 协议,不像 HTTP 那样有复杂的封装,你可以直接发送任意字节到目标 TCP 服务。
  • 核心优势:可以构造 任意 TCP payload,不局限于文本或 HTTP 格式。
为什么gopher很危险

一些 SSRF 防护只限制 HTTP/HTTPS,但 gopher 可以访问 Redis、SMTP、MySQL 等 TCP 服务,直接发送payload实现利用。http/https协议大多时只能访问一些敏感信息,而gopher很多时候通过Redis可以直接RCE.
可利用服务举例:

  • Redis:写入恶意 key、修改 cron → RCE
  • SMTP:发送邮件 → 钓鱼或垃圾邮件
  • MySQL/PostgreSQL:执行 SQL 命令
  • FastCGI/PHP-FPM:发送请求触发命令执行
4.2 元数据服务

元数据服务是什么


  • 概念
    云平台(如 AWS、阿里云、腾讯云、GCP)为了让 云主机(虚拟机/容器) 获取自身信息,提供了一个 特殊的内网 HTTP 服务,称为 Instance Metadata Service (IMDS)。通常固定在内网保留地址:http://169.254.169.254/ ,这是一个特殊的 链路本地地址(只能在云主机内部访问)。
  • 作用

    • 提供主机自身信息(IP、主机名、地区)
    • 提供身份凭证(临时 Access Key / Token)
    • 提供用户自定义数据(User-Data,通常用于初始化脚本)

不同云厂商的元数据服务

云平台地址常见敏感路径AWShttp://169.254.169.254/latest/meta-data//iam/security-credentials/ 获取临时凭证GCPhttp://169.254.169.254/computeMetadata/v1/需要 Header:Metadata-Flavor: Google阿里云http://100.100.100.200/latest/meta-data//ram/security-credentials/ 获取凭证Azurehttp://169.254.169.254/metadata/instance?api-version=2021-01-01需要 Header:Metadata: true举个例子(AWS)

攻击者发现 SSRF,能访问任意 URL。

  • 利用 SSRF 访问:
    1. http://169.254.169.254/latest/meta-data/iam/security-credentials/
    复制代码
    返回角色名:
    1. my-ec2-role
    复制代码
  • 再访问:
    1. http://169.254.169.254/latest/meta-data/iam/security-credentials/my-ec2-role
    复制代码
    返回 JSON:
    1. {
    2.   "AccessKeyId": "AKIAxxx",
    3.   "SecretAccessKey": "xxx",
    4.   "Token": "xxx",
    5.   "Expiration": "2025-09-10T12:00:00Z"
    6. }
    复制代码
  • 这些凭证可用于调用 AWS API,比如:
    1. aws s3 ls --access-key ... --secret-key ... --token ...
    复制代码
五、实战案例

之后更新哈~

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

相关推荐

您需要登录后才可以回帖 登录 | 立即注册