概念web
Server-Side Request Forgery,服务器端请求伪造,一种由攻击者构造造成服务器端发起请求的安全漏洞。通常攻击目标是从外网没法访问的内部系统。redis
原理sql
服务端提供了从其余服务器应用获取数据的功能,而没有对目标地址作过滤与限制,致使攻击者能够传入任意的地址来让后端服务器对其发起请求,并返回对该目标地址请求的数据后端
PHP下面函数使用不当形成SSRF:浏览器
·file_get_contents()安全
·fsockopen()服务器
·curl_exec() (支持不少协议,有FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE以及LDAP)dom
危害curl
• 能够对外网服务器所在的内网、本地进行端口扫描,获取一些服务的banner信息 。ide
• 攻击运行在内网或者本地的应用程序。
• 对内网web应用进行指纹识别,经过访问默认文件实现 。
• 攻击内外网的web应用。主要是使用GET参数就可实现攻击,如sql注入、struct二、redis等。
• 利用file协议读取本地文件等
挖掘方法
一、WEB功能查找
a) 经过URL地址分享网页内容
b) 转码服务:经过URL地址把原地址的网页内容调优使其适合手机浏览
c) 在线翻译:URL地址翻译对应文本的内容。提供此功能的百度、有道等。
d) 图片加载与下载
开发者为了有更好的用户体验一般对图片作些微小调整例如加水印、压缩等,就必需要把图片下载到服务器的本地,就可能形成SSRF问题
二、从URL关键字中寻找
·Share、wap、url、link、src、source、target、u、3g、display、sourceURL、imageURL、domain
三、通用的SSRF实例
• Weblogic配置不当,天生ssrf漏洞
• Discuz x2.5/x3.0/x3.1/x3.2 ssrf漏洞
漏洞验证
http://www.douban.com/***/service?image=http://www.baidu.com/img/bd_l ogo1.png
1)咱们先验证,请求是不是服务器端发出的,能够右键图片,使用新窗口打开图片,若是浏览器上地址栏是http://www.baidu.com/img/bd_logo1.png,说明不存在SSRF漏洞。
2)能够在Firebug 或者burpsuite抓包工具,查看请求数据包中是否包含 http://www.baidu.com/img/bd_logo1.png这个请求。因为SSRF是服务端发起的请求,所以在加载这张图片的时候本地浏览器中不该该存在图片的请求。
3)在验证完是由服务端发起的请求以后,此处就有可能存在SSRF,接下来须要验证此URL是否能够来请求对应的内网地址。首先咱们要获取内网存在HTTP服务且存在favicon.ico文件地址,才能验证是不是SSRF。
此处找内网地址能够经过从漏洞平台中的历史漏洞寻找泄露的内网地址。
过滤绕过
@:
http://www.baidu.com@10.10.10.10与http://10.10.10.10 请求是相同的
IP地址转换成十进制:
127.0.0.1=2130706433
xip.io
127.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
修复方案
1.统一错误信息,避免用户能够根据错误信息来判断远程服务器端口状态
2.限制请求的端口为HTTP经常使用的端口,好比 80,443,8080,8088等
3.黑名单内网IP。
4.禁用不须要的协议,仅仅容许HTTP和HTTPS.