##介绍SSRF漏洞
SSRF(Server-Side Request Forgery,服务器端请求伪造),是一种由攻击者构造请求,由服务端发起请求的安全漏洞。一般情况下,SSRF攻击的目标是外网无法访问的内部系统(正因为请求是由服务端发起的,所以服务端能请求到与自身相连而与外网隔离的内部系统)。
##环境搭建
<meta http-equiv="content-type" content="text/html;charset=utf-8"> <p>SSRF漏洞,传递参数url,展示漏洞。</p> <?php function curl($url){ $ch = curl_init(); //初始化一个curl会话 curl_setopt($ch, CURLOPT_URL, $url); //需要获取的url地址 curl_setopt($ch, CURLOPT_HEADER, 0); //将头文件的信息作为数据流进行传输 curl_exec($ch); //抓取url并将其传递给浏览器 curl_close($ch); //关闭curl资源,并释放系统资源 } $url = $_GET['url']; curl($url); ?>
打开之后,如下所示:
我们按照要求传递参数url,进行请求 ,请求目标站点 www.baidu.com
返回如下:
由图中,可以看出,我们确实成功访问了百度,但是这次访问的请求方不是我本身,而是10.144.43.152这台服务器 。这台服务器就相当于我们的代理跳板,打个比方说,我们利用其去攻击一个网站,被攻击的网站会查到攻击流量来自 10.144.43.152,而不是来自攻击者我们本身,起到了一个很好的隐匿作用。
##SSRF漏洞原理
SSRF的形成大多是由于服务端提供了从其他服务器应用获取数据的功能且没有对目标地址做过滤与限制。例如,黑客操作服务端从指定URL地址获取网页文本内容,加载指定地址的图片等,利用的是服务端的请求伪造。SSRF利用存在缺陷的Web应用作为代理攻击远程和本地的服务器。
##SSRF漏洞常见位置
凡是存在外部资源调用的地方都有可能存在SSRF漏洞。
- 分享:通过URL地址分享网页内容
- 转码服务
- 在线翻译
- 图片加载与下载:通过URL地址加载或下载图片
- 图片、文章收藏功能
- 未公开的api实现以及其他调用URL的功能
- 从URL关键字中寻找
- share
- wap
- url
- link
- src
- source
- target
- u
- 3g
- display
- sourceURI
- imageURL
- domain
- ……
##SSRF漏洞利用
- 内外网的端口和服务扫描,获取服务的banner信息。
- 攻击运行在内网或本地的应用程序。
- 对内网Web应用进行指纹识别,识别企业内部的资产信息。
- 攻击内外网使用HTTP-GET请求就可以实现的攻击(例如Struts2、SQli)
- 利用file协议读取本地文件等。
利用
http://10.144.43.152/ssrf.php?url=file:///C:/Windows/win.ini
进行本地文件读取。
利用 http://10.144.43.152/ssrf.php?url=http://127.0.0.1:3306
进行本地端口检测
那还有没有一些骚骚的利用方法呢?
- 查找服务器真实IP
- 可以做http代理
- 利用xss,盗取cookie
- 可以去请求一个大文件,以造成DDOS攻击
- 可利用401认证,盗取账号密码
- ……
其实,利用方法很多,最重要的还是自己在实战中去积累经验。
##SSRF漏洞修复
- 限制请求的端口只能为Web端口,只允许访问HTTP和HTTPS的请求。
- 限制不能访问内网IP
- 屏蔽掉返回的详细信息。