简谈SSRF漏洞

一、SSRF漏洞定义

SSRF(Server-Side Request Forgery:服务请求伪造)是一种由攻击者构造请求,从而让服务端发起请求的一种安全漏洞。它将一个可以发起网络请求的服务当作跳板来攻击其他内部服务。SSRF的攻击目标一般是与外部隔离的内网资源。

 

二、SSRF漏洞原理

当服务端提供了从其他服务器获取数据的功能(如:从指定URL地址获取网页文本内容、加载指定地址的图片、下载等),但是没有对目标地址做过滤与限制时就会出现SSRF。

 

三、主要攻击方式

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

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

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

4、对内网web应用进行指纹识别,识别企业内部的资产信息

5、攻击内外网的web应用,主要是使用HTTP GET请求就可以实现的攻击(比如struts2、SQli)

 

四、SSRF漏洞利用

1、存在SSRF漏洞的简要代码

<?php 
    function curl($url){                   //curl函数用来发送请求
        $ch = curl_init();                 //初始化curl
        curl_setopt($ch,CURLOPT_URL,$url); //将参数URL代入
        curl_setopt($ch,CURLOPT_HEADER,0);
        curl_exec($ch);                    //执行请求该URL
        curl_close($ch);
    }

$url = $_GET['url'];                       //用户通过构造url来进行访问
curl($url);
?>

页面ssrf.php实现的功能是获取GET参数URL,然后将URL的内容返回网页上。当设置参数为URL为内网地址时,则会泄露内网信息。当访问.../ssrf.php?url=file: ///C: /Windows/win.ini即可读取本地文件。

 

2、php中可能存在SSRF漏洞的函数

1) file_get_content()

2) fsockopen()

3) curl_exec()

 ... 

 

五、漏洞绕过

部分存在漏洞,或者可能产生SSRF的功能中做了白名单或者黑名单的处理,来达到阻止对内网服务和资源的攻击和访问。因此想要达到SSRF的攻击,需要对请求的参数地址做相关的绕过处理,常见的绕过方式如下:

1、限制请求IP不为内网地址

  • 采用短网址绕过。比如百度短地址https://dwz.cn/
  • 采用可以指向任意域名的xip.io。127.0.0.1.xip.io,可以解析为127.0.0.1
  • 采用进制转换。127.0.0.1八进制:0177.0.0.1。十六进制:0x7f.0.0.1。十进制:2130706433

2、限制请求只为http协议

利用 https://tinyurl.com 生成302跳转地址。

 

六、漏洞修复

1、屏蔽返回的详细信息。例如请求文件时,只返回文件是否请求成功,请求不成功的文件统一返回错误信息。

2、对请求地址设置白名单,只允许请求白名单内的地址。

3、禁用除http和https外的协议,如:file://,gopher://,dict://等。

4、限制请求的端口为固定服务端口,如:80,443。

posted @ 2021-09-22 03:17  kinyoobi  阅读(834)  评论(0编辑  收藏  举报