SSRF漏洞简单分析
什么是SSRF漏洞
SSRF(服务器端请求伪造)是一种由攻击者构造请求,服务器端发起请求的安全漏洞,所以,一般情况下,SSRF攻击的目标是外网无法访问的内部系统。
SSRF漏洞形成原理。
SSRF的形成大多数是由于服务端提供了从其他服务器应用获取数据的功能且没有对目标地址做过滤和限制,比如操作服务端从指定URL获取网页文本,加载指定地址的图片,利用的是服务端的请求伪造。所以,SSRF是利用存在缺陷的Web应用作为代理,攻击远程和本地的服务器。
主要的攻击方式:
- 对外网所在内网、本地进行端口扫描,获取一些服务的banner信息。
- 攻击运行在内网或本地的应用程序。
- 对内网Web应用进行指纹识别,识别企业内部的资产信息。
- 利用file协议读取本地文件等等
SSRF漏洞代码分析
<?php
function curl($url){
$ch = curl_init();
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_HEADER,0);
curl_exec($ch);
curl_close($ch);
}
$url = $_GET['url'];
curl($url);
?>
在ssrf页面中,程序获取GET请求url,通过curl_init()初始化curl组件后,将参数带入curl_setopt($ch,CURLOPT_URL,$url),然后调用curl_exec请求该url,服务会将banner信息返回客户端。功能是获取url的内容并返回页面上。例如,请求百度。
简单利用
如果我们将url改为本地文件路径,我们可以通过file协议读取本地文件。例如我们在参数url后面接file:///c:/windows/win.ini
SSRF修复建议
- 限制请求的端口只能为Web端口,只允许访问HTTP/HTTPS的请求
- 限制不能访问内网IP
- 屏蔽返回的详细信息