服务端请求伪造漏洞
1.SSRF概述
2.SSRF漏洞的挖掘
3.SSRF漏洞挖掘
4.SSRF漏洞防御
SSRF(Server-Side Request Forgery)服务端请求伪造,是一种由攻击者构造请求,由服务器端发起请求的安全漏洞,本质上是属于信息泄露的漏洞。
SSRF漏洞原理:很多WEB应用都提供了从其他的服务器上获取数据的功能。使用用户指定的URL,WEb应用可以获取图片,下载文件,读取文件内容等。这个功能如果被恶意利用,可以利用存在缺陷的WEB应用作为代理攻击远程和本地的服务器。一般情况下,SSRF攻击的目标是外网无法访问的内部系统,黑客可以利用SSRF漏洞获取内部系统的一些信息。(正是因为它是由服务端发起的请求,所以它能够请求到它相连而与外网隔离的内部系统)SSRF形成的原因大多是因为由于服务端提供了从其他服务器应用获取数据的功能且没有对目标地址做过滤与限制。比如从指定的URL地址获取网页文本内容,加载指定地址的图片,下载等等。
SSRF的主要攻击方式如下: 攻击者想要访问主机B上的服务,但是由于存在防火墙或者主机B是属于内网主机等原因导致攻击者无法直接访问主机B,而主机A存在SSRF漏洞,这时攻击者可以借助主机A来发起SSRF攻击,通过主机A向主机B发起请求,从而获取主机B的一些信息。

1.利用file协议读取本地文件 2.对服务器所在内网、本地进行端口扫描,获取一些服务的banner信息。 3.攻击运行在内网或本地的应用程序。 4.对内网web应用进行指纹识别,识别企业内部的资产信息。 5.攻击者对外网的web应用,主要是使用HTTP GET请求就可以实现的攻击。
1.通过分享功能:通过URL地址分享网页内容,在早期分享应用中,为了更好的提供用户体验,WEB应用在分享功能中,通常会获取目标URL地址网页内容中的<title></title>标签或者<meta name="description" content=""/>标签中的文本内容作为显示以提供更好的用户体验。例如:人人网分享功能中: http://widget.renren.com/*?resourceURL=https://www.nsfocus.com 通过目标URL地址获取了title标签和相关的文本内容。而如果此功能没有对目标地址的范围做过滤与限制则就会存在SSRF漏洞。 2.转码服务:通过URL地址加载或者下载图片,图片加载远程图片地址此功能用到的地方很多,但大多数比较隐匿,比如在有些公司中的加载自家图片的服务器上的图片用于展示。 开发者为了更好的用户体验通常对图片进行微小调整例如图片水印,压缩等,所以就可能存在SSRF漏洞。 3.在线翻译:通过URL地址翻译对应的文本内容。提供此功能的国内有百度,有道等。 4.图片,文章的收藏功能:此处的图片,文章收藏中的文章就类似于分享功能中获取URL地址中的title以及文本内容作为显示,目的还是为了更好的用户体验,而收藏图片就类似于图片加载. 5.未公开的api实现以及其他调用URL的功能:此处类似的功能有360提供的网站评分,以及有的网站通过api获取远程地址xml文件来加载内容。
如果看到了存在URL类似的参数的话,就可以尝试是否存在SSRF漏洞,以下是常见的URL中的关键字: share wap url src link source target u 3g display
测试目标网站支持的伪协议: 现在服务器上有一个ssrf.php的页面,该页面的功能是获取URL参数,然后将URL内容显示到网页上面。
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_HEADER,0);程序获取url参数,通过curl_init()初始化curl组件之后,将参数URL带入curl_setopt(ch,CURLOPT_URL,url),然后调用curl_exec请求该URL,由于服务端会将bannner信息返回给客户端,所以可根据banner判断主是否存在某些服务。
Banner信息,欢迎语,在banner信息中可以得到软件开发商,软件名称、版本、服务类型等信息,通过这些信息可以使用某些工具直接去使用相对应的exp去攻击。
举例:http://127.0.0.1/ssrf.php?url=http://127.0.0.1/test.php 这将会使test.php页面显示 如果将后面的参数修改为:https://www.baidu.com页面就会显示百度的页面 于是可以用这个将URL参数换成内网的地址,则会泄露内网的信息。将URL换成; file://的形式,就可以读取本地文件,这和文件包含漏洞很类似,这将使我们可以读取到服务器的host文件的信息: http://127.0.0.1/ssrf.php?url=file:///C:Windows/System32/drivers/etc/hosts
1.限制请求的端口只能为web端口,只允许访问http和https的请求(禁止掉file协议)
2.限制不能访问的内网ip,以防止对内网进行攻击
3.屏蔽返回的详细信息