1.介绍SSRF漏洞
SSRF (Server-Side Request Forgery,服务器端请求伪造)是一种由攻击者构造请求,由服务端发起请求的安全漏洞。一般情况下,SSRF攻击的目标是外网无法访问的内部系统(正因为请求是由服务端发起的,所以服务端能请求到与自身相连而与外网隔离的内部系统)。
2.SSRF漏洞原理
SSRF的形成大多是由于服务端提供了从其他服务器应用获取数据的功能且没有对目标地址做过滤与限制。例如,黑客操作服务端从指定URL地址获取网页文本内容,加载指定地址的图片等,利用的是服务端的请求伪造。SSRF利用存在缺陷的Web
应用作为代理攻击远程和本地的服务器。
主要攻击方式如下所示。
- 对外网、服务器所在内网、本地进行端口扫描,获取一些服务的banner信息。
- 攻击运行在内网或本地的应用程序。
- 对内网Web应用进行指纹识别,识别企业内部的资产信息。
- 攻击内外网的Web应用,主要是使用HTTP GET请求就可以实现的攻击(比如struts2、SQli等)。
- 利用file协议读取本地文件等。
http://www.xingkonglangzi.com/ssrf.php?url=192.168.1.10:3306
http://www.xingkonglangzi.com/ssrf.php?url=file:///c:/windows/win.ini
3.SSRF漏洞点挖掘
1.分享:通过URL地址分享网页内容
2.转码服务(通过URL地址把原地址的网页内容调优,使其适合手机屏幕的浏览)
3.在线翻译
4.图片加载与下载:通过URL地址加载或下载图片
5.图片、文章收藏功能
6.未公开的api实现及调用URL的功能
7.从URL关键字中寻找
关键字:
- Share、wap、url、link、src、source、target、u、3g、display、sourceURL、imageURL、domain
Demo:
<?php function curl($url){ $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HEADER, 0); curl_exec($ch); curl_close($ch); } $url = $_GET['url']; curl($url); ?>
这里的构成可以通过 url参数接收,去尝试请求内网资源
http://localhost/?url=file:///c:\\AppleBcInstaller.log
file协议利用
其余协议后面更新
gopher,SSRF攻击Redis等
简单列两种方式
通过分享点来查找
右键图片新窗口打开
4.SSRF漏洞绕过方法
1.@ http://abc.com@127.0.0.1
2.添加端口号 http://127.0.0.1:8080
3.短地址 https://0x9.me/cuGfD
4.可以指向任意ip的域名 xip.io
5.ip地址转换成进制来访问 192.168.0.1=3232235521(十进制)
6.非HTTP协议
7.DNS Rebinding
@:
http://www.baidu.com@10.10.10.10 与 http?/10.10.10.10 请求是相同的
过滤绕过
IP地址转换成十进制:
127.0.0.1 先转换为十六进制 7F000001 两位起步所以 1就是01
7F000001转换为二进制
127.0.0.1=2130706433 最终结果
还有根据域名判断的,比如xip.io域名,就尝试如下方法
xip.io
xip.io127.0.0.1.xip.io -->127.0.0.1
www.127.0.0.1.xip.io -->127.0.0.1
Haha.127.0.0.1.xip.io -->127.0.0.1
Haha.xixi.127.0.0.1.xip.io -->127.0.0.1
5.SSRF修复建议
- 限制请求的端口只能为Web端口,只允许访问HTTP和HTTPS的请求。
- 限制不能访问内网的IP,以防止对内网进行攻击。
- 屏蔽返回的详细信息。