ssrf漏洞分析

ssrf漏洞分析

关于ssrf

  • 首先简单的说一下我理解的ssrf,大概就是服务器会响应用户的url请求,但是没有做好过滤和限制,导致可以攻击内网。

ssrf常见漏洞代码

  • 首先有三个常见的容易造成ssrf漏洞的函数需要注意

    fsockopen()
    file_get_contents()
    curl_exec()

  • 下面是本地搭建环境测试
  1. fsockopen()

<?php
$host=$_GET['url'];
$fp = fsockopen("$host", 80, $errno, $errstr, 30);
if (!$fp) {
    echo "$errstr ($errno)<br />\n";
} else {
    $out = "GET / HTTP/1.1\r\n";
    $out .= "Host: $host\r\n";
    $out .= "Connection: Close\r\n\r\n";
    fwrite($fp, $out);
    while (!feof($fp)) {
        echo fgets($fp, 128);
    }
    fclose($fp);
}
?>

  • fsockopen本身就是打开一个网络连接或者Unix套接字连接。

  1. file_get_contents()

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

  • file_get_contents是把文件写入字符串,当把url是内网文件的时候,他会先去把这个文件的内容读出来再写入,导致了文件读取。

  1. curl_exec()

<?php
if(isset($_GET['url']))
{
	$link=$_GET['url'];
	//$filename='./'.rand().'.txt';
	$curlobj=curl_init($link);
	curl_setopt($curlobj,CURLOPT_FILE,$link);
	curl_setopt($curlobj,CURLOPT_HEADER,0);
	$result=curl_exec($curlobj);
	curl_exec($curlobj);
	curl_close($curlobj);
	//fclose($link);
	//file_put_contents($filename, $result); 
	echo $result;
}

?>

  • 这应该是大家最熟悉的一个函数了,因为利用方式很多最常见的是通过file dict gopher这三个协议来进行渗透。

  • 上面是通过file协议读取文件,下面这张图是通过dict协议探测端口

  • 然后是gopher协议

  • gopher协议和ssrf组合能达成很多功能具体用法还要深入研究。

posted @ 2017-10-09 19:47  wangshu  阅读(3120)  评论(0编辑  收藏  举报