什么是SSRF
服务端请求伪造(Server Side Request Forgery, SSRF)指的是攻击者在未能取得服务器所有权限时,利用服务器漏洞以服务器的身份发送一条构造好的请求给服务器所在内网。SSRF攻击通常针对外部网络无法直接访问的内部系统。
一般情况下,SSRF 攻击的目标是从外网无法访问的内部系统,因为服务器请求天然的可以穿越防火墙。漏洞形成的原因大多是因为服务端提供了从其他服务器应用获取数据的功能且没有对目标地址作正确的过滤和限制。
SSRF前置知识
NAT
网络地址转换(NAT),通过一个外部IP地址和端口映射到更大的内部IP地址集来转换IP地址。
SSRF攻击原理
SSRF 形成的原因大都是由于服务端提供了从其他服务器应用获取数据的功能,且没有对目标地址做过滤与限制。比如从指定URL地址获取网页文本内容,加载指定地址的图片,文档等等。SSRF漏洞通过篡改获取资源的请求发送给服务器(服务器并没有检测这个请求是否合法的),然后服务器以他的身份来访问服务器的其他资源。SSRF利用存在缺陷的Web应用作为代理攻击远程和本地的服务器。
例如:我们可以访问主机A,但是我们没法访问主机B,所以我们可以通过主机A来访问主机B,从而绕过防火墙,行程SSRF攻击。
触发函数
PHP中下面函数的使用不当
- file_get_contents()
- fsockopen()
- curl_exec()
伪协议
- file://:从文件系统中获取文件内容,如,file:///etc/passwd
- dict://:字典服务器协议,访问字典资源,如,dict:///ip:6739/info
- gopher://:分布式文档传递服务,可使用gopherus生成payload
- ftp:// 可用于网络端口扫描
- sftp:// ssh文件传输协议或安全文件传输协议
- ldap:// 轻量级目录访问协议
- tftp:// 简单文件传输协议
漏洞利用
- 利用file协议读取本地文件
- 对服务器所在内网、本地进行端口扫描,获取一些服务器banner信息
- 攻击运行在内网或本地的应用程序
- 对内网web应用进行指纹识别,识别企业内部的资产信息
- 攻击内外网的web应用,主要是使用HTTP GET请求就可以实现攻击
file伪协议
先尝试查看本地网段的文件,如果可以查看,再尝试查看内网的文件
| 伪协议文件用例 | 利用意义 |
|---|---|
| file:///etc/hosts | 显示当前操作系统网卡的ip |
| file:///etc/passwd | 读取文件passwd |
| file:///proc/net/arp | 显示arp缓存表(从中尝试寻找内网其他主机) |
| file:///proc/net/fib_trie | 显示当前网段路由 |
攻击思路
攻击条件:被攻击的服务等没有开启加密传输与鉴权。
可以先尝试使用burp suite对内网进行扫描。因为对主机前通讯前会发送一个arp请求,这个请求的结果会存在arp缓存中,这时我们就可以去查看内网里有哪些主机。