SSRF是什么:
SSRF(Server-Side Request Forgery:服务器端请求伪造)是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。一般情况下,SSRF攻击的目标是从外网无法访问的内部系统(大厂商的内网)。
SSRF产生原因:
SSRF形成的原因大都是由于服务端提供了从其他服务器应用获取数据的功能且没有对目标地址做过滤与限制。
比如从指定URL地址获取网页文本内容、加载指定地址的图片、下载等
常见产生点:
1.weblogic中间件
2.php代码
file_get_content()、curl-curl_exec()、socket-fsockopen()
3.ffmpeg软件
SSRF利用:
1.可以对外网、服务器所在内网、本地进行端口扫描,获取一些服务的banner信息
2.攻击运行在内网或本地的应用程序(比如:溢出)
3.对内网web应用进行指纹识别,通过访问默认文件实现
4.攻击内外网的web应用,主要是使用get参数就可以实现的攻击(比如:Struts2,sqli等)
5.利用file协议读取本地文件等
实例:(以下为乌云实例,需要乌云镜像)
红岭创投某站配置不当导致SSRF可探测内网架构
盛大某站存在SSRF可读取本地文件&探测内网
新浪某站任意文件读取/SSRF
有道翻译某处SSRF可通网易内网
中国联通WLAN登录系统SSRF
腾讯朋友网某处SSRF
如何挖掘SSRF漏洞:
从web功能上寻找
分享:通过URL地址分享网页内容
转码服务:通过URL地址把原地址的网页内容调优使其适合手机屏幕浏览
在线翻译:通过URL地址翻译对应文本的内容
图片加载与下载:通过URL地址加载或下载图片
图片、文章的收藏功能
等等
从URL关键字寻找
share、wap、url、link、src、source、target、u3g、display、sourceURL、imageURL、domain 等等
SSRF漏洞的验证:
排除法:
看请求是谁发送的--如果是服务端发起的请求,在本地浏览器的请求中就不存在对目标(图片等)的请求
验证是否可以探测内网:
验证看看此URL是否可以请求对应的内网地址。首先要获取内网存在HTTP服务并且存在favicon.ico文件的地址,才可以验证
找存在HTTP服务的内网地址:
1.从漏洞平台的历史漏洞寻找泄露的存在web应用的内网地址
2.通过二级域名暴力猜解工具模糊猜测内网地址
过滤绕过:
使用@:a.com@10.10.10.10 a.com:b@10.10.10.10
IP地址转换成进制:127.0.0.1 = 2130706433 115.239.210.26 = 16373751032
使用短地址来生成内网地址:http://10.10.116.11 = http://t.cn/RwbLKDx
端口绕过:内网编织者、http://tieba.baidu.com/f/commit/share/openShareApi?url=http://10.50.33.43:8080/
xip.io:xxx.127.0.0.1.xip.io = 127.0.0.1、foo.bar.10.0.0.1.xip.io = 10.0.0.1
通过JS跳转:
修复方案:
1.过滤返回信息,验证远程服务器队请求的响应是比较容易的方法
如果web应用是去获取某一种类型的文件。那么再把返回的结果展示给用户之前先验证返回的信息是否符合标准
2.统一错误信息,避免用户可以根据错误信息来判断远端服务器的端口状态
3.闲置请求的端口为http常用的端口,比如:80、443、8080、8090
4.黑名单内网IP,避免应用被用来获取内网数据,攻击内网
5.禁用不需要的协议,仅允许http和https的请求
自动化挖掘:
burpsuite插件自动化监测
拓展:
SSRF攻击实例解析:http://www.freebuf.com/articles/web/20407.html
利用SSRF漏洞接管APP服务器:http://bobao.360.cn/learning/detail/2870.html
SSRF漏洞的挖掘经验:https://sobug.com/article/detail/11
已经被发现的常见漏洞场景:
weblogic配置不当,默认存在SSRF漏洞
discuz x2.5/x3.0/x3.1/x3.2 SSRF漏洞
CVE-2016-1897/8 - FFMpeg
CVE-2016-3718 - ImageMagick