大家在学习 Web 安全时,经常会听到一个词:

SSRF

很多人第一次看到这个漏洞都会疑惑:

“攻击者不是在互联网吗?为什么能访问公司的内网服务器?”

实际上,SSRF 最核心的思想只有一句话:让服务器替攻击者发送请求。

理解了这句话,SSRF 就不再神秘了。

一、什么是 SSRF

SSRF 全称:   Server Side Request Forgery

中文叫:服务器请求伪造。

原理是:服务器提供了从其他服务器应用获取数据的功能,但没有对目标地址做严格过滤限制,导致攻击者通过外网访问内网造成攻击。

简单来说:

本来应该由用户自己访问的网址,变成了服务器帮用户访问。

例如网站提供了一个图片抓取功能:

https://example.com/fetch?url=https://test.com/a.jpg

服务器收到参数后:

requests.get(url)

然后再把图片返回给用户。

正常情况下:

url=https://test.com/a.jpg

服务器会去访问:

https://test.com/a.jpg

但如果攻击者把参数改成:

https://test.com/a.jpg

服务器就会去访问自己。

这就产生了 SSRF。

二、SSRF 为什么危险

攻击者无法直接访问企业内网:

攻击者
    ↓
互联网
    ↓
公司防火墙
    ↓
内网服务器

但是企业服务器可以访问内网。

于是攻击流程变成:

攻击者
    ↓
存在SSRF漏洞的网站
    ↓
内网服务器

服务器变成了“中间人”,攻击者借助服务器身份进入内网。

三、一个典型案例

假设网站存在接口:

GET /api/image?url=

后台代码:

requests.get(url)

攻击者输入:

http://127.0.0.1

服务器访问:

http://127.0.0.1

如果返回内容:

Apache Default Page

说明服务器本机开启了 Web 服务。

攻击者成功访问到本机资源。

四、SSRF 能做什么

1. 探测内网

尝试访问:

http://192.168.1.1
http://192.168.1.2
http://192.168.1.3

根据响应结果判断:

  • 主机是否存在
  • 端口是否开放
  • 服务是否运行

这就是内网探测。

2. 扫描端口

尝试访问:

http://127.0.0.1:22
http://127.0.0.1:80
http://127.0.0.1:3306

观察:

  • 超时
  • 拒绝连接
  • 返回数据

判断目标端口状态。

3. 访问管理后台

很多后台只允许内网访问:

http://127.0.0.1/admin

外部用户打不开。

但服务器自己能打开。

于是 SSRF 可以帮助攻击者访问这些页面。

4. 获取云平台元数据

云服务器通常提供:

169.254.169.254

这样的特殊地址。

用于获取:

* 实例信息
* Access Key
* Token
* 云平台配置

这也是云环境中 SSRF 最经典的利用方式之一。

五、SSRF 常见危险函数

1.Python

requests.get()
urllib.request.urlopen()

2.PHP:

file_get_contents()
curl_exec()
fopen()

3.Java:

HttpURLConnection

只要程序允许用户控制访问地址,

就需要警惕 SSRF。

六、如何发现 SSRF

观察网站是否存在:

图片抓取

输入图片URL

文件导入

导入远程文件

在线预览

预览远程网页

RSS订阅

导入RSS地址

第三方资源同步

同步远程数据

这些功能都可能成为 SSRF 的入口。

七、SSRF 防御思路

白名单

只允许访问指定域名:

cdn.example.com
img.example.com

禁止访问其他地址。

禁止内网地址

过滤:

127.0.0.1
localhost
192.168.x.x
10.x.x.x
172.16.x.x

DNS解析校验

防止:

evil.com解析后指向:127.0.0.1从而绕过检测。

网络隔离

服务器权限最小化。

限制访问:

  • 内网
  • 数据库
  • 管理后台
  • 云平台接口

即使发生 SSRF 也难以进一步利用。

八、总结

SSRF 的本质并不复杂:

攻击者自己访问不了目标,于是让服务器替自己访问。

漏洞核心可以概括为:

学习 SSRF 时,不必一开始就研究复杂绕过技巧。

先理解:

  • 为什么服务器会帮我们访问
  • 为什么能探测内网
  • 为什么云环境害怕 SSRF

把这三个问题想明白,后面的内网扫描、云平台利用、绕过技巧都会容易很多。

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐