什么是 SSRF
服务器端请求伪造(SSRF)是指攻击者能够从易受攻击的Web应用程序发送精心设计的请求的对其他网站进行攻击。(利用一个可发起网络请求的服务当作跳板来攻击其他服务)
简单理解就是:
攻击者能够利用目标帮助攻击者访问其他想要攻击的目标
A让B帮忙访问C
为什么会产生SSRF漏洞?
很多web应用都提供了从其他的服务器上获取数据的功能。使用用户指定的URL,web应用可以获取图片,下载文件,读取文件内容等。且没有对目标地址做过滤与限制,就产生了SSRF
这个功能如果被恶意使用,可以利用存在缺陷的web应用作为代理攻击远程和本地的服务器。这种形式的攻击称为服务端请求伪造攻击,简称SSRF。例子如下,百度识图:
地址栏提供了让我们输入url的接口,然后系统去访问,这里是做过防护的,如果没有防护,我们就可以直通内网。
SSRF的利用场景
1 首先了解到的是存在SSRF漏洞的服务器,可以当成我们的一个跳板,去测试其他服务器
2 如果一个公司内网外网不是物理隔离,可以通过这台服务器进行内网探测存活主机及端口,这应该属与信息搜集
3 可以对内网Web应用进行指纹识别,原理是通过请求默认的文件得到特定的指纹,这也是属于信息搜集,而且也是把漏洞服务器当成一个跳板
4 SSRF本身是支持很多协议的,通过一些函数,如fsockopen()、file_get_contents()、curl_exec()造成的SSRF漏洞,可以让我们对本地的敏感文件进行读取
ssrf 的防御方法
1、过滤返回信息,验证远程服务器对请求的响应是比较容易的方法。如果web应用是去获取某一种类型的文件。那么在把返回结果展示给用户之前先验证返回的信息是否符合标准。
2、统一错误信息,避免用户可以根据错误信息来判断远端服务器的端口状态。
3、限制请求的端口为http常用的端口,比如,80,443,8080,8090。
4、黑名单内网ip。避免应用被用来获取获取内网数据,攻击内网。
5、禁用不需要的协议。仅仅允许http和https请求。可以防止类似于file:///,gopher://,ftp:// 等引起的问题。
XSS、CSRF、SSRF的区别
相同点:
XSS,CSRF,SSRF三种常见的Web服务端漏洞均是由于,服务器端对用户提供的可控数据过于信任或者过滤不严导致的。
不同点:
XSS:是服务器对用户输入的数据没有进行足够的过滤,导致客户端浏览器在渲染服务器返回的html页面时,出现了预期值之外的脚本语句被执行。
CSRF:是服务器端没有对用户提交的数据进行随机值校验,且对http请求包内的refer字段校验不严,导致攻击者可以利用用户的Cookie信息伪造用户请求发送至服务器。
SSRF:是服务器对用户提供的可控URL过于信任,没有对攻击者提供的RUL进行地址限制和足够的检测,导致攻击者可以以此为跳板攻击内网或其他服务器。
XSS、CSRF的区别
- CSRF是跨站请求伪造; XSS是跨域脚本攻击。
- CSRF需要用户先登录网站A,获取cookie; XSS不需要登录。
- CSRF是利用网站A本身的漏洞,去请求网站A的api; XSS是向网站A注入JS代码,然后执行JS里的代码,篡改网站A的内容。(XSS利用的是站点内的信任用户,而CSRF则是通过伪装来自受信任用户的请求来利用受信任的网站。你可以这么理解CSRF攻击:攻击者盗用了你的身份,以你的名义向第三方网站发送恶意请求。)