当前位置: 首页 > news >正文

漏洞挖掘 | Selenium Grid 中的 SSRF

Selenium 网格框架上的基本服务器端请求伪造

最近,我正在阅读漏洞文章看到Peter Jaric写的一篇 Selenium Grid 文章;他解释了 Selenium Grid 框架上缺乏身份验证和安全措施强化的问题。

在网上进行了更多搜索,我发现 Selenium Grid 开箱即用,不提供内置身份验证,并且具有加载脚本的功能,使服务器容易受到服务器端请求伪造攻击。

我决定了解有关 SSRF 攻击的更多信息,并将其应用于我在实验室中构建的 Selenium Grid 测试实例。像往常一样,在开始之前,我们将在深入研究利用部分之前先回顾一下关键概念。

         $_什么是Selenium_Grid?

它是一个质量保证框架,用于跨不同环境自动执行 Web 应用程序 UI 和性能测试的客户端相关测试。它允许在不同的浏览器和操作系统上运行测试,就像测试在不同的机器上运行一样。

Selenium 在测试和自动化领域的主要优势是能够在大量时间内跨多个节点(机器)执行大量测试用例。

该框架有两个主要组件:中心和节点。根据需要可以启动多个节点。

集线器是所有其他机器(节点)订阅的主服务器。节点接收运行 selenium 会话和执行自动化测试所需的所有配置。

图片

🔥$_SSRF:

当攻击者可以代表受影响的易受攻击的服务器发起请求时,就会发生 SSRF。该攻击允许访问内部或外部资源,这些资源可能不会公开或可供除服务器之外的任何用户使用。

该攻击滥用服务器的信任来检索敏感信息,例如:

•网络相关信息,即开放端口和正在运行的服务

•枚举目录并查看其内容

•服务器上的用户列表

•操作系统信息

此外,受攻击的机器可以用作网络上其他机器的枢纽点。

根据应用程序的要求,有多种协议/方案可用于执行 SSRF 攻击。最常见的是:http、ftp 和 file。

图片

$_Attack_Dynamics:

该攻击可概括为 3 个主要步骤:

步骤#1攻击者通过 SSRF 漏洞向受影响的服务器发送请求。

步骤#2服务器收到请求并对自身(内部)或外部资源进行第二次调用以获取请求的内容。

步骤#3一旦响应返回到服务器,它就会将其转发回攻击者。

图片

😈$_Exploitation_Time:

现在我们了解了该漏洞及其影响,让我们回到 Selenium Grid 实例并将我们所学到的知识应用到测试节点上。

📝只有节点容易受到 SSRF 攻击;集线器不受影响。

通过 Web 开发人员工具或 Burp Suite 代理检查应用程序是否存在 SSRF 时,您会发现请求被发送到纯 URL。直接 URL的暴露被认为是我们在执行 SSRF 攻击时可以利用的漏洞。

我们可以将找到的 URL 替换为 localhost(127.0.0.1) 地址或外部资源,以强制服务器代表我们(攻击者)发送请求以获取所需的数据。

让我们对正在运行的节点执行此操作...

单击“创建会话”创建一个新会话,选择要启动的浏览器类型,然后单击“确定”。

如下所示,我有 3 个 Chrome 会话可供测试。

图片

正如我们在文章开头提到的,Selenium 内置了从直接 URL 加载脚本的功能 — WebDrive JS Script 。该框架希望用户加载无需身份验证即可与服务器通信的 JavaScript 代码。 (这使得服务器容易受到 SSRF 攻击)。

为了证明这一点,我单击“加载脚本”并输入“http://www.google.com”,然后单击“发送”。 POST 请求已处理完毕并获得 200 OK 响应。

图片

我点击了“截屏”,我看到服务器处理了我的请求并向 Google 网站发出了外部请求。

图片

然后,我开始使用其他 URL 方案进行测试,看看是否可以检索内部信息。除了http:// 之外,唯一适用于 Selenium 的是 file://

图片

📝注意:使用额外的斜杠来转义正向双斜杠

我能够列出服务器上C盘的目录并获取一些文件的内容.ie主机文件,服务,网络和system.ini

图片

图片

正如我们在上面看到的,我能够滥用加载脚本功能将请求发送到服务器并将结果返回给我。我发现这个漏洞对于侦察目的和横向移动的渗透测试非常方便。

⚡️ $_预防

Selenium 上应该有一个过滤或白名单 URL schemas:// 的安全机制,以保护服务器防止暴露内部/外部信息的请求。

无偿获取网络安全优质学习资料与干货教程

申明:本账号所分享内容仅用于网络安全技术讨论,切勿用于违法途径,所有渗透都需获取授权,违者后果自行承担,与本号及作者无关,请谨记守法。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • dockerfile案例
  • js中的条件控制语句
  • MySQL从入门到精通
  • 【智路】智路OS Perception Camera Service
  • 中间件安全(二)
  • B2B2CJava商城如何提高二次开发能力
  • IEC101、IEC103、IEC 104区别
  • 《黑神话悟空》开发框架与战斗系统解析
  • 达梦数据库sql日志说明
  • 深蓝学院-- 量产自动驾驶中的规划控制算法 小鹏
  • 监控易监测对象及指标之:全面监控GBase数据库
  • 【MySQL】MySQL和Workbench版本兼容问题
  • MATLAB绘图:4.统计图表
  • Microsoft Edge 五个神级插件
  • 鸿蒙Harmony应用开发,数据驾驶舱登录页面的实现
  • (ckeditor+ckfinder用法)Jquery,js获取ckeditor值
  • 【MySQL经典案例分析】 Waiting for table metadata lock
  • codis proxy处理流程
  • es6要点
  • exif信息对照
  • gf框架之分页模块(五) - 自定义分页
  • Github访问慢解决办法
  • laravel with 查询列表限制条数
  • Netty源码解析1-Buffer
  • PyCharm搭建GO开发环境(GO语言学习第1课)
  • 对JS继承的一点思考
  • 使用Swoole加速Laravel(正式环境中)
  • 适配mpvue平台的的微信小程序日历组件mpvue-calendar
  • 手写一个CommonJS打包工具(一)
  • 为什么要用IPython/Jupyter?
  • 线性表及其算法(java实现)
  • 用jQuery怎么做到前后端分离
  • 用简单代码看卷积组块发展
  • Mac 上flink的安装与启动
  • 我们雇佣了一只大猴子...
  • 昨天1024程序员节,我故意写了个死循环~
  • ​ ​Redis(五)主从复制:主从模式介绍、配置、拓扑(一主一从结构、一主多从结构、树形主从结构)、原理(复制过程、​​​​​​​数据同步psync)、总结
  • ​【C语言】长篇详解,字符系列篇3-----strstr,strtok,strerror字符串函数的使用【图文详解​】
  • # 安徽锐锋科技IDMS系统简介
  • #define,static,const,三种常量的区别
  • #微信小程序(布局、渲染层基础知识)
  • (003)SlickEdit Unity的补全
  • (4)logging(日志模块)
  • (javascript)再说document.body.scrollTop的使用问题
  • (保姆级教程)Mysql中索引、触发器、存储过程、存储函数的概念、作用,以及如何使用索引、存储过程,代码操作演示
  • (二)【Jmeter】专栏实战项目靶场drupal部署
  • (二)Kafka离线安装 - Zookeeper下载及安装
  • (力扣)循环队列的实现与详解(C语言)
  • (论文阅读11/100)Fast R-CNN
  • (每日持续更新)jdk api之FileReader基础、应用、实战
  • (转)C#开发微信门户及应用(1)--开始使用微信接口
  • .[backups@airmail.cc].faust勒索病毒的最新威胁:如何恢复您的数据?
  • .net 微服务 服务保护 自动重试 Polly
  • .Net6支持的操作系统版本(.net8已来,你还在用.netframework4.5吗)
  • .net最好用的JSON类Newtonsoft.Json获取多级数据SelectToken