1、什么是 SSRF漏洞
SSRF服务器端请求伪造,它会允许攻击者诱导使得服务器向由攻击者构造的任意域发起一个请求,这个攻击者构造的域一般为内部网络,也就是攻击者常常将存在ssrf漏洞的服务器作为一-个“跳板“来对内网其他的服务器进行攻击。(未获取控制权限)
2、SSRF原理
服务端提供了能够从其他服务器获取数据的功能(服务器从另一个服务器获取数据),开发人员对用户输入过于信任,没有进行响应的限制及严格的请求地址校验,导致从其他服务端获取数据产生漏洞
3、SSRF的攻击方式
1、可以对服务器所在的内网环境进行内网或本地的端口扫描(SSRF常配合DICT协议探测内网端口开放情况,但不是所有的端口都可以被探测,一般只能探测出一些带TCP回显的端口)、.内网存活探测(http/s)、获取一些服务的banner信息等
2、通过file协议读取本地文件比如:用户的基本信息file://etc/passwd主机名和相应的IP地址:file:/l/etc/hosts ARP缓存(内网其他
主机)file:/i/proc/net/arp等等
3、对内网jweb应用进行指纹识别,通过访问应用存在的默认文件实现
4、GET型漏洞利用,GET参数就可以实现的攻击,比如struts2命令执行、Ihinkphp、boss的一些漏洞等,还包括5g注入等。
5、POST型漏洞利用,可利用gophert协议进行参数构造;
6、利用Redis未授权访问getshell、Weblogic默认SSRF漏洞页面
7、如果ssrf漏洞存在于云服务器可以进行攻击元数据服务、攻击存储桶、攻击Kubelet AP1、越权攻击云平台内其他组件或服务
8、DOS攻击等
4、SSRF函数利用(三种函数使用不当会造成SSRF漏洞)
1、file_get_contents()
file_get_contents() 函数把整个文件读入一个字符串中
和 file() 一样,不同的是 file_get_contents() 把文件读入一个字符串。
file_get_contents() 函数是用于将文件的内容读入到一个字符串中的首选方法。如果操作系统支持,还会使用内存映射技术来增强性能。
2、fsockopen()
fsockopen
函数实现对用户指定url数据的获取,该函数使用socket(端口)跟服务器建立tcp连接,传输数据。变量host为主机名,port为端口,errstr表示错误信息将以字符串的信息返回,30为时限
3、curl_exec()
curl_exec函数用于执行指定的cURL会话
5、SSRF相关协议
(1)file: 在有回显的情况下,利用 file 协议可以读取任意内容
(2)dict:泄露安装软件版本信息,查看端口,操作内网redis服务等
(3)gopher:gopher支持发出GET、POST请求:可以先截获get请求包和post请求包,再构造成符合gopher协议的请求。gopher协议是ssrf利用中一个最强大的协议(俗称万能协议)。可用于反弹shell
(4)http/s:探测内网主机存活