SSRF漏洞

SSRF原理

SSRF:服务器端请求伪造(Server-Side Request Forgery)
   SSRF是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。SSRF攻击的目标一般是从外网无法访问的内部系统。(正是因为它是由服务端发起的,所以它能够请求到与它相连而与外网隔离的内部系统)
SSRF漏洞产生原因
   SSRF 形成的原因大都是由于服务端提供了从其他服务器应用获取数据的功能且没有对目标地址做过滤与限制。比如从指定URL地址获取网页文本内容,加载指定地址的图片,下载等等。利用的是服务端的请求伪造。ssrf是利用存在缺陷的web应用作为代理攻击远程和本地的服务器。
在这里插入图片描述

SSRF危害

1.内网探测:攻击者若利用 SSRF 漏洞可以对内网服务器进行端口扫描、资产扫描、漏洞扫描,发现服务器内部的可用端口和漏洞等;
2.窃取本地和内网敏感数据:攻击者实施 SSRF 攻击后可以访问和下载内网的敏感数据,利用文件传输协议访问服务器本地文件,上传木马或者病毒。
3.攻击服务器本地或内网应用:攻击者借助 SSRF 漏洞发现服务器内部存在的其他漏洞,然后利用发现的漏洞进一步发起攻击利用。
4.绕过安全防御:如果利用 SSRF 漏洞攻击者可以很简单的绕过常见的防御措施和设备,直接对内网进行攻击。
5.实现 CRLF 注入:利用 Redis 未授权访问,HTTP CRLF 注入实现 getshell

SSRF漏洞发现

从WEB功能上发现:
1.分享:通过URL地址分享网页内容
2.转码服务:通过URL地址把原地址的网页内容调优使其适合手机屏幕浏览
3.在线翻译:通过URL地址翻译对应文本内容 如:百度,有道
4.图片加载与下载:通过URL地址加载与下载图片
5.图片 文章收藏功能
6.未公开的API实现以及其他调用URL的功能
URL中的关键字: share wap url link src source target u 3g display sourceURL imageURL domain
代码审计:
PHP中以下函数使用不当会产生SSRF:
file_get_contents():将整个文件或一个url所指向的文件读入一个字符串中。
readfile():输出一个文件的内容。
fsockopen():打开一个网络连接或者一个Unix 套接字连接。
curl_init():初始化一个新的会话,返回一个cURL句柄,供cur_lsetopt(),curl_exec()和curl_close() 函数使用。
fopen():打开一个文件文件或者 URL。

SSRF利用到的伪协议

注:个语言支持的伪协议都不相同,以下一是PHP语言在SSRF攻击中常用伪协议。
1.file://:从文件系统中获取文件内容。
file://文件路径
利用它可以直接读取系统文件,例如

ssrf.php?url=file:///etc/passwd

其与http/s协议有所区别
(1) file用于静态读取,http/s可用于动态解析
file访问的是服务器的一个静态的文件,而http/s访问的是服务器的html这种资源文件,即多了一个把访问的机器当作http服务器,解析请求后再去访问资源的过程.
(2)file是不能跨域读取的而通过http/s可以访问的服务器则可以把自己当成http服务器,开放端口供其他人访问的.
2.dict://:字典服务器协议,访问字典资源。
Gopher虽然是最好的,但是使用有环境限制
在这里插入图片描述必要时可以使用dict代替
dict://serverip:port/命令:参数
例如: dict://192.168.25.203:6379/get:name

3.gopher://:分布式文档传递服务,可使用gopherus生成payload。
  gopher 协议是一个在http 协议诞生前用来访问Internet 资源的协议可以理解为http 协议的前身或简化版,虽然很古老但现在很多库还支持gopher 协议,而且gopher 协议功能很强大,使用一条gopher协议命令可以完成复杂的操作,比如实现对mysql、Redis的攻击,这是由于gopher允许数据包整合发送,这一点,与dict协议形成了对比.
格式为gopher://<host>:<port>/<gopher-path>_后接TCP数据流

用gopher(或者dict)干Redis例子
参考案例:https://cloud.tencent.com/developer/article/1764332
https://blog.csdn.net/qq_45213259/article/details/110352124

还可以攻击mysql、structs2、fastcgi、ftp。。。。。。
参考链接:https://blog.csdn.net/qq_41107295/article/details/103026470
https://xz.aliyun.com/t/6993
4.http/s
例如:
ssrf.php?url=http://192.168.25.203
ssrf.php?url=http://192.168.25.203:6379/info

PHP伪协议详解可参考

SSRF漏洞演示

演示靶场:pikachu
在这里插入图片描述
观察发URL参数,向本机发送了请求。SSEF漏洞成因:服务端向其他服务获取数据,没有对目标地址进行过滤。这里向其他服务发起了请求,可以测试一下是够存在该漏洞。

payload:?url=file:///D:/text/text.txt

在这里插入图片描述
文件读取到了说明存在SSRF漏洞,接下来可以进行本地文件读取、探针内网服务。攻击内网等操作了,由于是单机运行的靶场不能探针内网,就演示一下读取敏感文件。

payload:file:///C:/Windows/win.ini

在这里插入图片描述
想查看更多系统信息可去查Windows/Linux敏感文件

防御

1.从协议角度,要限制允许请求的协议,通常只允许http/s协议
2.限制可请求的端口号,http只允许80端口访问,https只允许443端口访问,或者其他端口
3.对访问IP进行白名单限制,限制内网IP。
4.禁止所有重定向请求或者在服务端以无跳转模式请求内容
5.对返回信息进行过滤。

绕过

1.HTTP基本身份认证绕过
如果只限制了http://www.lcx.com,可以加@绕过
?url=http://www.lcx.com@www.baidu.com
实现对某恶意网址比如百度的访问

2.IP转换绕过
例如:127.0.0.1
就可以有很对变换格式去尝试
8进制格式:0177.0.0.1
16进制格式:0x7F.0.0.1
10进制整数格式:2130706433
16进制整数格式:0x7F000001
或者

http://localhost/         # localhost就是代指127.0.0.1
http://0/                 # 0在window下代表0.0.0.0,而在liunx下代表127.0.0.1
http://[0:0:0:0:0:ffff:127.0.0.1]/    # 在liunx下可用,window测试了下不行
http://[::]:80/           # 在liunx下可用,window测试了下不行
http://127。0。0。1/       # 用中文句号绕过
http://①②⑦.⓪.⓪.①
http://127.1/
http://127.00000.00000.001/ # 0的数量多一点少一点都没影响,最后还是会指向127.0.0.1

3.跳转绕过
利用30x重定向去访问内网。
4.DNS重定向
DNS重绑定可以利用于ssrf绕过 ,bypass 同源策略等,,,这里介绍三种方法
1.特定域名实现TTL=0
2.域名绑定两条A记录(4/1概率),当第一次解析为外网ip,第二次解析为内网ip,就会成功。
3.自建DNS服务器

SSRF绕过、通过SSRF打Redis参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值