SSRF(服务端请求伪造)漏洞

目录

SSRF

SSRF漏洞利用

SSRF漏洞防御


SSRF

SSRF(Server-Side Request Forgery,服务器端请求伪造)漏洞,是一种由攻击者构造请求,由服务端发起请求的安全漏洞。一般情况下,SSRF攻击的目标是外网无法访问的内部系统(正因为请求是由服务器端发起的,所以服务器端能请求到与自身相连而与外网隔离的内部系统)

SSRF漏洞原理:SSRF的形成大多数是由于服务器端提供了从其他服务器应用获取数据的功能且没有对目标地址做过滤与限制。比如,黑客操作服务端从指定URL地址获取网页文本内容,加载指定的图片等,利用的是服务器端的请求伪造。SSRF利用存在缺陷的Web应用作为代理攻击远程和本地的服务器。

SSRF主要攻击方式如下:

  • 对外网、服务器所在内网、本地进行端口扫描,获取一些服务的banner信息
  • 攻击运行在内网或本地的应用程序
  • 对内网web应用进行指纹识别,识别企业内部的资产信息
  • 攻击内外网的web应用,主要是使用HTTP GET请求就可以实现的攻击
  • 利用file协议读取本地文件

SSRF漏洞利用

现在服务器上有一个ssrf.php的页面,该页面的功能是获取URL参数,然后将URL的内容显示到网页页面上。

#ssrf.php
<?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);
?>
#程序获取url参数,通过curl_init()初始化curl组件后,将参数URL带入curl_setopt($ch,CURLOPT_URL,$url),然后调用curl_exec请求该URL。由于服务器端会将banner信息返回给客户端,所以可根据banner判断主机是否存在某些服务。

我们访问该链接:http://127.0.0.1/ssrf.php?url=http://127.0.0.1/test.php ,它会将test.php页面显示

如果我们把url的参数换成http://www.baidu.com ,页面则会返回百度的页面

于是我们可以将URL参数换成内网的地址,则会泄露服务器内网的信息。将URL换成file://的形式,就可以读取本地文件。这和文件包含漏洞很类似!如下,我们可以读取服务器host文件的信息

SSRF漏洞防御

  • 限制请求的端口只能为web端口,只允许访问http和https的请求
  • 限制不能访问内网的ip,以防止对内网进行攻击
  • 屏蔽返回的详细信息

猜你喜欢

转载自blog.csdn.net/qq_36119192/article/details/84980510