服务器端请求伪造——SSRF

SSRF简介

SSRF(Server-Side Request Forgery:服务器端请求伪造)
是由攻击者构造形成的由服务端发起请求的一个安全漏洞。

一般情况下,SSRF的攻击是目标网站的内部系统。(因为他是从内部系统访问,所有可以通过它攻击外网无法访问的内部系统,也就是把目标网站当做中间人)

通俗来讲,有两个网站:
A网站,所有人都可以访问的外网网站
B网站,只能内部访问的网站
A网站能访问B网站
所以,作为普通用户,我们可以访问A网站,然后篡改获取资源的来源,请求从B网站获取资源。A网站没有检测我的请求合不合法,以自己A网站的身份去访问B网站,于是我们就有机会攻击B网站。

SSRF漏洞发生场景

只要当前服务器有发送请求的地方都可能存在ssrf,如:

1. 分享功能

早期,Web应用的分享功能,会获取目标URL地址网页内容中标签或<meta name=“description”content=“”/>标签中content的文本内容,来为用户提供更好的体验。所以可以查看通过URL地址分享网页内容的地方是否有此漏洞

2. 转码服务

通过URL地址把原地址的网页内容调优使其适合手机屏幕浏览

3. 在线翻译

通过 URL地址翻译对应文本的内容。例如百度翻译
在这里插入图片描述

4. 图片加载与下载

通过URL地址加载或下载图片,有的站长为了对图片进行加水印、打码等处理,会将图片下载到服务器上,就出现了SSRF漏洞
还有富文本编辑器中的点击下载图片到本地功能

5. 图片、文章收藏功能

这其实不算一个新的场景,图片收藏功能同4,文章收藏同1

6. 未公开的api实现以及其他调用URL的功能

利用google 语法加上这些关键字去寻找SSRF漏洞

7. 云服务厂商

一些厂商会远程执行一些命令来判断网站是否存活,如果可以捕获相应的信息,就可以测试是否存在ssrf漏洞

8. 网站采集,网站抓取的地方

一些网站会针对用户输入的url进行信息采集工作

9. 数据库内置功能

比如mongodb的copyDatabase函数

10. 邮件系统

比如接收邮件服务器的地址

12. 从URL关键字中寻找

share
wap
url
link
src
source
target
u
3g
display
sourceURl
imageURL
domain
……

13…………

ssrf 防御

1.禁止私有Ip访问
2.限制远程连接的域名
3.防火墙限制
4.限制请求方式
5.过滤协议使用https

ssrf 绕过

1.利用@

url只解析@后面的域名 ,例如,在url栏里输入

https://www.qq.com@www.baidu.com

浏览器会跳到www.baidu.com界面,在这个过程中,火狐浏览器会提示你有风险
在这里插入图片描述
IE浏览器则报错,不能进入
在这里插入图片描述360浏览器、谷歌浏览器则直接跳转到百度界面(所以一个好的浏览器是很重要的)

显然,服务器认为@前面的www.qq.com是账号,所以进入的是www.baidu.com站点

在php里,@是屏蔽错误信息,所以匹配到@前面的www.qq.com符合要求,就不匹配@后面内容。当然也可能是后端的正则表达式没表达正确

不只是@,#\/……都能绕过,用法和@差不多

2.利用302重定向

通过dns解析绕过私有地址限制,探测内网
有个很神奇的网站xip.io
在这里插入图片描述
当访问这个网站的子域名,例如127.0.0.1.xip.io,它会给你重定向到127.0.0.1

3.更改ip写法

例如:127.0.0.1
利用八进制绕过: http://0177.0.0.1
利用十六进制绕过: http://0x7f.0.0.1
利用十六进制整数格式绕过: http://0x7f000001
利用十进制整数格式绕过: http://2130706433
特殊的IP地址,如果中间两位是0,可以省略掉:
如127.0.0.1还可以写成http://127.1

4.TCP数据流绕过

对于常见的IP限制,后端服务器可能通过下图的流程进行IP过滤:

2.png

对于用户请求的URL参数,首先服务器端会对其进行DNS解析,然后对于DNS服务器返回的IP地址进行判断,如果在黑名单中,就pass掉。

但是在整个过程中,第一次去请求DNS服务进行域名解析到第二次服务端去请求URL之间存在一个时间查,利用这个时间差,可以进行DNS 重绑定攻击。

要完成DNS重绑定攻击,我们需要一个域名,并且将这个域名的解析指定到我们自己的DNS Server,在我们的可控的DNS Server上编写解析服务,设置TTL时间为0。这样就可以进行攻击了,完整的攻击流程为:

(1)、服务器端获得URL参数,进行第一次DNS解析,获得了一个非内网的IP

(2)、对于获得的IP进行判断,发现为非黑名单IP,则通过验证

(3)、服务器端对于URL进行访问,由于DNS服务器设置的TTL为0,所以再次进行DNS解析,这一次DNS服务器返回的是内网地址。

(4)、由于已经绕过验证,所以服务器端返回访问内网资源的结果。

5.使用非http协议

http://   可以用来探测是否存在ssrf
gopher:// 一个分布型的文件搜集获取网络协议,人称万能协议,没有默认端口,在WWW出现之前,Gopher 是Internet上最主要的检索工具,可以利用Gopher攻击Redis、攻击Fastcgi 
dict://   字典服务器协议,查看端口,软件版本信息,操作内网redis服务等
ftp://    只能探测是否存在ftp,不能进行暴力破解
file://   本地文件传输协议,可以读取本地文件
ldap://   轻量目录访问协议
ssh://   一种加密的网络传输协议,在不安全的网络中为网络服务提供安全的传输环境
telent://  可以匿名访问及爆破
tftp:// UDP协议  发送UDP数据包
php://  访问各个输入/输出流(I/O streams)
…………

参考资料

http://www.52bug.cn/hkjs/3100.html
https://www.t00ls.net/articles-41070.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值