基础知识
- SSRF简介
SSRF(Server-Side Request Forgery,服务端请求伪造),是攻击者让服务端发起构造的指定请求链接造成的漏洞。
由于存在防火墙的防护,导致攻击者无法直接入侵内网;这时攻击者可以以服务器为跳板发起一些网络请求,从而攻击内网的应用及获取内网数据。
最常见的例子:攻击者传入一个未经验证的URL,后端代码直接请求这个URL,就会造成SSRF漏洞。
其中SSRF与CSRF的区别
CSRF是服务器端没有对用户提交的数据进行随机值校验,且对http请求包内的refer字段校验不严,导致攻击者可以利用用户的cookie信息伪造用户请求发送至服务器;
SSRF是服务器对用户提供的可控URL过于信任,没有对攻击者提供的URL进行地址限制和足够的检测,导致攻击者可以以此为跳板攻击内网或者其它服务器。
SSRF的类型
1)显示对攻击者的响应(basic):在服务器获取攻击者要求的URL后,把响应发送回攻击者。
2)不显示响应(blind):在服务器获取攻击者要求的URL后,不会把响应内容发送给攻击者,需要通过抓包或查看服务器日志判断是否存在服务端请求伪造漏洞。
利用SSRF的攻击
利用SSRF可以实现的攻击
1)获取web应用可达服务器的banner信息(如软件开发商、软件名称等),以及收集内网web应用的指纹识别(如开放的端口、中间件版本等),根据这些信息再进行进一步的渗透;
2)攻击运行在内网的系统或应用程序,获取内网系统弱口令进行内网漫游,对有漏洞的内网web应用实施攻击获取webshell(如Struts2命令执行,discuz!论坛SSRF通过Redis实施getshell等);
3)利用有脆弱性的组件结合ftp://,file:///,gopher://,dict://等协议实施攻击(如FFmpeg任意文件读取,XXE攻击等)。
验证漏洞
对于basic型:可以在输入框中直接输入URL,点击botton后,会和sql报错注入一样返回在页面上
对于blind型:通过服务器日志信息判断
一.Kali机器开启Apache服务:# /etc/init.d/apache2 start
在‘无回显的SSRF’处输入http://10.1.1.200后点击‘TEST IT’,查看kali机器服务器日志信息:# tail -f /var/log/apache2/access.log
可以看到存在一条请求,主机地址为CentOS机器地址,表示存在服务器端请求伪造即SSRF漏洞。
二.利用tcpdump测试:
Kali机器打开一个终端,使用tcpdump抓包:#tcpdump -nne -i eth0 port 6666
-nne:不把端口和网络地址转换成名称,在输出行打印数据链路层的头部信息;
-i:监视指定网络接口的数据包。
同时在‘有回显的SSRF’处输入:http://10.1.1.200:6666,点击‘TEST IT’后可以看到tcpdump的响应:
可以看到请求是从CentOS机器发起的,因此存在SSRF漏洞。
通过dict协议获取服务器端口运行的服务。
- 本地利用:kali机器中在终端输入:curl -v ‘dict://127.0.0.1:80’
curl:一种命令行工具,作用是发出网络请求,获取数据;
curl -v:显示HTTP通信的整个过程,包括端口连接和HTTP request头信息。
可以看到本地主机的Apache版本为2.4.38;
2. 远程利用:在‘有回显的SSRF’处输入dict://127.0.0.1:22
点击‘TESTIT’后在页面最下方查看响应:
通过file协议访问计算机中的任意文件
本地利用:终端输入:curl -v ‘file:///etc/passwd’
file协议主要用于访问计算机中的文件。
2. 远程利用:在‘有回显的SSRF’处输入:file:///var/www/html/web-1.txt
了解sftp及tftp协议在SSRF中的作用
sftp代表SSH文件传输协议,通过sftp协议获取SSH相关信息:
Kali机器上输入:nc -lvp 1234
-l:监听入站信息;
-p:设置本地主机使用的通信端口;
-v:显示指令执行过程。
在‘有回显的SSRF’处输入:sftp://10.1.1.200:1234,点击‘TEST IT’后查看响应信息:
2. tftp即简单文件传输协议,允许客户端从远程主机获取文件:
Kali机器上输入:nc -lvup 6666
-u:使用UDP传输协议。
在‘有回显的SSRF’处输入:tftp://10.1.1.200:6666
点击‘TEST IT’后查看响应信息: