一、漏洞描述
SSRF(Server-Side Request Forgery,服务器端请求伪造)是一种由攻击者构造请求,由服务端发起请求的安全漏洞。一般情况下,SSRF攻击的目标是外网无法访问的内部系统(正因为请求是由服务端发起的,所以服务端能请求到与自身相连而与外网隔离的内部系统)。
二、漏洞原理
SSRF的形成大多是由于服务端提供了从其他服务器应用获取数据的功能且没有对目标地址做过滤和限制。
例如,黑客操作服务端从指定URL地址获取网页文本内容,加载指定地址的图片等,利用的是服务端的请求伪造。SSRF利用存在缺陷的web应用作为代理攻击远程和本地的服务器。
一句话就是:利用一个可以发起网络请求的服务当做跳板来攻击内部其他服务。
主要攻击方式如下所示:
- 可以对外网、服务器所在内网、本地进行端口扫描,获取一些服务的banner信息。
- 攻击运行在内网或本地的应用程序。
- 对内网WEB应用进行指纹识别,通过访问默认文件实现(如:readme文件)
- 攻击内外网的web应用,主要是使用GET参数就可以实现的攻击(如:Struts2,sqli)
- 下载内网资源(如:利用file协议读取本地文件等)
- 进行跳板
- 无视CDN
- 利用Redis未授权访问,HTTP,CRLF注入实现getshell。
三、漏洞种类
1、显示对攻击者的响应(Basic)
它显示对攻击者的响应,因此在服务器获取攻击者要求的URL后,它将把响应发送回攻击者,返回结果到客户端,如传送一个网址,会返回这个网址的界面和对应的html代码。
2、不显示响应(Blind)
和上面正好相反,不会返回结果到客户端,当你从未从初始请求中获取有关目标服务的任何信息时,就会