-SSRF服务端请求伪造

Posted g0rez

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了-SSRF服务端请求伪造相关的知识,希望对你有一定的参考价值。

第一节 SSRF漏洞原理介绍

1.1 SSRF漏洞定义

SSRF(server-site request forery,服务端请求伪造)是一种构造请求,由服务端发起请求的安全漏洞。

一般情况下,SSRF的目标就是与外部隔离的内网资源。

1.2 SSRF漏洞原理

SSRF形成原因:服务端提供了从其他服务器获取数据的功能,但没有对内网目标地址做过滤与限制。

主要方式:

1、对外网、服务器所在内网、本地进行端口扫描,获取Banner信息。

2、测试运行内网或本地的应用程序。

3、利用file协议读取本地文件等。

1.3 SSRF漏洞代码分析

存在SSRF漏洞代码:
<?php
	function curl($url) //curl函数用来发送请求
		$ch = curl_init();
		curl_setopt($ch,CURLOPT_URL,$url);
		curl_setopt($ch,CURLOPT_HEADER,0);
		curl_exec($ch);
		curl_close($ch);
	
$url = $_GET[“url”]; //用户通过构造url来进行访问
curl($url);
?>

1.4 SSRF漏洞利用

利用SSRF进行文件读取

第二节 产生SSRF漏洞的代码

2.1 产生SSRF漏洞的PHP函数

很多web应用都提供了从其他的服务器上获取数据的功能。使用用户指定的URL,web应用可以获取图片,下载文件,读取文件内容等。这个功能如果被恶意使用,可以利用存在缺陷的web应用作为代理攻击远程和本地的服务器。这种形式的攻击称为服务端请求伪造攻击(Server-side Request Forgery)。

ssrf攻击可能存在任何语言编写的应用,接下来我们将展示php中可能存在SSRF漏洞的函数。

file_get_content() 、fsockopen() 、curl_exec()

2.2 file_get_contents

下面的代码使用file_get_contents函数从用户指定的url获取图片。然后把它用一个随即文件名保存在硬盘上,并展示给用户。

<?php
if (isset($_POST['url'])) 
 
$content = file_get_contents($_POST['url']); 
$filename ='./images/'.rand().';img1.jpg'; 
file_put_contents($filename, $content); 
echo $_POST['url']; 
$img = "<img src=\\"".$filename."\\"/>"; 
 
echo $img; 
?>

2.3 fsockopen()

使用fsockopen函数实现获取用户制定url的数据(文件或者html)。这个函数会使用socket跟服务器建立tcp连接,传输原始数据。

<?php 
function GetFile($host,$port,$link) 
 
	$fp = fsockopen($host, intval($port), $errno, $errstr, 30); 
	if (!$fp)  
		echo "$errstr (error number $errno) \\n"; 
	 else  
	$out = "GET $link HTTP/1.1\\r\\n"; 
	$out .= "Host: $host\\r\\n"; 
	$out .= "Connection: Close\\r\\n\\r\\n"; 
	$out .= "\\r\\n"; 
	fwrite($fp, $out); 
	$contents=''; 
	while (!feof($fp))  
		$contents.= fgets($fp, 1024); 
	 
	fclose($fp); 
	return $contents; 
	 

?>

2.4 curl_exec()

使用curl发送请求获取数据。

<?php 
if (isset($_POST['url']))

	$link = $_POST['url'];
	$curlobj = curl_init();
	curl_setopt($curlobj, CURLOPT_POST, 0);
	curl_setopt($curlobj, CURLOPT_RETURNTRANSFER, TRUE); TRUE 将curl_exec()获取的信息以字符串返回,而不是直接输出。
	$result=curl_exec($curlobj);
	curl_close($curlobj);

	$filename = './curled/'.rand().'.txt';
	file_put_contents($filename, $result); 
	echo $result;

?>

第三节 SSRF漏洞利用-探测内网资源

以上是关于-SSRF服务端请求伪造的主要内容,如果未能解决你的问题,请参考以下文章

Web常规漏洞SSRF服务端请求伪造漏洞

Web安全——服务器端请求伪造(SSRF)

Web安全——服务器端请求伪造(SSRF)

Web安全——服务器端请求伪造(SSRF)

pikachu靶场——SSRF(服务器端请求伪造)

SSRF02服务器端请求伪造——WebLogic架构漏洞复现之从SSRF==>未授权访问==>GetShell