原文:https://www.yuque.com/1ncounter/courtyard/dfl8wd

什么是 SSRF 漏洞?

SSRF(Server-Side Request Forgery,服务端请求伪造)是指攻击者向服务端发送包含恶意 URL 链接的请求,借由服务端去访问此 URL ,以获取受保护网络内的资源的一种安全漏洞。SSRF 常被用于探测攻击者无法访问到的网络区域,比如服务器所在的内网,或是受防火墙访问限制的主机。

SSRF 漏洞的产生,主要是因为在服务端的 Web 应用,需要从其他服务器拉取数据资源,比如图片、视频、文件的上传/下载、业务数据处理结果,但其请求地址可被外部用户控制。

请求地址被恶意利用的话,如下图所示,就能够以服务端的身份向任意地址发起请求,如果是一台存在远程代码执行漏洞的内网机器,借助 SSRF 漏洞就可以获取该内网机器的控制权。

SSRF【转载】 - 图1

所以说,在 SSRF 漏洞面前,哪怕是外网隔离的内网机器也无法保证绝对的安全。

SSRF 的危害

基于前面介绍的 SSRF 原理,我们可以梳理出它可能出现的一些危害。

  • 内网探测:对内网服务器、办公机进行端口扫描、资产扫描、漏洞扫描。
  • 窃取本地和内网敏感数据:访问和下载内网的敏感数据,利用 File 协议访问服务器本地文件。
  • 攻击服务器本地或内网应用:利用发现的漏洞进一步发起攻击利用。
  • 跳板攻击:借助存在 SSRF 漏洞的服务器对内或对外发起攻击,以隐藏自己真实 IP。
  • 绕过安全防御:比如防火墙、CDN(内容分发网络,比如加速乐、百度云加速、安全宝等等)防御。
  • 拒绝服务攻击:请求超大文件,保持链接 Keep-Alive Always。

常见的利用与限制绕过方法

1.利用支持的 URL Schema 发起请求伪造

不仅仅只是常见的 http/https 协议,OWASP 曾整理过一份相对比较完整的 URL Schema,这里我发出来供你参考一下:

SSRF【转载】 - 图2

2.读取本地文件

除了 http/https 协议外,File 也是各场景通用的伪协议,利用它我们可以读取服务器的本地文件,比如 /etc/passwd、/proc/self/environ……

3.攻击内网应用漏洞

前期可以利用 SSRF 漏洞对内网存活 IP 或域名进行漏洞扫描。以前在公司就曾遇到过这样一种情况:有些业务为了测试,在内网搭建了一些存在漏洞;或是有漏洞没有及时修复,理由是在内网没影响。然后,有一些被外部 SSRF 漏洞打进来了,利用了 Struts2 漏洞控制了内网服务器。

4.绕过 IP 限制

有些网站可能会限制访问 IP,此时就可以尝试使用以下方法绕过:

5.绕过 URL 解析限制

如果存在 URL 限制,可以尝试以下方法绕过:

SSRF 漏洞挖掘思路

1.如何判断是否存在 SSRF 漏洞

判断 SSRF 漏洞是否存在,主要有以下 4 种方式:

  • 回显判断:如有返回请求结果并会显示出来,这种比较好判断。
  • 访问日志检查:伪造请求到自己控制的公网服务器,然后在服务器上查看访问日志是否有来自漏洞服务器的请求,或者直接使用命令“nc -lvp”来监听请求。
  • 延时对比:对比访问不同 IP/域名的访问时长,比如对百度与 Google(国内访问受限)的访问时间,访问百度的时间通常比Google快,若是则可能存在漏洞。
  • DNS 请求检测:自己搭建 DNS 服务器,或者利用网上的 DNSLog 服务(比如http://www.dnslog.cn/),生成一个域名(l08bgh.dnslog.cn)用于伪造请求,看漏洞服务器是否发起 DNS 解析请求,若成功访问在 DNSLog.cn 上就会有解析日志。

2.容易出现 SSRF 漏洞的业务场景

  • 凡是能够对外发起网络请求的地方,且地址可被用户可控的,都有可能存在 SSRF 漏洞。 比如 RSS 订阅、字幕下载、支持输入 URL 的功能、嵌入远程图片、收取第三方邮箱邮件。一些不明显的地方,可以通过爬包分析,从参数名来猜测,比如 url、domain、site、src、target 等常见关键词来做进一步地测试验证。
  • 文件处理功能。 比如负责处理音视频的 ffmpeg,负责处理图片的 ImageMagic、处理办公文件的Office,PDF 文档解析功能,还有 XML 解析器等地方,尤其是 ffmpeg 和 ImageMagic,它们曾多次出现过 SSRF 漏洞。
  • 社交分享功能, 社交分享也是容易出现 SSRF 漏洞的地方。
  • 信息采集功能,比如图片、文章收藏、网页快照、网页翻译、网页剪裁。

SSRF 漏洞防御

有时基于业务功能需要,无法完全限制对外网络请求的功能,这就一定要依据业务场景做一些灵活的变通,不可一刀切。

这里介绍一些常用的 SSRF 防御方法:

  • 采用白名单限制,只允许访问特定的 IP 或域名,比如只允许访问拉勾网域名 *.lagou.com;
  • 限制内网 IP 访问,常见的内网 IP 段有 10.0.0.0 - 10.255.255.255、172.16.0.0 - 172.31.255.255、192.168.0.0 - 192.168.255.255;
  • 禁用一些不必要的协议,比如 file://、gopher://、dict://。

另外关闭错误回显、关闭高危端口、及时修复漏洞,哪怕它是处于内网环境,都有助于缓解 SSRF 漏洞的进一步利用。