SSRF漏洞是一种在未能获取服务器权限时,利用服务器漏洞,由攻击者构造请求,服务器端发起请求的安全漏洞,攻击者可以利用该漏洞诱使服务器端应用程序向攻击者选择的任意域发出HTTP请求。
很多Web应用都提供了从其他的服务器上获取数据的功能,根据用户指定的URL,Web应用可以获取图片、下载文件、读取文件内容等。这种功能如果被恶意使用,将导致存在缺陷的Web应用被作为代理通道去攻击本地或远程服务器。这种形式的攻击被称为服务端请求伪造攻击。
一般情况下,SSRF攻击的目标是外网无法访问的内部系统,所以web安全测试显得特别重要!
SSRF的形成大多是由于服务端提供了从其他服务器获取数据的功能,但是没有对目标地址进行过滤和限制。
主要攻击方式:
1.对外网、服务器所在内网、本地进行端口扫描,获取一些服务的banner信息。
2.攻击运行在内网或者本地的应用程序。
3.对内网的web应用进行指纹识别(通过请求默认文件得到特定的指纹),对资产信息进行识别。
4.利用file协议读取本地文件。
5.攻击内外网的web应用,主要是使用HTTP GET请求就可以实现的攻击等。
目前常见的漏洞挖掘方式有两种:
1、从web功能上挖掘
①分享:通过url地址分享网页内容
②转码服务
③在线翻译
④图片的下载与加载
⑤图片、文章收藏功能
⑥未公开的API实现及调用URL的功能
2、从URL关键字挖掘
Share、wap、url、link、src、source、target、u、3g、display、sourceURL、imageURL、domain……
SSRF攻击通常利用信任关系来进行攻击并执行未经授权的操作。这些信任关系可能与服务器本身有关,也可能与同一系统内的其他后端系统有关。
3.1、针对服务器本身的SSRF攻击
在针对服务器本身的SSRF攻击中,攻击者诱使应用程序通过其环回网络接口向承载应用程序的服务器发出HTTP请求。通常,这将涉及为URL提供一个主机名,例如127.0.0.1(指向回送适配器的保留IP地址)或localhost(同一适配器的常用名称)。
3.2、针对其他后端系统的SSRF攻击
SSRF引起的另一种信任关系是:服务器能够与用户无法直接访问的其他后端系统进行交互,这些系统通常具有不可路由的专用IP地址。由于后端系统通常受网络拓扑保护,因此它们的安全状态较弱。在许多情况下,内部后端系统包含敏感功能,能够与该系统进行交互的任何人都可以在不进行身份验证的情况下对其进行访问。
4.1、绕过利用黑名单防御
一些应用程序阻止包含主机名(如127.0.0.1和localhost)或敏感URL(如/admin)的输入/admin。在这种情况下,绕过方法如下:
1、替代IP127.0.0.1,例如2130706433、017700000001、127.1。
2、注册您自己的域名,该域名解析为127.0.0.1。您可以spoofed.burpcollaborator.net用于此目的。
3、使用URL编码或大小写变化对阻塞的字符串进行混淆。
4.2、绕过利用白名单的防御
某些应用程序仅允许输入匹配,以允许值开头或包含允许值的白名单的输入。在这种情况下,您有时可以利用URL解析中的不一致来绕过过滤器。
URL规范包含许多功能,在实现URL的临时分析和验证时可能会被忽略:
1、使用@字符在主机名之前的URL中嵌入凭据。例如:https://expected-host@evil-host。
2、使用该#字符来指示URL片段。例如:https://evil-host#expected-host。
3、利用DNS命名层次结构将所需的输入放入DNS名称中。例如:https://expected-host.evil-host。
4、使用URL编码字符来混淆URL解析代码,如果实现过滤器的代码与执行后端HTTP请求的代码以不同的方式处理URL编码的字符,则特别有用。
5、这些技术可以组合在一起使用。
3、通过开放重定向绕过SSRF过滤器
通过利用开放重定向漏洞,有时可以绕过任何基于过滤器的防御。
SSRF漏洞的防御主要是保证用户请求的合法性、服务器行为的合规性两个方面。
1、限制请求端口只能为web端口,只允许访问HTTP和HTTPS的请求;
2、过滤返回的信息;
3、禁止不常使用的端口;
4、限制不能访问内网的IP,防止对内网进行攻击;
5、对于DNS重绑定,使用DNS缓存或者Host白名单