目录
前言
大家好,我是韧雨,今天给大家分享ssrf攻击的相关内容。相信大家大致了解csrf这种攻击方式,那么恭喜你,你离掌握ssrf攻击只差这一篇博客。话不多说,给您献上。
SSRF漏洞原理
SSRF(Server-Side Request Forgery,服务器端请求伪造)是一种由攻击者构造请求,由服务器端发起请求的安全漏洞,本质上是属于信息泄露漏洞。ssrf攻击的目标是从外网无法访问的内部系统,正是因为他是有服务器端发起的,所以他能够请求到与他相连而与外网隔离的内部系统。
很多web应用都提供了从其他的服务器上获取数据的功能(百度识图,给出一串URL就能识别出图片)。使用用户指定的URL,web应用可以获取图片,下载文件,读取文件内容等。这个功能如果被恶意使用,可以利用存在缺陷的web应用作为代理,攻击远程和本地的服务器。一般情况下, SSRF攻击目标是外网无法访问的内部系统,黑客可以利用SSRF漏洞获取内部系统的一些信息。
漏洞成因:SSRF 形成的原因大都是由于服务端提供了从其他服务器应用获取数据的功能且没有对目标地址做过滤与限制 。比如从指定URL地址获取网页文本内容,加载指定地址的图片,下载等等。 正是因为它是由服务端发起的,所以它能够请求到与它相连而与外网隔离的内部系统 。
举一个简单的例子,相信大家用过在线的有道翻译吧,其实这个网站也存在一个简单的ssrf攻击:
如在翻译框中输入:http://www.baidu.com
结果显示:
SSRF漏洞危害
1. 利用file协议读取本地文件;
2. 对服务器所在内网、本地进行端口扫描,获取一些服务的banner信息;
3. 攻击运行在内网或本地的应用程序;
4. 对内网web应用进行指纹识别,识别企业内部的资产信息;
5. 攻击内外网的web应用,主要是使用HTTP GET请求就可以实现的攻击。
SSRF之Pikachu靶场
下面以SSRF之curl进行漏洞利用的介绍 , SSRF(file_get_content)也差不多,通过
srf_fgc.php?file=php://filter/read=convert.base64-encode/resource=http://192.168.60.7:88/2.php ,即可以以base64的方式进行文件内容的读取(获取不到源码)
发现通过本机向另外一个地址发起了http请求,请求读取目标主机的一个文件。上面说了SSRF漏洞的原理是服务端提供了一个从别的机器读取文件的功能,且没有对目标地址做过滤导致了漏洞的发生。他攻击的是从外网不能直接访问的内部系统。这里我们就搭建一个内网环境来深入了解这个漏洞。
源码解读:
pikachu ssrf主要源码如上,通过curl_init函数获取url内容,再返回给浏览器,但是这里传递url的时候没有做任何的过滤,导致了ssrf漏洞。
SSRF利用方式
通过访问主机B的内容,由于主机B存在SSRF漏洞,所以可以通过主机B来攻击主机C。
1. 读取内网中其他主机的文件。
假如百度的robots.txt文件时内网中某一个敏感文件,则可以通过ssrf漏洞读取这个文件:
2. 执行端口扫面
想探测主机C开放了哪些端口,通过dict协议读取端口状态,
利用方式:dict://ip地址:端口 。 当内网主机C开放了某个端口时,服务器立即响应进行页面刷新
如:
3.读取系统的本地文件:
利用方式如:url=file:///+文件绝对路径(前提时php版本支持file协议)
4.攻击内网其他的应用
假如:内网web服务存在一个命令执行的漏洞,通过SSRF即可以进行远程命令执行,比如可以让其执行shell反弹,进而实现后续操作。
SSRF防御方式
1. 过滤返回的信息,特别是要注意如果web应用是去获取某一种类型的文件,那么在把返回结果展示给用户之前一定要验证是否涉及到敏感信息字样;
2. 规避错误信息,避免用户可以根据错误信息来判断远程服务器的端口状态;
3. 限制一些敏感的请求端口,比如80、443等;
4. 禁止不常用的协议,仅仅允许http和https请求。可以防止类似于file:///,gopher://,ftp://等引起的问题;
5. 使用DNS缓存或者Host白名单的方式,限制对非常敏感的主机资源的请求。