代码编织梦想

1 基础知识

1.1 概述

  1. 背景:互联网上的很多Web应用提供了从其他服务器(也可以是本地)获取数据的功能,使用用户指定的URL,Web应用可以获取图片、文件资源(下载或读取)。
  2. 定义:SSRF (Server-Side Request Forgery),服务器端请求伪造,是一种由攻击者构造请求,由服务端发起请求的安全漏洞。 请求伪造,顾名思义就是攻击者伪造正常的请求,以达到攻击的目的,就是常见的Web安全漏洞之一。如果“请求伪造”发生在服务器端,那么这个漏洞就叫做“服务器端请求伪造”即SSRF。
  3. 例如:百度识图功能。
    用户可以从本地或URL的方式获取图片资源,交给百度识图处理。如果提交的是URL地址,该应用就会通过URL寻找图片资源。如果Web应用开放了类似于百度识图这样的功能,并且对用户提供的URL和远端服务器返回的信息没有进行合适的验证或者过滤,就可能存在“请求伪造”的缺陷。.

1.2 原理

  1. SSRF漏洞成因:
    (1)服务端提供了从其他服务器应用获取数据的功能;
    (2)服务端对目标地址做过滤与限制 。
  2. 攻击目标:一般情况下 , SSRF攻击的目标是外网无法访问的内部系统(正因为请求是由服务端发起的,所以服务端能请求到与自身相连而与外网隔离的内部系统)。

1.3 危害

  1. 对外网、服务器所在内网、本地进行端口扫描,获取一些服务的banner信息。
  2. 攻击运行在内网或本地的应用程序。
  3. 对内网 Web应用进行指纹识别,识别企业内部的资产信息 。
  4. 攻击内外网的Web应用,主要是使用 HTTP GET请求就可以实现的攻击(比如struts2 、 SQli等) 。
  5. 利用自file协议读取本地文件等 。

2 攻击

2.1 实验环境

  1. 在服务器端实现通过URL从服务器(外部或内部)获取资源的功能方法有很多,此处使用PHP语言和curl扩展实现该功能。
  2. 在虚拟机中部署WAMP环境,参考文章《win2008R2SP1+WAMP环境部署》。
  3. PHP+curl简介:
    PHP 支持 Daniel Stenberg 创建的 libcurl 库,能够连接通讯各种服务器、使用各种协议。libcurl 目前支持的协议有 http、https、ftp、gopher、telnet、dict、file、ldap。 libcurl 同时支持 HTTPS 证书、HTTP POST、HTTP PUT、 FTP 上传(也能通过 PHP 的 FTP 扩展完成)、HTTP 基于表单的上传、代理、cookies、用户名+密码的认证。
  4. 查看curl扩展功能支持:利用PHP探针函数phpinfo()函数可以查看靶机服务器是否支持curl扩展,以及所支持curl的版本。现在大部分WAMP套件均支持curl。
    在这里插入图片描述
  5. 假设服务器根目录下有SSRF.php文件,文件内代码如下,同时在根目录新建文件夹并命名为curled。下文攻击方式将利用该网页进行。
<?php
if (isset($_REQUEST['url'])){
	$link=$_REQUEST['url'];
	$filename='./curled/'.time().'.txt';//代码读取url后将内容写入到该文件夹下的新建文件中
	$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]";
}
?>

2.2 利用方式

2.2.1 正常访问

  1. 真实机打开浏览器,访问192.168.1.4/SSRF.php?url=http://www.baidu.com,可以看到网页显示如下。
    在这里插入图片描述
  2. 打开靶机服务器根目录下surled文件夹,可以看到生成一个txt文件,打开后内容如下。这个是输入url对应网站的网页代码。
    在这里插入图片描述
  3. 在真实机浏览器中,访问192.168.1.4/SSRF.php?url=http%3A%2F%2Fww3.sinaimg.cn%2Fbmiddle%2F9150e4e5ly1fjfwjgxuwoj20jg0ax428.jpg,可以看到网页显示如下:
    在这里插入图片描述
  4. 打开靶机服务器curled文件夹,将新生成的txt文件后缀修改为jpg,保存后打开,可以看到文件按图片显示。也就是说该网页没有根据文件格式进行针对性的渲染,只是将代码以文本形式展示出来。
    在这里插入图片描述
  5. 真实机浏览器访问192.168.1.4/SSRF.php?url=http://www.baidu.com/robots.txt,当一个搜索蜘蛛访问一个站点时,它会首先检查该站点根目录下是否存在robots.txt,如果存在,搜索机器人就会按照该文件中的内容来确定访问的范围;如果该文件不存在,所有的搜索蜘蛛将能够访问网站上所有没有被口令保护的页面。更多robots协议更多内容请查看百度百科介绍。
    在这里插入图片描述

2.2.2 端口扫描

  1. 真实机浏览器访问192.168.1.4/SSRF.php?url=dict://192.168.1.4:80,页面显示如下,成功带回服务器信息,说明端口开启着。
    在这里插入图片描述
  2. 真实机浏览器访问192.168.1.4/SSRF.php?url=dict://192.168.1.4:8080,页面显示如下,说明端口未开启。
    在这里插入图片描述
  3. 服务器所处的内网环境是外网难以直接访问的(思考NAT相关原理),但是服务器处于内网环境中,相比于外网将更容易访问内网资源,或者扫描内网端口。真实机浏览器访问192.168.1.4/SSRF.php?url=dict://192.168.1.2:21,显示如下,说明内网该机器不存在或未开发该端口。
    在这里插入图片描述

2.2.3 读取系统本地文件

利用file协议可以任意读取系统本地文件,真实机浏览器访问192.168.1.4/SSRF.php?url=file://c:\windows\system32\drivers\etc\hosts。可以看到成功读取到服务器本地的hosts文件。
在这里插入图片描述

2.2.4 内网Web应用指纹识别

  1. 识别内网应用使用的框架、平台、模块以及CMS信息,可以为后续的渗透测试提供很多帮助。大多数Web应用框架都有一些独特的文件和目录。通过这些文件可以识别出应用的类型,甚至详细的版本,根据这些信息就可以针对性地收集漏洞进行攻击。
  2. 真实机浏览器访问192.168.1.4/SSRF.php?url=http://192.168.1.4/phpmyadmin/README
    在这里插入图片描述

2.2.5 攻击内网应用

  1. 内网的安全通常都很薄弱,溢出、弱口令等一般都是存在的。通过SSRF攻击,可以实现对内网的访问,从而可以攻击内网应用或者本地及其,获取Shell,这里的应用包括服务、Web应用等。
  2. 通过GET方法可以攻击的Web应用有很多,比如struts2命令执行等。

2.3 绕过

当进行SSRF漏洞利用时,可能会存在服务器对所请求进行检验,比如说是否含有具体域名或网站格式等,如果在这样的限制条件下想要访问内网IP,可以尝试:

  1. 使用url=http://www.x.com@10.0.0.1,该命令实际上访问的是IP地址10.0.0.1。要理解该URL是如何被浏览器解析地,要先了解URL的构成,明白@后面的才是真实访问的域名。
  2. 将IP地址进行进制转换。

3 漏洞挖掘

  1. 对外发起网络请求的地方都有可能存在SSRF漏洞,如图片加载下载、分享页面、在线翻译、未公开的api(从远程服务器请求资源文件处理、编码处理、属性信息处理等)。具体可以根据以下关键信息进行判断识别。
  2. 从Web功能上进行漏洞挖掘:
    1. 分享型:通过URL地址分享网页内容;
    2. 转码服务型:通过URL地址把原地址的网页内容调优使其适合手机屏幕浏览;
    3. 在线翻译:通过URL地址翻译对应文本的内容,提供此功能的国内公司有百度、有道等;
    4. 图片加载下载:通过URL地址加载或下载图片;
    5. 图片文件收藏功能;
    6. 未公开的api实现以及其他调用URL功能。
  3. 从URL中的关键字进行挖掘:
    1. share;
    2. wap
    3. url
    4. link
    5. src
    6. source
    7. target
    8. u
    9. 3g
    10. display
    11. sourceURL
    12. imageURL
    13. domain

4 防御

  1. 限制协议:
    限制请求的端口只能为Web端口,只允许访问 HTTP和HTTPS 的请求,禁止其他协议。了解一下Gopher协议在SSRF漏洞中的应用,详见参考文献。
  2. 限制IP:
    1. 目的:避免应用被用来获取内网数据,攻击内网。
    2. 对传入的url进行过滤,将符合内网IP特征的信息过滤掉。
  3. 限制端口:
    1. 限制请求的端口为http常用的端口,比如80、443、8080、8090等。
    2. 对于其他异常端口则进行过滤,如3306等。
  4. 过滤返回信息:
    验证并过滤远程服务器对请求的响应,是比较简单防御方法。比如说原本服务器这个功能是用来识图的,那么如果接受到的响应发现不是一张图片,则过滤掉。
  5. 统一错误信息:
    避免攻击者根据错误信息来判断远端服务器的端口状态,比如错误信息全部改为404。

5 总结

  1. 理解SSRF漏洞的攻击原理;
  2. 掌握SSRF漏洞的挖掘方式;
  3. 掌握SSRF漏洞的攻击方式和利用方式;
  4. 掌握SSRF漏洞的防御方式。

参考文献

  1. curl扩展官方手册
  2. URI和URL的区别比较与理解
  3. Gopher协议在SSRF漏洞中的深入研究
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Fighting_hawk/article/details/123492599

【dorabox实战】————8、ssrf分析与研究_fly_鹏程万里的博客-爱代码爱编程

SSRF简介 SSRF(Server-Side Request Forgery:服务器端请求伪造) 是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。一般情况下,SSRF攻击的目标是从外网无法访问的内部系统。(正是因为它是由服务端发起的,所以它能够请求到与它相连而与外网隔离的内部系统) SSRF形成原因 SSRF 形成的原因大都是由于服务端提

[网络安全自学篇] 五十六.i春秋老师分享小白渗透之路及Web渗透技术总结-爱代码爱编程

这是作者的网络安全自学教程系列,主要是关于安全工具和实践操作的在线笔记,特分享出来与博友们学习,希望您们喜欢,一起进步。前文讲解了Windows漏洞利用知识和DEP堆栈执行保护机制,通过构造ROP链来绕过DEP保护,并编写漏洞利用脚本并实现自动化攻击。本文将分析i春秋YOU老师的小白渗透之路,并结合作者系列文章总结Web渗透技术点,非常适合初学者学习,希望

攻防世界(Web进阶区)——fakebook-爱代码爱编程

  这个思路可能并不是靶场原本想要让用户做的,但也无妨吧,怎样不是做呢。象棋高手总结了几十年的经验,也可能会输给新入门的新手。新手经验不足,更不谈什么战术,无心的一步棋,可能会让老者思前顾后,露出弱点。   进入靶场: 除了一个login登陆按钮,还有一个join注册按钮。开始之前,一般会习惯性的扫描下目录,看看有什么漏掉的文件。如果大家经常刷

SSRF服务器端请求伪造漏洞之——原理及寻找方法-爱代码爱编程

原理及寻找方法 目录 原理及寻找方法简介SSRF 形成原因小结SSRF 漏洞出没位置验证方式绕过手法更改 IP 地址写法SSRF常用的后端实现file_get_contentsfsockopen()curl_exec() 简介 SSRF(Server-Side Request Forgery:服务器端请求伪造) 是一种由攻击者构造形成

SSRF服务器端请求伪造漏洞之——攻防实战与防范方法-爱代码爱编程

攻防实战与防范方法 目录 攻防实战与防范方法bWAPP 中的 SSRF 给出了 3 个小实验来说明 SSRF 的利用场景任务 1:使用远程文件包含进行端口扫描(内网探测)任务 2:使用 XXE 获取敏感文件中的内容(文件读取)任务 3:使用 XXE 进行内网 sql 注入SSRF 知识拓展实验靶机搭建file 协议的运用gopher 协议的运用d

详解云安全攻防模型,这些攻击战略和战术越早知道越好!-爱代码爱编程

云计算在带来便利的同时,也带来了新的安全技术风险、政策风险和安全合规风险。 那么,如何设计云计算安全架构、如何保障云计算平台的安全合规、如何有效提升安全防护能力是需要研究的重要课题。 本文就先来介绍一下ATT&CK云安全攻击模型。 01 ATT&CK定义 ATT&CK(Adversarial Tactics, Techniq

XXE攻防-爱代码爱编程

目录 前言什么是XXE脑图利用思路什么是XMLXML基本语法文档类型定义(DTD)实体XXE攻击分类检测XXE存在任意文件读取SSRF 攻击执行系统命令探测内网端口Blind XXE漏洞靶机实测Vulnhub搭建任意文件读取获取flag靶机实测XXE-lab防御方式使用开发语言提供的禁用外部实体的方法过滤用户提交的XML数据参考 前言 什么是

【Web常规漏洞】SSRF服务端请求伪造漏洞-爱代码爱编程

文章目录 参考 概念 —— 产生原因 ——可能存在漏洞的代码 ——漏洞分类 —— 潜在危害 漏洞利用 —— 漏洞防御 —— 漏洞绕过 概念:SSRF(Server-Side Request Forgery:服务器端请求伪造) 是一种利用漏洞伪造服务器端发起请求。一般情况下,SSRF攻击的目标是从外网无法访问的内部系统。 漏洞产生原因:服务端

浅谈云上攻防 --SSRF 漏洞带来的新威胁-爱代码爱编程

前言 在《浅谈云上攻防——元数据服务带来的安全挑战》一文中,生动形象的为我们讲述了元数据服务所面临的一系列安全问题,而其中的问题之一就是通过SSRF去攻击元数据服务;文中列举了2019年美国第一资本投资国际集团(Capital One Financial Corp.,下“Capital One公司”)信息泄漏的案例;我们内部也监测到过类似的事件:测试人员

细说——SSRF-爱代码爱编程

目录 什么是SSRF形成原因容易出现SSRF的地方SSRF的危害脑图SSRF相关函数和协议函数file_get_contents()fsockopen()curl_exec()协议漏洞检测常用绕过方式限制为http://www.xxx.com 域名时(利用@)限制请求IP不为内网地址限制请求只为http协议利用[::]利用句号利用特殊地址利用协议利

[系统安全] 三十九.APT系列(4)APT攻防溯源普及和医疗数据安全防御总结-爱代码爱编程

您可能之前看到过我写的类似文章,为什么还要重复撰写呢?只是想更好地帮助初学者了解病毒逆向分析和系统安全,更加成体系且不破坏之前的系列。因此,我重新开设了这个专栏,准备系统整理和深入学习系统安全、逆向分析和恶意代码检测,“系统安全”系列文章会更加聚焦,更加系统,更加深入,也是作者的慢慢成长史。换专业确实挺难的,逆向分析也是块硬骨头,但我也试试,看看自己未来四

Web安全攻防渗透测试实战指南笔记 三-爱代码爱编程

第二章 2.1 在Linux系统中安装LANMP LANMP是Linux下Apache、Nginx、MySQL和PHP的应用环境,本节演示的是WDLinux的一款集成的安装包。 首先,下载需要的安装包,命令如下所示。 wegt http://dl.wdlinux.cn/files/lanmp_v3.tar.gz 下载完成后进行解压,解压文件的命令