Skip to main content

moregeek program

#yyds干货盘点#web安全server-side request forgery_文本、的博客-多极客编程

Server-side request forgery (SSRF)

在本节中,我们将解释 server-side request forgery(服务端请求伪造)是什么,并描述一些常见的示例,以及解释如何发现和利用各种 ​​SSRF​​ 漏洞。


SSRF 是什么

​SSRF​​ 服务端请求伪造是一个 web 漏洞,它允许公鸡者诱导服务端程序向公鸡者选择的任何地址发起 HTTP 请求。

在典型的 ​​SSRF​​ 示例中,公鸡者可能会使服务端建立一个到服务端自身、或组织基础架构中的其它基于 web 的服务、或外部第三方系统的连接。


SSRF 公鸡的影响

成功的 ​​SSRF​​ 公鸡通常会导致未经授权的操作或对组织内部数据的访问,无论是在易受公鸡的应用程序本身,还是应用程序可以通信的其它后端系统。在某些情况下,​​SSRF​​ 漏洞可能允许公鸡者执行任意的命令。

利用 ​​SSRF​​ 漏洞可能可以操作服务端应用程序使其向与之连接的外部第三方系统发起恶意请求,这将导致潜在的法律责任和声誉受损。


常见的 SSRF 公鸡

​SSRF​​ 公鸡通常利用服务端应用程序的信任关系发起公鸡并执行未经授权的操作。这种信任关系可能包括:对服务端自身的信任,或同组织内其它后端系统的信任。


SSRF 公鸡服务端自身

在针对服务端本身的 ​​SSRF​​ 公鸡中,公鸡者诱导应用程序向其自身发出 HTTP 请求,这通常需要提供一个主机名是 ​​127.0.0.1​​ 或者 ​​localhost​​ 的 URL 。

例如,假设某个购物应用程序,其允许用户查看某个商品在特定商店中是否有库存。为了提供库存信息,应用程序需要通过 REST API 查询其他后端服务,而其他后端服务的 URL 地址直接包含在前端 HTTP 请求中。因此,当用户查看商品的库存状态时,浏览器可能发出如下请求:

POST /product/stock HTTP/1.0
Content-Type: application/x-www-form-urlencoded
Content-Length: 118

stockApi=http://stock.weliketoshop.net:8080/product/stock/check%3FproductId%3D6%26storeId%3D1

这将导致服务端向指定的 URL 发出请求,检索库存状态,然后将结果返回给用户。

在这种情况下,公鸡者可以修改请求以指定服务器本地的 URL ,例如:

POST /product/stock HTTP/1.0
Content-Type: application/x-www-form-urlencoded
Content-Length: 118

stockApi=http://localhost/admin

此时,服务端将会访问本地 /admin URL 并将其内容返回给用户。

当然,公鸡者可以直接访问 /admin URL ,但是这通常没用,因为管理功能基本都需要进行适当的身份验证,而如果对 /admin URL 的请求来自机器本地,则正常情况下的访问控制可能会被绕过。该服务端应用程序可能会授予对管理功能的完全访问权限,因为请求似乎来自受信任的位置。

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

  • 访问控制检查可能是另外的一个微服务。当服务器连接自身时,将会绕过访问控制检查。
  • 出于灾难恢复的目的,应用程序可能允许来自本地机器的任何用户在不登录的情况下进行管理访问。这为管理员在丢失凭证时恢复系统提供了一种方法。这里的假设是只有完全可信的用户才能直接来自服务器本地。
  • 管理接口可能与主应用是不同的端口号,因为用户可能无法直接访问。

在这种信任关系中,来自本地机器的请求的处理方式与普通请求不同,这常常使 ​​SSRF​​ 成为一个严重的漏洞。


针对其他后端系统的 SSRF 公鸡

​SSRF​​ 利用的另外一种信任关系是应用服务端与用户无法直接访问的内部后端系统之间进行的交互,这些后端系统通常具有不可路由的专用 IP 地址,由于受到网络拓扑结构的保护,它们的安全性往往较弱。在许多情况下,内部后端系统包含一些敏感功能,任何能够与系统交互的人都可以在不进行身份验证的情况下访问这些功能。

在前面的示例中,假设后端系统有一个管理接口 ​​https://192.168.0.68/admin​​ 。此时,公鸡者可以通过提交以下请求利用 SSRF 漏洞访问管理接口:

POST /product/stock HTTP/1.0
Content-Type: application/x-www-form-urlencoded
Content-Length: 118

stockApi=http://192.168.0.68/admin

规避常见的 SSRF 防御

通常应用程序包含 SSRF 行为以及防止恶意公鸡的防御措施,然而这些防御措施是可以被规避的。

基于黑名单过滤的 SSRF

某些应用程序禁止例如 ​​127.0.0.1​​、​​localhost​​ 等主机名、或 ​​/admin​​ 等敏感 URL 。这种情况下,可以使用各种技巧绕过过滤:

  • 使用​​127.0.0.1​​ 的替代 IP 地址表示,例如​​2130706433​​,​​017700000001​​,​​127.1​​ 。
  • 注册自己的域名,并解析为​​127.0.0.1​​ ,你可以直接使用​​spoofed.burpcollaborator.net​​ 。
  • 使用 URL 编码或大小写变化来混淆被阻止的字符串。

基于白名单过滤的 SSRF

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

URL 规范包含有许多在实现 URL 的解析和验证时容易被忽略的特性:

  • 你可以在主机名之前使用​​@​​ 符号嵌入凭证。例如​​https://expected-host@evil-host​​ 。
  • 你可以使用​​#​​ 符号表示一个 URL 片段。例如​​https://evil-host#expected-host​​ 。
  • 你可以利用 DNS 命令层次结构将所需的输入放入你控制的标准 DNS 名称中。例如​​https://expected-host.evil-host​​ 。
  • 你可以使用 URL 编码字符来迷惑 URL 解析代码。如果处理 URL 编码的过滤器的实现不同与执行后端 HTTP 请求的代码,这一点尤其有用。
  • 你可以把这些技巧结合起来使用。

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

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

在前面的示例中,假设用户提交的 URL 经过严格验证,以防止恶意利用 SSRF 的行为,但是,允许使用 URL 的应用程序包含一个开放重定向漏洞。如果用于发起后端 HTTP 请求的 API 支持重定向,那么你可以构造一个满足过滤器的要求的 URL ,并将请求重定向到所需的后端目标。

例如,假设应用程序包含一个开放重定向漏洞,例如下面 URL 的形式:

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

重定向到:

http://evil-user.net

你可以利用开放重定向漏洞绕过 URL 过滤器,并利用 SSRF 漏洞进行公鸡,如:

POST /product/stock HTTP/1.0
Content-Type: application/x-www-form-urlencoded
Content-Length: 118

stockApi=http://weliketoshop.net/product/nextProduct?currentProductId=6&path=http://192.168.0.68/admin

这个 SSRF 公鸡之所有有效,是因为首先 stockAPI URL 在应用程序允许的域上,然后应用程序向提供的 URL 发起请求,触发了重定向,最终向重定向的内部 URL 发起了请求。

©著作权归作者所有:来自51CTO博客作者尼羲的原创作品,请联系作者获取转载授权,否则将追究法律责任

数组array.prototype原型方法学习-30分钟学完数组全部操作_qq63218e2ee7b7b的博客-多极客编程

之前总是使用数组的一些常用的方法,例如:push,slice,shift,unshift,pop...,根本没去观察数组原型上自带的方法都有哪些,今天无意中打印了一个空Array数组,发现其原型Array下面有将近35个方法和一个length属性。 我们从上图中可以看到数组对应原型下的所有的方法和属性。 arr.at() 定义:获取访问指定索引的元素值,可以接受负数,从尾部开始索引。 let

#yyds干货盘点# 前端歌谣的刷题之路-第七十六题-分隔符_前端歌谣的博客-多极客编程

前言我是歌谣 我有个兄弟 巅峰的时候排名c站总榜19 叫前端小歌谣 曾经我花了三年的时间创作了他 现在我要用五年的时间超越他 今天又是接近兄弟的一天人生难免坎坷 大不了从头再来 歌谣的意志是永恒的 放弃很容易 但是坚持一定很酷 本题目源自于牛客网 微信公众号前端小歌谣题目请补全JavaScript代码,要求返回参数数字的千分位分隔符字符串。编辑 核心代码<!DOCTYPE html>&

#yyds干货盘点# 前端歌谣的刷题之路-第七十七题-单向绑定_前端歌谣的博客-多极客编程

前言我是歌谣 我有个兄弟 巅峰的时候排名c站总榜19 叫前端小歌谣 曾经我花了三年的时间创作了他 现在我要用五年的时间超越他 今天又是接近兄弟的一天人生难免坎坷 大不了从头再来 歌谣的意志是永恒的 放弃很容易 但是坚持一定很酷 本题目源自于牛客网 微信公众号前端小歌谣题目请补全JavaScript代码,要求每当id为"input"的输入框值发生改变时触发id为"span"的标签内容同步改变。 注意

#yyds干货盘点# 前端歌谣的刷题之路-第七十九题-判断版本_前端歌谣的博客-多极客编程

前言我是歌谣 我有个兄弟 巅峰的时候排名c站总榜19 叫前端小歌谣 曾经我花了三年的时间创作了他 现在我要用五年的时间超越他 今天又是接近兄弟的一天人生难免坎坷 大不了从头再来 歌谣的意志是永恒的 放弃很容易 但是坚持一定很酷 本题目源自于牛客网 微信公众号前端小歌谣题目请补全JavaScript代码,该函数接收两个参数分别为旧版本、新版本,当新版本高于旧版本时表明需要更新,返回true,否则返回

#yyds干货盘点# 前端歌谣的刷题之路-第七十八题-单向绑定_前端歌谣的博客-多极客编程

前言我是歌谣 我有个兄弟 巅峰的时候排名c站总榜19 叫前端小歌谣 曾经我花了三年的时间创作了他 现在我要用五年的时间超越他 今天又是接近兄弟的一天人生难免坎坷 大不了从头再来 歌谣的意志是永恒的 放弃很容易 但是坚持一定很酷 本题目源自于牛客网 微信公众号前端小歌谣题目请补全JavaScript代码,要求返回一个长度为参数值并且每一项值都为参数值的数组。 注意: 1. 请勿直接使用for/whi

[spring framework]第三方资源配置管理_wx62ecbc3bcee87的博客-多极客编程

文章目录​​第三方资源配置管理​​​​加载properties文件​​​​基本步骤​​​​注意事项​​第三方资源配置管理前面我们IOC容器中装的都是我们自己写的类,现在我们尝试去管理第三方jar包中的类。此处我们就拿alibaba的druid来做例子:首先我们先引入它的依赖坐标(在项目的配置pom文件中):<!-- https://mvnrepository.com/artifact/com

三分钟了解什么是时序数据库_枫叶飘飘的博客-多极客编程

在介绍时序数据库之前,我们先来看看什么是时序数据。时序数据就是基于时间排序的数据,再通过时间坐标将这些数据连接起来,形成一个折线图,直观地展示一个指标在过去一段时间内的走势和规律,帮助定位数据异常点。时序数据库就是用来存储这些时序数据的数据库。与传统数据库相比,时序数据库需要能够长时间保存数据,且需要实时展示,这就要求时序数据库能做到持久化存储,以及数据读写的高性能。此外,对于一些复杂的场景,比如

国产统信系统uos运维笔记_lianweipengde博客的博客-多极客编程

一、UFW介绍      LInux 原始的防火墙工具 iptables 由于过于繁琐,所以 ubuntu 系统默认提供了一个基于iptable 之上的防火墙工具 ufw。而 UFW 支持图形界面操作,只需在命令行运行 ufw 命令即能看到一系列的操作      UFW 全称为 Uncomplicated Firewall,是 Ubuntu 系统上默认的防火墙组件, 为了轻量化配置iptables

day33项目saas-export项目-部门管理-添加部门_12927594的博客-多极客编程

保存部门后台TestDeptService@Test public void test03(){ //模拟表单 Dept dept = new Dept(); dept.setCompanyId("1"); dept.setDeptName("最牛13java部门"); dept.setState(1); D

一文解析什么是flink计算框架_枫叶飘飘的博客-多极客编程

Flink 是一个针对流数据和批数据的分布式处理引擎,主要用 Java 代码实现。目前,Flink主要还是依靠开源社区的贡献来发展的。对于 Flink ,其处理的数据主要是流数据,批数据只是流数据的一个极限特例而已。Flink的批处理方式采用的是流式计算原理,这一点跟Spark的设计思想正好相反(Spark Streaming本质上是批处理,只是将计算分成了很小的单元,近似成流计算),这也是Fli

快速入门javascript二_紫轩蝶泪的博客-多极客编程

📦个人主页:紫轩蝶泪 🏆简介:一个大二的科班出身的,主要研究Java后端开发 ⏰座右铭:成功之前我们要做应该做的事情,成功之后才能做我们喜欢的事 💕 过客的你,可以给博主留下一个小小的关注吗?这是给博主最大的支持。以后博主会更新大量的优质的作品!!!! 3、JavaScript DOM 3.1、DOM介绍 DOM(Document Object Model):文档对象模型。 将 HTML 文

态路小课堂丨什么是100g qsfp28单波光模块?有什么优势?_小透明popo的博客-多极客编程

目前流行的100G光学标准,如100G SR4、100G LR4、100G CWDM4、100G PSM4、100G ER4光模块等,都是依赖于4路25G的光学通道并行或波分复用进行传输的,它们都需要一系列昂贵的光学器件和封装。为了降低成本以及提高传输速率,业界提出了100G single-lambda规范,遵循该规范的光模块都是使用单波长100G PAM4调制。光模块区别100G单波和传统100