SSRF漏洞
概述:SSRF 漏洞说明,原理、挖掘点、漏洞利用、修复建议
0x01 介绍 SSRF 漏洞
SSRF (Server-Side Request Forgery,服务器端请求伪造)是一种由攻击者构造请求,由服务端发起请求的安全漏洞。一般情况下,SSRF 攻击的目标是外网无法访问的内部系统(正因为请求是由服务端发起的,所以服务端能请求到与自身相连而与外网隔离的内部系统)。
通俗的说:就是我们传递参数,服务器代替我们去访问。
0x02 SSRF 漏洞原理
SSRF 的形成大多是由于服务端提供了从其他服务器应用获取数据的功能且没有对目标地址做过滤与限制。例如,黑客操作服务端从指定 URL 地址获取网页文本内容,加载指定地址的图片等,利用的是服务端的请求伪造。SSRF 利用存在缺陷的 Web 应用作为代理攻击远程和本地的服务器。
主要攻击方式如下所示。
- 对外网、服务器所在内网、本地进行端口扫描,获取一些服务的 banner 信息。
- 攻击运行在内网或本地的应用程序。
- 对内网 Web 应用进行指纹识别,识别企业内部的资产信息。
- 攻击内外网的 Web 应用,主要是使用 HTTP GET 请求就可以实现的攻击(比如 struts2、SQli 等)。
- 利用 file 协议读取本地文件等。
http://payloads.net/ssrf.php?url=192.168.1.10:3306
http://payloads.net/ssrf.php?url=file:///c:/windows/win.ini
SSRF 漏洞验证方式
- 排除法:浏览器 f12 查看源代码看是否是在本地进行了请求
比如:该资源地址类型为 http://www.xxx.com/a.php?image=URL,URL参数若是其他服务器地址就可能存在SSRF漏洞
-
dnslog 等工具进行测试,看是否被访问(可以在盲打后台,用例中将当前准备请求的 url 和参数编码成 base64,这样盲打后台解码后就知道是哪台机器哪个 cgi 触发的请求)
-
抓包分析发送的请求是不是通过服务器发送的,如果不是客户端发出的请求,则有可能是存在漏洞。接着找存在 HTTP 服务的内网地址
-
从漏洞平台中的历史漏洞寻找泄漏的存在 web 应用内网地址
-
通过二级域名暴力猜解工具模糊猜测内网地址
-
通过 file 协议读取内网信息获取相关地址
-
-
直接返回的 Banner、title、content 等信息
-
留意布尔型 SSRF,通过判断两次不同请求结果的差异来判断是否存在 SSRF,类似布尔型 sql 盲注方法。
0x04 SSRF 漏洞利用方式
- 能扫描内部网络,获取端口,服务信息。
- 攻击运行在内网或本地的应用程序。
- 对内网 web 进行指纹识别
- 对内部主机和端口发送请求包进行攻击
- file 协议读取本地文件
0x05 SSRF 漏洞挖点
- 社交分享功能:获取超链接的标题等内容进行显示
- 转码服务:通过 URL 地址把原地址的网页内容调优使其适合手机屏幕浏览
- 在线翻译:给网址翻译对应网页的内容
- 图片加载/下载:例如富文本编辑器中的点击下载图片到本地;通过 URL 地址加载或下载图片
- 图片/文章收藏功能:主要其会取 URL 地址中 title 以及文本的内容作为显示以求一个好的用具体验
- 云服务厂商:它会远程执行一些命令来判断网站是否存活等,所以如果可以捕获相应的信息,就可以进行 ssrf 测试
- 网站采集,网站抓取的地方:一些网站会针对你输入的 url 进行一些信息采集工作
- 数据库内置功能:数据库的比如 mongodb 的 copyDatabase 函数
- 邮件系统:比如接收邮件服务器地址
- 编码处理, 属性信息处理,文件处理:比如 ffpmg,ImageMagick,docx,pdf,xml 处理器等
- 未公开的 api 实现以及其他扩展调用 URL 的功能:可以利用 google 语法加上这些关键字去寻找 SSRF 漏洞
- 从远程服务器请求资源(upload from url 如 discuz!;import & expost rss feed 如 web blog;使用了 xml 引擎对象的地方 如 wordpress xmlrpc.php)