服务器端请求伪造——SSRF

时间:2022-07-23
本文章向大家介绍服务器端请求伪造——SSRF,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

目录
  • SSRF简介
  • SSRF漏洞发生场景
    • 1. 分享功能
    • 2. 转码服务
    • 3. 在线翻译
    • 4. 图片加载与下载
    • 5. 图片、文章收藏功能
    • 6. 未公开的api实现以及其他调用URL的功能
    • 7. 云服务厂商
    • 8. 网站采集,网站抓取的地方
    • 9. 数据库内置功能
    • 10. 邮件系统
    • 12. 从URL关键字中寻找
    • 13…………
  • ssrf 防御
  • ssrf 绕过
    • 1.利用@
    • 2.利用302重定向
    • 3.更改ip写法
    • 4.TCP数据流绕过
    • 5.使用非http协议
  • 参考资料

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过滤:

对于用户请求的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