• 网络安全笔记-SSRF


    SSRF概述

    在这里插入图片描述

    互联网上的很多Web应用提供了从其他服务器(也可以是本地)获取数据的功能。使用用户指定的URL, Web应用可以获取图片、文件资源(下载或读取)。
    如百度提供识图功能:
    用户可以从本地或者URL的方式获取图片资源,交给百度识图处理。如果提交的是URL地址,该应用就会通过URL寻找图片资源。如果Web应用开放了类似于百度识图这样的功能,并且对用户提供的URL和远端服务器返回的信息没有进行合适的验证或者过滤,就可能存在“请求伪造”的缺陷。

    请求伪造,顾名思义就是攻击者伪造正常的请求,以达到攻击的目的,是常见的web安全漏洞之一。如果“请求伪造”发生在服务器端,那么这个漏洞就叫做“服务器端请求伪造",英文名字为Server-Side Request Forgery,简称SSRF。

    SSRF (Server-Side Request Forgery,服务器端请求伪造)是一种攻击者发起的伪造由服务器端发起请求的一种攻击,也是常见web安全漏洞(缺陷或者风险)之一。(CSRF跨站请求伪造发生在客户端,请求发自客户机,SSRF发自服务器)

    SSRF危害

    在这里插入图片描述

    • 敏感信息泄漏
    • 端口扫描
    • 内网Web应用指纹识别
    • 攻击内网主机、web应用
    • 读取本地文件
    • 被作为攻击跳板

    SSRF常见代码实现

    在服务器端实现通过URL从服务器(外部或者内部)获取资源功能的方法有很多,此处使用PHP语言和curl扩展实现改功能。
    通过phpinfo()函数查看对curl扩展的支持,现在大部分wamp套件均支持curl
    扩展。
    服务器端代码如下

    #index.php
    <?php
    if (isset($_REQUEST['url']))
    {
    	$link = $_REQUEST ['url'];
    	$filename = './curled/'.time().'.txt';
    	$curlobj = curl_init($link);
    	$fp = fopen ($filename, "w");
    	curl_setopt ($curlobj, CURLOPT FILE, $fp);
    	curl_setopt($curlobj, CURLOPT_HEADER, 0) ;
    	curl_setopt ($curlobj, CURLOPT_FOLLOWLOCATION, TRUE);
    	curl_exec ($curlobj);
    	curl_close ($curlobj);
    	fclose($fp);
    	$fp = fopen ($filename, "r");
    	$result = fread ($fp, filesize($filename));
    	fclose($fp);
    	echo $result;
    }else{
     	echo "?url=[url]";
    }
    ?>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    将以上代码保存成文件[ssrf_curl.php]。该段代码实现了从服务器获取资源的基本功能, 提交

    [?url=http://www.baidu.com ]
    
    • 1

    页面就会载入百度首页的资源。
    同时,获取的资源文件会保存在[./curled]中,并以发起请求时间的unix时间戳命名。

    SSRF利用

    • 访问正常文件
      访问正常的文件,提交参数[?url=http://www.baidu.com/robots.txt]
    • 端口扫描(扫描内网的机器的端口)
      当访问未开放端口,脚本会显示空白或者报错。提交参数
      [?url=dict://127.0.0.1:1234] (字典协议)
      当访问开放端口时,脚本会显示banner 信息。
      提交参数[?url=dict://172.16.132.160:22] (有成功率)
      提交参数[?url=dict://172.0.0.1:3306](内网另一台服务器)
      提交参数[?url=dict://172.0.0.1:21]
    • 读取系统本地文件
      利用file协议可以任意读取系统本地文件提交参数:
    [?url=file://c:windows\system32\drivers\erc\hosts]
    
    • 1
    • 内网web应用指纹识别
      识别内网应用使用的框架,平台,模块以及cms可以为后续的渗透测试提供很多帮助。大多数web应用框架都有一些独特的文件和目录。通过这些文件可以识别出应用的类型,甚至详细的版本。根据这些信息就可以针对性的搜集漏洞进行攻击。
      比如可以通过访问下列文件来判断phpMyAdmin是否安装以及详细版本。
    [?url=http://localhost/phpmyadmin/README]
    
    • 1
    • 攻击内网应用
      内网的安全通常都很薄弱,溢出、弱口令等一般都是存在的。通过ssrf攻击,可以实现对内网的访问,从而可以攻击内网应用或者本地机器,获得shell,这里的应用包括服务、Web应用等。
      仅仅通过get方法可以攻击的web应用有很多,比如struts2命令执行等。
      比如Weblogic–SSRF到redis未授权访问到getshell
      redis数据库未授权访问:不需要用户名和密码就可以访问数据库,读写文件(root权限)。

    SSRF漏洞的挖掘

    对外发起网络请求的地方都可能存在SSRF漏洞,列举图片加载下载,分享页面,在线翻译,未公开的api(从远程服务器请求资源文件处理,编码处理,属性信息处理等。

    • 思维导图
      在这里插入图片描述

    SSRF的防御

    • 限制协议
      仅允许http和https请求。
    • 限制IP
      避免应用被用来获取内网数据,攻击内网。
    • 限制端口
      限制请求的端口为http常用的端口,比如,80,443,8080,8090。
    • 过滤返回信息
      验证远程服务器对请求的响应是比较简单的方法。
    • 统一错误信息(比如统一404)
      避免用户可以根据错误信息来判断远端服务器的端口状态。

    SSRF实战

    Weblogic–SSRF->GetShell

  • 相关阅读:
    计算机毕业设计Java成人自考信息与推荐系统录屏(源码+系统+mysql数据库+lw文档)
    抖音矩阵系统,抖音矩阵系统源码,抖音SEO源码独立部署。
    java-php-python-ssm-民航售票管理系统-计算机毕业设计
    Redis缓存
    Redis进阶
    Leetcode—515.在每个树行中找最大值【中等】
    农作物病害图像分割系统:深度学习检测
    实用新型专利和发明专利的区别是什么
    数据结构学习笔记(Ⅳ):串
    【NLP基础】英文关键词抽取RAKE算法
  • 原文地址:https://blog.csdn.net/L120305q/article/details/126430232