服务器端请求伪造,是一种由攻击者构造,从而让服务端发起请求的一种安全漏洞,它将一个发起网络请求的服务当做跳板来攻击其他服务,SSRF的攻击目标一般是内网。当服务端提供了从其他服务器获取数据的功能(例如从指定URL获取网页文本内容、加载指定地址的图片、下载等),但是没有对目标地址做过滤与现实时就会出现SSRF。SSRF (Server-Side Request Forgrey):
很多网站提供了从其他服务器上获取数据的能力,该功能被恶意使用,可以利用存在缺陷的web应用作为代理攻击远程和本地的服务器。SSRF的危害:
- 可以扫描内部网络
- 可以构造数据攻击内部主机
漏洞挖掘
其实只要能对外发起网络请求就有可能存在SSRF漏洞。
- 从WEB功能上寻找
通过URL分享内容
文件处理、编码处理、转码等服务
在线翻译
通过URL地址加载与下载图片
图片、文章的收藏
设置邮件接收服务器 - 从URL关键字寻找
share、wap、url、link、src、source、target、u、3g、
display、sourceURl、imageURL、domain…
- 右键在新窗口打开图片,若浏览器上URL地址为http://www.baidu.com/img/bd_logo1.png,
说明不存在SSRF漏洞。 - firebug看网络连接信息,若没有http://www.baidu.com/img/bd_logo1.png
这个图片请求,则证明图片是豆瓣服务端发起的请求,则可能存在SSRF漏洞。
- 绕过过滤
有时漏洞利用时会遇到IP限制,可用如下方法绕过: - 使用@:http://A.com@10.10.10.10 = 10.10.10.10
- IP地址转换成十进制、八进制:127.0.0.1 = 2130706433
- 使用短地址:http://10.10.116.11 = http://t.cn/RwbLKDx
- 端口绕过:ip后面加一个端口
- xip.io:10.0.0.1.xip.io = 10.0.0.1
www.10.0.0.1.xip.io = 10.0.0.1
mysite.10.0.0.1.xip.io = 10.0.0.1
foo.bar.10.0.0.1.xip.io = 10.0.0.1 - 通过js跳转
- 通用的SSRF实例
- weblogin配置不当,天生ssrf漏洞
- discuz x2.5/x3.0/x3.1/x3.2 ssrf漏洞
- CVE-2016-1897/8 - FFMpeg
- CVE-2016-3718 - ImageMagick
- 如何防御
通常有以下5个思路:
- 过滤返回信息,验证远程服务器对请求的响应是比较容易的方法。如果web应用是去获取某一种类型的文件。那么在把返回结果展示给用户之前先验证返回的信息是否符合标准。
- 统一错误信息,避免用户可以根据错误信息来判断远端服务器的端口状态。
- 限制请求的端口为http常用的端口,比如,80,443,8080,8090。
- 黑名单内网ip。避免应用被用来获取获取内网数据,攻击内网。
- 禁用不需要的协议。仅仅允许http和https请求。可以防止类似于file:///,gopher://,ftp:// 等引起的问题