SSRF漏洞


前言

只要稍加不防范,网站就有可能存在SSRF漏洞!
学习链接:SSRF漏洞讲解


一、SSRF原理

  • SSRF(Server-side Request Forgery):服务端请求伪造。SSRF的形成大多是由于服务端提供了从其他服务器获取数据的功能,但是没有对目标地址进行过滤和限制。比如:从指定的url地址获取网络文本内容,加载指定地址的图片,或者下载等。
  • 攻击的目标是从外网无法访问的内网系统,以服务端为跳板,攻击内网系统。
  • 常利用的协议:http/s,dict,file,gopher,ftp等
  • 相关 PHP函数:
    file_get_contents(),fsockopen(),curl_exec()
  • 攻击的内网应用:redius、mysql、smtp等
  • ssrf利⽤存在缺陷的web应用作为代理,攻击远程和本地的服务器。

二、SSRF漏洞利用

1、SSRF漏洞挖掘

从Web功能上寻找(那些需要向服务器发起请求的地方):

图片查看、下载
文件加载、下载
转码服务:通过url地址,把原网页的内容优化为适合手机屏幕浏览
图片、文章收藏功能
在线翻译
通过url地址分享网页内容
未公开的API实现及调用URL的功能等

从URL关键字中寻找:Share、wap、url、link、src、source、target、u、3g、display、sourceURL、imageURL、domain
漏洞探测工具:burpsite等

2、SSRF危害

1.对外网、服务器所在内网、本地进行端口扫描,获取一些服务的banner信息。
2.攻击运行在内网或者本地的应用程序。
3.对内网的web应用进行指纹识别(通过请求默认文件得到特定的指纹),对资产信息进行识别。
4.利用file协议读取本地文件。
5.攻击内外网的web应用,主要是使用HTTP GET请求就可以实现的攻击等。

3、SSRF漏洞相关php协议

3.1 file_get_contents() :

file_get_contents():把整个文件读入一个字符串中。

该函数是用于把文件的内容读入到一个字符串中的首选方法。如果服务器操作系统支持,还会使用内存映射技术来增强性能。
语法:file_get_contents(path,include_path,context,start,max_length)
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

3.2 fsockopen():

开启这个函数需要php.ini中的allow_url_fopen = On

  • fsockopen是用于打开网络的 Socket 链接。
  • 语法:fsockopen($host, $port, $errno, $errstr, $timeout)
  • 在使用本函数之后会返回文件指针,供文件函数使用,包括 fgets()、fgetss()、fputs()、fclose() 与 feof()。参数 errno 及 errstr 也是可省略的,主要当做错误处理使用。

3.3 curl_exec():

curl_exec : 执行一个cURL会话
在这里插入图片描述

4、SSRF漏洞可利用的协议

4.1 http/s

靶场:pikachu
在这里插入图片描述加载图片
在这里插入图片描述
在这里插入图片描述
查看虚拟机中的文件
在这里插入图片描述
探测端口3306
配置权限(否则会出现'xxx' is not allowed to connect to this MySQL server1的提示)
在这里插入图片描述

在这里插入图片描述以上,我们可以利用http协议对内网进行探测,探测整个内网的存活ip,和端口。
可利用burpsite或者脚本进行快速探测,由于回显的不同,脚本就需要按照回显的特征来写,那种回显是存在,哪种回显是不存在这样的ip或端口。

一般私网地址的ip地址都处于10.0.0.0、172.16.0.0、192.168.0.0这样的网段。

4.2 file协议

file协议可用于读取本地文件

访问虚拟机本地文件
在这里插入图片描述

4.3 dict协议

dict协议与http协议可用来探测内网的主机存活与端口开放情况
在这里插入图片描述

4.4 ftp协议

ftp(file transform protocol):文件传输协议
在这里插入图片描述这里没有输入用户和密码,所以不显示ftp连接的地址下的文件
在这里插入图片描述
使用ftp协议查看虚拟机里的文件
ftp服务的安装可以参考这篇文章
ftp服务的搭建
这里我设置的ftp的站点就是虚拟机的ip地址
在这里插入图片描述
在这里插入图片描述

4.5 gopher协议

  • Gopher是Internet上一个非常有名的信息查找系统,它将Internet上的文件组织成某种索引,很方便地将用户从Internet的一处带到另一处。在WWW出现之前,Gopher是Internet上最主要的信息检索工具,Gopher站点也是最主要的站点,使用tcp70端口。但在WWW出现后,Gopher失去了昔日的辉煌。现在它基本过时,人们很少再使用它;

gopher协议支持发出GET、POST请求:可以先截获get请求包和post请求包,在构成符合gopher协议的请求。gopher协议是ssrf利用中最强大的协议

gopher在各个编程语言中的限制:
在这里插入图片描述–wite-curlwrappers:使用curl工具打开url数据流
协议格式

URL:gopher://<host>:<port>/<gopher-path>_后接TCP数据流
  • 使用gopher协议时,回车换行输入%0d%0a,空格输入%20,问号输入%3f,结束符%0d%0a
  • SSRF漏洞在真实环境常常去攻击redis、FastCGI等服务。

(我看网上都是在使用Linux操作系统作攻击实验的。所以以后有时间再研究清楚这个协议吧)

三、SSRF绕过

@绕过
从@后面开始解析。利用的原理:解析URL时的规则问题。
在这里插入图片描述点分割号绕过
在这里插入图片描述封闭字符符号
在这里插入图片描述url十六进制转换
在这里插入图片描述
进制转换绕过

有些ssrf防护措施,会对输入的URL做正则匹配,限制内网地址,比如192、127这些地址,但如果转换成其他格式的ip地址,可能会绕过

利用30X重定向
可以使用重定向来让服务器访问目标地址,可用于重定向的HTTP状态码:300、301、302、303、305、307、308。
需要一个vps,把302转换的代码部署到vps上,然后去访问,就可跳转到内网中
DNS解析
配置域名的DNS解析到指定的目标地址
DNS重绑定
在网页浏览过程中,用户在地址栏中输入包含域名的网址。浏览器通过DNS服务器将域名解析为IP地址,然后向对应的IP地址请求资源,最后展现给用户。而对于域名所有者,他可以设置域名所对应的IP地址。当用户第一次访问,解析域名获取一个IP地址;然后,域名持有者修改对应的IP地址;用户再次请求该域名,就会获取一个新的IP地址。对于浏览器来说,整个过程访问的都是同一域名,所以认为是安全的。这就造成了DNS Rebinding攻击。
简而言之:当我们发起域名解析请求的时候,第一次访问会返回一个ip地址A,但是当我们发起第二次域名解析请求的时候,却会返回一个不同于A的ip地址B。可以通过DNS重绑定攻击绕过同源策略,进而攻击内网的其他设备。
DNS重绑定
协议绕过
http/s,file,ftp,dict,gopher等协议绕过

四、SSRF防御

SSRF漏洞的防御主要是保证用户请求的合法性、服务器行为的合规性两个方面。
1、禁止高危协议。限制请求端口只能为web端口,只允许访问HTTP和HTTPS的请求;
2、过滤返回的信息,验证远程服务器对请求的返回结果是否合法;
3、禁止不常使用的端口
4、限制不能访问内网的IP,防止对内网进行攻击;
5、禁止302跳转,或者每跳转一次都进行校验目的地址是否为内网地址或合法地址。
6、对于DNS重绑定,使用DNS缓存或者Host白名单。
7、统一错误信息,避免黑客通过错误信息判断端口对应的服务
关于SSRF还有很多需要学习的地方,这里我只是简单地了解了一下它的基本原理。具体的以后再做探讨。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值