SSRF原理
SSRF(Server-Side Request Forgery:服务器端请求伪造) 是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。一般情况下,SSRF是要目标网站的内部系统。(因为他是从内部系统访问的,所以可以通过它攻击外网无法访问的内部系统,也就是把目标网站当中间人)
SSRF形成原因
SSRF 形成的原因大都是由于服务端提供了从其他服务器应用获取数据的功能,且没有对目标地址做过滤与限制。比如从指定URL地址获取网页文本内容,加载指定地址的图片,文档,等等。
SSRF用途
攻击者利用ssrf可以实现的攻击主要有5种::
1.可以对外网、服务器所在内网、本地进行端口扫描,获取一些服务的banner信息;
(测试端口:可以用brup抓包 ,端口设变量用bp跑。如果不存在这个端口没有任何显示,存在则显示。
测试IP地址:也可用bp抓包,将c段设为变量跑。)
2.攻击运行在内网或本地的应用程序(比如溢出);
3.对内网web应用进行指纹识别,通过访问默认文件实现;
4.攻击内外网的web应用,主要是使用get参数就可以实现的攻击(比如struts2,sqli等);
5.利用file协议读取本地文件等。
(主要作用就是探测内网)
SSRF漏洞出没位置
注:个人觉得所有调外部资源的参数都有可能存在ssrf漏洞
1)分享:通过URL地址分享网页内容
2)转码服务
3)在线翻译
4)图片加载与下载:通过URL地址加载或下载图片
5)图片、文章收藏功能
6)未公开的api实现以及其他调用URL的功能
7)从URL关键字中寻找
share 、wap 、url 、link 、src 、source 、target 、u 、3g 、display 、sourceURl 、imageURL
domain 、...
根据后台使用的函数的不同,对应的影响和利用方法又有不一样
PHP中下面函数的使用不当会导致SSRF: (后端实现)
file_get_contents() (如果是这个函数可以读取本地文件)
fsockopen()
curl_exec()
(Ssrf漏洞利用能力有多强决定于使用的这个函数。)
SSRF防护方法
1、防护措施
(黑名单)
(1)过滤10.0.0.0/8 、172.16.0.0/12、192.168.0.0/16、localhost私有地址、IPv6地址
(2)过滤file:///、dict://、gopher://、ftp:// 危险schema
(3)对返回的内容进行识别
(4)内网服务开启鉴权(Memcached, Redis, Elasticsearch and MongoDB)
2、最佳防护
(1)使用地址白名单(这种最好)
(2)对返回内容进行识别
(3)需要使用互联网资源(比如贴吧使用网络图片)而无法使用白名单的情况:首先禁用 CURLOPT_FOLLOWLOCATION;然后通过域名获取目标ip,并过滤内部ip;最后识别返回的内容是否与假定内容一致
绕过方法
更改IP地址写法:(这个方法不一定靠谱)
8进制
16进制
10进制
利用解析URL所出现的问题:
http://www.oldboyedu.com@192.168.0.1/
修改密码、添加帐号