安全测试|SSRF请求伪造

前言

SSRF漏洞是一种在未能获取服务器权限时,利用服务器漏洞,由攻击者构造请求,服务器端发起请求的安全漏洞,攻击者可以利用该漏洞诱使服务器端应用程序向攻击者选择的任意域发出HTTP请求。

很多Web应用都提供了从其他的服务器上获取数据的功能,根据用户指定的URL,Web应用可以获取图片、下载文件、读取文件内容等。这种功能如果被恶意使用,将导致存在缺陷的Web应用被作为代理通道去攻击本地或远程服务器,这种形式的攻击被称为服务端请求伪造攻击。

一般情况下,SSRF攻击的目标是外网无法访问的内部系统。

本文主要分享以下技术,内容不断更新,欢迎关注!

一、漏洞原理

二、SSRF挖掘技巧

三、常见的SSRF攻击

3.1、针对服务器本身的SSRF攻击

3.2、针对其他后端系统的SSRF攻击

3.3、端口扫描

3.4、对内网web应用进行指纹识别及攻击其中存在漏洞的应用

3.5、文件读取和命令执行

四、绕过SSRF的常见防御

4.1、绕过利用黑名单防御

4.2、绕过利用白名单的防御

4.3、通过开放重定向绕过SSRF过滤器

五、SSRF防御

图片

01漏洞原理

SSRF的形成大多是由于服务端提供了从其他服务器获取数据的功能,但是没有对目标地址进行过滤和限制。

主要攻击方式:

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

2.攻击运行在内网或者本地的应用程序。

3.对内网的web应用进行指纹识别(通过请求默认文件得到特定的指纹),对资产信息进行识别。

4.利用file协议读取本地文件。

5.攻击内外网的web应用,主要是使用HTTP GET请求就可以实现的攻击等。

比如,一个正常的Web应用本应该从指定URL获取网页文本内容或加载指定地址的图片,而攻击者利用漏洞伪造服务器端发起请求,从而突破了客户端获取不到数据的限制,如内网资源、服务器本地资源等。

如下代码:

<?php  $url=$_GET['url'];  echo file_get_contents($url);?> 

这段代码使用file_get_contents函数从用户指定的URL获取图片并展示给用户。此时如果攻击者提交如下payload,就可以获取到内网主机HTTP服务8000端口的开放情况

http://example.com/ssrf.php?url=http:192.168.209.134:8000

02SSRF挖掘技巧

目前常见的漏洞挖掘方式有两种:

1、从web功能上挖掘

①分享:通过url地址分享网页内容

②转码服务

③在线翻译

④图片的下载与加载

⑤图片、文章收藏功能

⑥未公开的API实现及调用URL的功能

2、从URL关键字挖掘

Share、wap、url、link、src、source、target、u、3g、display、sourceURL、imageURL、domain……

03常见的SSRF攻击

SSRF攻击通常利用信任关系来进行攻击并执行未经授权的操作。这些信任关系可能与服务器本身有关,也可能与同一系统内的其他后端系统有关。

3.1 针对服务器本身的SSRF攻击

在针对服务器本身的SSRF攻击中,攻击者诱使应用程序通过其环回网络接口向承载应用程序的服务器发出HTTP请求。通常,这将涉及为URL提供一个主机名,例如127.0.0.1(指向回送适配器的保留IP地址)或localhost(同一适配器的常用名称)。

例如:一个购物应用程序,该应用程序使用户可以查看特定商店中某商品是否有库存。为了提供库存信息,应用程序必须根据所涉及的产品和商店查询各种后端REST API。该功能是通过将URL通过前端HTTP请求传递到相关的后端API端点来实现的。因此,当用户查看某件商品的库存状态时,他们的浏览器会发出如下请求:

他们的浏览器会发出如下请求:​​​​​​​

POST /product/stock HTTP/1.0Content-Type: application/x-www-form-urlencodedContent-Length: 118stockApi=http://stock.weliketoshop.net:8080/product/stock/check%3FproductId%3D6%26storeId%3D1

服务器向指定的URL发出请求,检索库存状态,然后将其返回给用户。

在这种情况下,攻击者可以修改请求以指定服务器本身本地的URL。

例如:​​​​​​​

POST /product/stock HTTP/1.0Content-Type: application/x-www-form-urlencodedContent-Length: 118
stockApi=http://localhost/admin

在这里,服务器将获取/admin的内容并将其返回给用户。

现在攻击者可以直接访问/admin;但是,通常只有适当的经过身份验证的用户才能访问管理功能。因此,直接访问URL时将不会看到任何有价值的内容。但是,当对/admin的请求来自本地计算机时,将绕过常规的访问控制,该应用程序授予对管理功能的完全访问权限,因为该请求来自受信任的位置。

为什么应用程序会以这种方式运行,并且隐式信任来自本地计算机的请求?发生这种情况可能有多种原因:

1、该访问控制检查可能会在应用服务器的前面,利用一个不同的组件来实现,与服务器本身建立连接后,将绕过检查。

2、为了灾难恢复的目的,该应用程序可能允许无需登录即可对本地计算机上的任何用户进行管理访问,这为管理员提供了一种在丢失凭据的情况下恢复系统的方法。这里假设是来自服务器本身的用户才能完全受信任。

3、管理界面可能正在侦听的端口号与主应用程序不同,因此用户可能无法直接访问。

在这种信任关系中,由于来自本地计算机的请求与普通请求的处理方式不同,这些信任关系会使SSRF成为严重漏洞。

3.2 针对其他后端系统的SSRF攻击

SSRF引起的另一种信任关系是:服务器能够与用户无法直接访问的其他后端系统进行交互,这些系统通常具有不可路由的专用IP地址。由于后端系统通常受网络拓扑保护,因此它们的安全状态较弱。在许多情况下,内部后端系统包含敏感功能,能够与该系统进行交互的任何人都可以在不进行身份验证的情况下对其进行访问。

在前面的示例中,假设在后端URL处有一个管理界面 https://192.168.0.68/admin

在这里,攻击者可以通过提交以下请求来利用SSRF漏洞来访问管理界面:​​​​​​​

POST /product/stock HTTP/1.0Content-Type: application/x-www-form-urlencodedContent-Length: 118
stockApi=http://192.168.0.68/admin

3.3 端口扫描​​​​​​​

http://example.com/ssrf.php?url=http:ip:21/http://example.com/ssrf.php?url=http:ip:443/http://example.com/ssrf.php?url=http:ip:80/http://example.com/ssrf.php?url=http:ip:3306/等

我们可以通过响应时间、返回的错误信息、返回的服务Banner信息、响应时间等来对端口开放情况进行给判断。

3.4 对内网web应用进行指纹识别及攻击其中存在漏洞的应用

大多数web应用都有一些独特的文件和目录,通过这些文件可以识别出应用的类型,甚至详细的版本。基于此特点可利用SSRF漏洞对内网Web应用进行指纹识别,如下Payload可以识别主机是否安装了WordPress:

http://example.com/ssrf.php?url=https%3A%2F%2F127.0.0.1%3A443%2Fwp-content%2Fthemes%2Fdefault%2Fimages%2Faudio.jpg

得到指纹后,便能有针对性地对其存在的漏洞进行利用,如下payload展示了如何利用SSRF漏洞攻击内网的JBOSS应用:

http://example.com/ssrf.php?url=http%3A%2F%2F127.0.0.1%3A8080%2Fjmx-console%2FHtmlAdaptor%3Faction%3DinvokeOp%26name%

3.5 文件读取和命令执行

1、文件读取

如果攻击者指定了file协议,则可通过file协议来读取服务器上的文件内容,如下:

http://example.com/ssrf.php?url=file:///etc/passwd

2、命令执行

例如PHP环境下,利用expect协议执行系统命令,如下:

http://example.com/ssrf.php?url=expect://id

04绕过SSRF的常见防御

4.1 绕过利用黑名单防御

一些应用程序阻止包含主机名(如127.0.0.1和localhost)或敏感URL(如/admin)的输入/admin。在这种情况下,绕过方法如下:

1、替代IP127.0.0.1,例如2130706433、017700000001、127.1

2、注册您自己的域名,该域名解析为127.0.0.1

您可以spoofed.burpcollaborator.net用于此目的

3、使用URL编码或大小写变化对阻塞的字符串进行混淆

4.2 绕过利用白名单的防御

某些应用程序仅允许输入匹配,以允许值开头或包含允许值的白名单的输入。在这种情况下,您有时可以利用URL解析中的不一致来绕过过滤器。

URL规范包含许多功能,在实现URL的临时分析和验证时可能会被忽略:

1、使用@字符在主机名之前的URL中嵌入凭据。例如:https://expected-host@evil-host

2、使用该#字符来指示URL片段。例如:https://evil-host#expected-host

3、利用DNS命名层次结构将所需的输入放入DNS名称中。例如:https://expected-host.evil-host

4、使用URL编码字符来混淆URL解析代码,如果实现过滤器的代码与执行后端HTTP请求的代码以不同的方式处理URL编码的字符,则特别有用

5、这些技术可以组合在一起使用

4.3 通过开放重定向绕过SSRF过滤器

通过利用开放重定向漏洞,有时可以绕过任何基于过滤器的防御。

假设严格验证了用户提交的URL,以防止恶意利用SSRF行为,但是,允许使用URL的应用程序包含一个打开的重定向漏洞。提供用于使后端HTTP请求支持重定向的API,可以构造一个满足过滤条件的URL,并导致将请求重定向到所需的后端目标。

例如,假设应用程序包含一个开放重定向漏洞,其中包含以下URL:

/product/nextProduct?currentProductId=6&path=http://evil-user.net

返回重定向到:

http://evil-user.net

以利用开放重定向漏洞绕过,并按如下方式利用SSRF漏洞:​​​​​​​

POST /product/stock HTTP/1.0Content-Type: application/x-www-form-urlencodedContent-Length: 118
stockApi=http://weliketoshop.net/product/nextProduct?currentProductId=6&path=http://192.168.0.68/admin

这种SSRF漏洞之所以有效,是因为应用程序首先验证了提供的stockAPIURL是否在允许的域上,然后,应用程序提供的URL,触发重定向,并向攻击者选择的内部URL发出请求。

05SSRF防御

SSRF漏洞的防御主要是保证用户请求的合法性、服务器行为的合规性两个方面。

1、限制请求端口只能为web端口,只允许访问HTTP和HTTPS的请求;

2、过滤返回的信息;

3、禁止不常使用的端口;

4、限制不能访问内网的IP,防止对内网进行攻击;

5、对于DNS重绑定,使用DNS缓存或者Host白名单

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/17292.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【笛卡尔树】

笛卡尔树 笛卡尔树定义构建性质 习题P6453 [COCI 2008/2009 #4] PERIODNICF1913D Array CollapseP4755 Beautiful Pair[ARC186B] Typical Permutation Descriptor 笛卡尔树 定义 笛卡尔树是一种二叉树&#xff0c;每一个节点由一个键值二元组 ( k , w ) (k,w) (k,w) 构成。要…

java测试题

String str2 "he""llo" xx.java--->xx.class----->内存 在由.java文件通过javac命令变为.class文件的过程中已经自动拼接变为“hello” String str2 "he"new String"llo" 在编译为,class文件时还是两个字符串“he”和“llo”…

SQLite 数据库:优点、语法与快速入门指南

文章目录 一、引言二、SQLite 的优点 &#x1f4af;三、SQLite 的基本语法3.1 创建数据库3.2 创建表3.3 插入数据3.4 查询数据3.5 更新数据3.6 删除数据3.7 删除表 四、快速入门指南4.1 安装 SQLite4.2 创建数据库4.3 创建表4.4 插入数据4.5 查询数据4.6 更新数据4.7 删除数据4…

无人机之无线传输技术!

一、Lightbridge和OcuSync图传技术 Lightbridge技术&#xff1a;这是大疆自主研发的一种专用通信链路技术&#xff0c;使用单向图像数据传输&#xff0c;类似于电视广播塔的数据传输形式。它主要采用2.4GHz频段进行传输&#xff0c;并且可以实现几乎“零延时”的720p高清图像传…

逻辑分析仪的使用-以STM32C8T6控制SG90舵机为例

STM32C8T6控制SG90舵机 1.逻辑分析仪作用 逻辑分析仪在嵌入式开发中的作用非常重要&#xff0c;它是开发、调试和排错过程中的一个不可或缺的工具。具体来说&#xff0c;逻辑分析仪的作用包括以下几个方面&#xff1a; 1.信号捕获和分析&#xff1a; 逻辑分析仪能够实时捕获多个…

线性代数 第七讲 二次型_标准型_规范型_坐标变换_合同_正定二次型详细讲解_重难点题型总结

文章目录 1.二次型1.1 二次型、标准型、规范型、正负惯性指数、二次型的秩1.2 坐标变换1.3 合同1.4 正交变换化为标准型1.5 可逆线性变换和正交变换1.6 二次型化标准形&#xff0c;二次型化规范形的联系思考1.8 两个二次型联系的思考1.9 对于配方法问题的深入思考 2.二次型的主…

vue学习9

1.文章分类页面-element-plus表格 基本架子-PageContainer封装 按需引入的彩蛋&#xff0c;components里面的内容都会自动注册 用el-card组件&#xff0c;里面使用插槽或具名插槽 文章分类渲染 & loading处理 序号&#xff1a; <el-table-column type"index"…

Spring Boot整合DeepSeek实现AI对话(API调用和本地部署)

本篇文章会分基于DeepSeek开放平台上的API&#xff0c;以及本地私有化部署DeepSeek R1模型两种方式来整合使用。 本地化私有部署可以参考这篇博文 全面认识了解DeepSeek利用ollama在本地部署、使用和体验deepseek-r1大模型 Spring版本选择 根据Spring官网的描述 Spring AI是一…

硬件电路(10)-二极管

一、概述 二极管是用半导体材料(硅、硒、锗等)制成的一种电子器件。它具有单向导电性能&#xff0c; 即给二极管阳极和阴极加上正向电压时&#xff0c;二极管导通。 当给阳极和阴极加上反向电压时&#xff0c;二极管截止。 因此&#xff0c;二极管的导通和截止&#xff0c;则相…

智慧农业-虫害及生长预测

有害生物防控系统是一个综合性的管理体系&#xff0c;旨在预防和控制对人类生活、生产甚至生存产生危害的生物。这些生物可能包括昆虫、动物、植物、微生物乃至病毒等。 一、系统构成 1、监测预警系统&#xff1a;利用智能传感器、无人机、遥感技术等手段&#xff0c;实时监测…

在 PyCharm 中接入deepseek的API的各种方法

在 PyCharm 中接入 DeepSeek 的 API&#xff0c;通常需要以下步骤&#xff1a; 1. 获取 DeepSeek API 密钥 首先&#xff0c;确保你已经在 DeepSeek 平台上注册并获取了 API 密钥&#xff08;API Key&#xff09;。如果没有&#xff0c;请访问 DeepSeek 的官方网站注册并申请 …

DeepSeek 助力 Vue 开发:打造丝滑的返回顶部按钮(Back to Top)

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享一篇文章&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 目录 Deep…

Github自定义readme文件 个人主页简介 模版

自己写的 样式 # &#x1f44b; Hi bro , Im Dduo ! Glad to meet you &#x1f601;&#x1f60d;&#x1f61c;- &#x1f4da; Im Dduo, a student. Feel free to reach out if youd like to chat or collaborate! &#x1f60a; - &#x1f4ac; Dont hesitate to reach …

【工业安全】-CVE-2022-35561- Tenda W6路由器 栈溢出漏洞

文章目录 1.漏洞描述 2.环境搭建 3.漏洞复现 4.漏洞分析 4.1&#xff1a;代码分析 4.2&#xff1a;流量分析 5.poc代码&#xff1a; 1.漏洞描述 漏洞编号&#xff1a;CVE-2022-35561 漏洞名称&#xff1a;Tenda W6 栈溢出漏洞 威胁等级&#xff1a;高危 漏洞详情&#xff1…

CondaValueError: Malformed version string ‘~‘: invalid character(s)

CondaValueError: Malformed version string ‘~‘: invalid character(s) 送一张 GPT plus 、 deepseek-R1 满血 体验卡&#xff5e; https://bbs.csdn.net/topics/619568415 ​ 报错原因 使用conda安装一些库时出现以下报错&#xff1a; CondaValueError: Malformed versio…

渗透利器:YAKIT 工具-基础实战教程.

YAKIT 工具-基础实战教程. YAKIT&#xff08;Yak Integrated Toolkit&#xff09;是一款基于Yak语言开发的集成化网络安全单兵工具&#xff0c;旨在覆盖渗透测试全流程&#xff0c;提供从信息收集、漏洞扫描到攻击实施的自动化支持。其核心目标是通过GUI界面降低Yak语言的使用…

【Git版本控制器】:第一弹——Git初识,Git安装,创建本地仓库,初始化本地仓库,配置config用户名,邮箱信息

&#x1f381;个人主页&#xff1a;我们的五年 &#x1f50d;系列专栏&#xff1a;Linux网络编程 &#x1f337;追光的人&#xff0c;终会万丈光芒 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 ​ 相关笔记&#xff1a; https://blog.csdn.net/dj…

数据结构(6)

注意&#xff1a;只有前序和中序或者后序和中序才能还原二叉树。 1.创建一个二叉树 2.遍历一个二叉树&#xff08;前序遍历&#xff0c;后序和中序遍历与此类似&#xff09; 3.寻找二叉树的节点个数和层数 4.销毁二叉树 5.层序遍历

LabVIEW用户界面设计原则

在LabVIEW开发中&#xff0c;用户界面&#xff08;UI&#xff09;设计不仅仅是为了美观&#xff0c;它直接关系到用户的操作效率和体验。一个直观、简洁、易于使用的界面能够大大提升软件的可用性&#xff0c;尤其是在复杂的实验或工业应用中。设计良好的UI能够减少操作错误&am…

大语言模型入门

大语言模型入门 1 大语言模型步骤1.1 pre-training 预训练1.1.1 从网上爬数据1.1.2 tokenization1.1.2.1 tokenization using byte pair encoding 1.3 预训练1.3.1 context1.3.2 training1.3.3 输出 1.2 post-training1.2.1 token 1.2 SFT监督微调1.3 人类反馈强化学习1.3.1 人…