Web安全——SSRF

SSRF

定义

  • SSRF(server-site request forery,服务端请求伪造)是一种构造请求,由服务端发起请求的安全漏洞。
  • 一般情况下,SSRF的目标就是与外部隔离的内网资源。
  • 很多web应用提供了从其他服务器上获取数据的功能。使用用户指定的URL,web应用可以获取图片,下载文件,读取文件内容等。
    请添加图片描述

SSRF漏洞原理

  • 形成原因:服务端提供了从其他服务器获取数据的功能,但没有对内网目标地址做过滤和限制
  • 只要方式:
    1. 对外网、服务器所在内网、本地进行端口扫描,获取Banner信息。
    2. 测试运行再内网或本地的应用程序。
    3. 利用file协议读取本低文件。
  • 代码分析
    请添加图片描述

SSRF漏洞利用

  • 利用SSRF进行文件读取
    请添加图片描述

产生SSRF的PHP函数

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

  • file_get_content() :

    • 以下代码使用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; 
    ?>
    
  • 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; 
            } 
        }
    ?>
    
  • 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进行内网资源访问

  • 一般情况下讲Web应用程序暴露再互联网可以通过Web浏览器进行访问。但是会将内网资源封闭起来,避免与外部交互。那么如果网站存在SSRF漏洞,可以利用SSRF进行内网资源访问

  • 利用SSRF进行端口扫描

    eg:http://127.0.0.1/ssrf/ssrf.php?url=http://127.0.0.1:3306

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值