通过投毒Bingbot索引挖掘必应中的存储型XSS
简介
在本文中,我将讨论如何通过从外部网站对Bingbot进行投毒,来在Bing.com上实现持久性XSS攻击。
什么是存储型或持久性XSS?存储型攻击指的是将恶意脚本永久存储在目标服务器上,例如数据库、论坛、访问日志、评论栏等。受害者在请求这些存储的信息时会检索到恶意脚本,从而触发攻击。存储型XSS有时也称为持久性XSS或Type-II型XSS。
Bing和Bingbot是什么

Bing 是微软开发的一款搜索引擎,提供网页、视频、图片和地图搜索服务。其目标是通过提供有组织且相关的搜索结果,帮助用户做出明智的决策。

Bingbot 是由微软开发的一款网络爬虫,也称为蜘蛛或搜索引擎机器人。其主要功能是为微软的搜索引擎Bing抓取和索引网页。自2010年10月推出以来,Bingbot 通过外部和内部链接浏览网站,以发现新的网页并将现有网页的更改更新到Bing的索引中。
这个过程称为抓取,有助于Bing保持搜索结果的更新和相关性。Bingbot 收集的数据被输入到Bing的搜索算法中,算法评估内容的上下文和质量,以确定其在搜索结果中的排名。
Bingbot的工作原理
在Bingbot抓取网页的过程中,它会将发现的信息发送给Bing。随后,这些页面会被加入Bing索引,并由算法分析,以便有效地纳入搜索结果,包括确定哪些网站、新闻文章、图片或视频会被纳入索引,供用户在搜索特定关键词时使用。了解更多关于Bing如何发现和索引页面的信息。

漏洞细节
在Bing平台上发现了一个存储型跨站脚本(XSS)漏洞。该漏洞发生在Bing从互联网检索并存储视频的标题、描述和所有者信息等数据时,由于缺乏安全的处理方式,导致恶意脚本得以保留在Bing的索引中。这一过程涉及Bingbot或Bing的网络爬虫在对这些元数据进行索引时没有进行适当的清理,致使恶意脚本被存储在Bing的索引中。
影响
•恶意行为者可以在Bing的网络应用程序上下文中执行任意JavaScript代码。
•可能导致的攻击包括但不限于:Cookie窃取、会话劫持、网页篡改和钓鱼攻击。
•该漏洞影响所有查看感染视频详情的用户,构成严重的安全风险。
漏洞发现与分析
当用户在Bing上搜索视频时,搜索引擎处理查询并从其索引中检索相关内容。搜索结果页面会显示视频的详细信息,包括未经清理、可能包含恶意脚本的内容。应用程序将这些数据以JSON格式存储,但内容类型被设置为text/html,这可能导致持久性XSS攻击。
当用户查看或与这些受感染的视频互动时,恶意脚本会在Bing的网络应用程序上下文中执行。这是因为浏览器将数据解释为HTML,允许嵌入在JSON数据中的脚本运行。这会带来多种安全威胁,包括数据盗窃、会话劫持、钓鱼攻击和网页篡改。受感染内容的查看用户可能会因此而泄露个人信息或账户完整性受到影响。
内容类型设置不当进一步加大了风险,使攻击者更容易在Bing的网络应用程序中注入和执行脚本,绕过了依赖正确MIME类型处理的安全措施,以防止此类漏洞。
Bing上持久性XSS漏洞的发现
在我探索Bing时,发现在Bing的视频搜索中存在一个漏洞。当用户搜索视频时,Bing会显示从外部来源获取的未经过滤的视频详细信息。这允许注入恶意脚本,从而带来严重的安全风险。
回到故事的起点
某天,我使用Bing并发现,当用户在Bing图片搜索中搜索图片,而搜索结果为视频且用户尝试查看时,Bing的URL会变成:https://www.bing.com/videos/vdasync

在点击并查看视频详情后,我发现API返回了Bingbot从其他网站收集并存储在Bing搜索系统中的视频元数据。

img
但我注意到该URL的内容类型返回为 Content-type: text/html; charset=utf-8,而不是 application/json。

img
如果我们能够控制这些元数据,而Bingbot 在没有清理或编码的情况下检索我们的数据并将其存储到Bing网站上,会发生什么呢?
正如我在上一节中提到的关于Bingbot如何工作的,Bingbot帮助Bing保持其搜索结果的更新和相关性。因此,我尝试在其他平台上创建一个视频帖子。
问题是,我不知道我的新视频需要多长时间才能出现在Bing搜索中,所以我考虑在以下网站上发布新帖子:
•VK: https://vk.com/video/@club226523289
•Tiktok: https://www.tiktok.com/@m3ez_xss
•Instagram:https://www.instagram.com/m3ez.ss
•以及其他网站
为什么我没有在YouTube上发布视频
如你所见,从https://www.bing.com/videos/vdasync的截图响应中,数据响应为JSON格式。要执行JavaScript或HTML注入,我需要确保能够使用<>(尖括号)。但在YouTube上,这是不可能的。这一限制同样适用于其他流行平台,如Vimeo和Dailymotion。

•幸运的是,几天后,我发现我在vk.com发布的视频出现在了Bing视频搜索中,这使我能够完成我的报告和概念验证,如下所示:
概念验证 (PoC):
•在一个网站上发布视频,并在所有者姓名、视频标题或描述中包含一个脚本:
•例如,我通过vk.com上传了一个视频,载荷如下:
<script>prompt('Stored XSS by Supakiad S. (m3ez)',document.domain);</script>

发布了这个视频帖子,任何人都可以访问,包括允许Bingbot抓取我的视频元数据。

等待Bingbot抓取并从vk.com检索视频并保存详细信息(包括注入的XSS脚本)。
然后开始搜索“Microsoft Bing Video”网页应用程序。我使用的关键词是"m3ez" site:vk.com。

点击视频后,URL中将出现mid参数:

将之前步骤中的mid参数附加到以下URL中:
https://www.bing.com/videos/vdasync?mid={mid}
导航到该URL后,XSS载荷将被触发,如下所示:
https://www.bing.com/videos/vdasync?mid=6DD18424C941635DA77F6DD18424C941635DA77F

无偿 获 取 网 安 资 料:
申明:本账号所分享内容仅用于网络安全技术讨论,切勿用于违法途径,所有渗透都需获取授权,违者后果自行承担,与本号及作者无关
相关文章:
通过投毒Bingbot索引挖掘必应中的存储型XSS
简介 在本文中,我将讨论如何通过从外部网站对Bingbot进行投毒,来在Bing.com上实现持久性XSS攻击。 什么是存储型或持久性XSS?存储型攻击指的是将恶意脚本永久存储在目标服务器上,例如数据库、论坛、访问日志、评论栏等。受害者在…...
STM32 BootLoader 刷新项目 (九) 跳转指定地址-命令0x55
STM32 BootLoader 刷新项目 (九) 跳转指定地址-命令0x55 前面我们讲述了几种BootLoader中的命令,包括获取软件版本号、获取帮助、获取芯片ID、读取Flash保护Level。 下面我们来介绍一下BootLoader中最重要的功能之一—跳转!就像BootLoader词汇中的Boot…...
【Linux篇】面试——用户和组、文件类型、权限、进程
目录 一、权限管理 1. 用户和组 (1)相关概念 (2)用户命令 ① useradd(添加新的用户账号) ② userdel(删除帐号) ③ usermod(修改帐号) ④ passwd&…...
PET-文件包含
include发生错误报warning,继续执行。require发生错误直接error,不继续执行 无视扩展名,只要能解析,就能当可执行文件执行,哪怕文件后缀或没后缀 1 条件竞争 pass17 只需要知道tmp的路径。把xieshell.jpg上传&…...
实现uniapp-微信小程序 搜索框+上拉加载+下拉刷新
pages.json 中的配置 { "path": "pages/message", "style": { "navigationBarTitleText": "消息", "enablePullDownRefresh": true, "onReachBottomDistance": 50 } }, <template><view class…...
PostgreSQL 修改字段类型但是存在视图依赖
其实视图的存在与否在数据库界一直是一个话题。用好视图可以简化程序的很多代码,用不好视图不仅会给维护带来很多的不便,也会造成很大的性能问题。下面我从维护方面给出案例,以及当存在这种问题的时候,如何去解决这个问题。 假设…...
基于.NET 9实现实时进度条功能:前后端完整示例教程
要在基于.NET 9的应用中实现进度条功能,我们可以通过HttpContext.Response来发送实时的进度更新到前端。以下是一个简单的示例,展示了如何在ASP.NET Core应用中实现这一功能。 但是,我在.net framework4.7.2框架下,实际不了HttpC…...
力扣 LeetCode 19. 删除链表的倒数第N个结点(Day2:链表)
解题思路: 快慢指针 class Solution {public ListNode removeNthFromEnd(ListNode head, int n) {ListNode dummy new ListNode(-1);dummy.next head;ListNode fast dummy;ListNode slow dummy;for (int i 0; i < n; i) {fast fast.next;}while (fast.ne…...
音频格式转换
一、场景 项目需求需要App实现声纹识别功能,调用科大讯飞接口: 声纹识别 API 文档 | 讯飞开放平台文档中心 其接口要求音频文件格式为mp3 二、问题产生 在安卓端根据官方文档说明,系统并不支持直接录制mp3格式音频,支持格式如…...
npm list @types/node 命令用于列出当前项目中 @types/node 包及其依赖关系
文章目录 作用示例常用选项示例命令注意事项 1、实战举例**解决方法**1. **锁定唯一的 types/node 版本**2. **清理依赖并重新安装**3. **设置 tsconfig.json 的 types**4. **验证 Promise 类型支持** **总结** npm list types/node 命令用于列出当前项目中 types/node 包及其…...
【Spring】Spring框架中有有哪些常见的设计模式
Spring 框架中广泛运用了多种设计模式,今天让我们来学习一下 1. 单例模式(Singleton Pattern) 用途:在Spring框架中,Bean默认是单例的,也就是说在容器中每种类型的Bean只有一个实例。这个设计可以节省资源…...
提升百度排名的有效策略与技巧解析
内容概要 提升百度排名对于网站的成功至关重要。首先,了解百度排名的基本原则,掌握搜索引擎是如何评估网页质量的,是优化过程中不可或缺的一部分。搜索引擎越来越倾向于将用户需求放在首位,因此提供高质量的内容和良好的用户体验…...
【Linux】Linux下查看cpu信息指令(top/mpstat/iostat/pidstat)说明
top命令 top(1) - Linux manual page (man7.org) top查看总的CPU利用率 us: 用户空间消耗的CPU资源占比,进程在用户态执行函数调用,编解码消耗的都是us sy: 内核空间消耗的CPU资源占比,进程调用系统调用达到内核后会增加sy的消耗 ni&…...
HDLBIts习题(3):使用冒号表示位宽时,冒号两端必须是常量
(1)易错习题1:Circuits - Combinational Logic - Multiplexers - 256-to-1 4bit multiplexer 使用冒号表示位宽时,冒号两端必须是常量,因此如果使用变量,可以使用位拼接的方法。 (2)…...
C++20协程详解
文章目录 什么是协程为什么需要协程什么时候使用协程协程的类别C20的协程协程的使用关键字co_wait框架一阶段完成数据交换co_yieldco_return 什么是协程 我们在学习编程的过程中,逐渐从单线程,到多线程,再到异步编程和并发处理 这些异步与并…...
Chromium 中chrome.system.display扩展接口定义c++
一、chrome.system.display 使用 system.display API 查询展示元数据。 权限 system.display 类型 ActiveState Chrome 117 及更高版本 用于指示系统是否检测到和使用显示屏的枚举。如果系统未检测到显示屏(可能断开连接,或因睡眠模式等原因而被视…...
容器docker的ulimit
Ulimit 在linux里ulimit命令可以对shell生成的进程的资源进行限制。 常用的ulimit限制 打开文件句柄数core文件大小设置进程能够消耗的虚拟内存设置用户能够打开的进程数目 不太常用的ulimit限制 设置数据段的最大值.单位:kbytes 设置创建文件的最大值.单位:blocks 设置在…...
一、HTML
一、基础概念 1、浏览器相关知识 这五个浏览器市场份额都非常大,且都有自己的内核。 什么是内核: 内核是浏览器的核心,用于处理浏览器所得到的各种资源。 例如,服务器发送图片、视频、音频的资源,浏览…...
使用Geekbench6软件对真实和虚拟的苹果桌面系统(macOS)进行打分比较
前言 感觉VMWare安装的MacOS使用起来非常的慢,所以特意用打分软件GeekBench进行了评测。 一、Geekbench的安装 可以从官网直接进行下载, 链接是: 二、Geekbench的直接使用 2.1、真机的信息 2.2、虚拟机的信息 三、打分的比较 3.1、真机…...
lua入门教程:随机数
在Lua中,生成随机数是通过math库中的math.random函数来实现的。这个函数可以生成一个[0, 1)区间内的随机浮点数。如果你需要生成其他范围内的随机数,或者需要整数类型的随机数,可以通过一些简单的数学运算来调整math.random的输出。 以下是如…...
conda相比python好处
Conda 作为 Python 的环境和包管理工具,相比原生 Python 生态(如 pip 虚拟环境)有许多独特优势,尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处: 一、一站式环境管理:…...
Opencv中的addweighted函数
一.addweighted函数作用 addweighted()是OpenCV库中用于图像处理的函数,主要功能是将两个输入图像(尺寸和类型相同)按照指定的权重进行加权叠加(图像融合),并添加一个标量值&#x…...
2.Vue编写一个app
1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...
【git】把本地更改提交远程新分支feature_g
创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...
CRMEB 框架中 PHP 上传扩展开发:涵盖本地上传及阿里云 OSS、腾讯云 COS、七牛云
目前已有本地上传、阿里云OSS上传、腾讯云COS上传、七牛云上传扩展 扩展入口文件 文件目录 crmeb\services\upload\Upload.php namespace crmeb\services\upload;use crmeb\basic\BaseManager; use think\facade\Config;/*** Class Upload* package crmeb\services\upload* …...
laravel8+vue3.0+element-plus搭建方法
创建 laravel8 项目 composer create-project --prefer-dist laravel/laravel laravel8 8.* 安装 laravel/ui composer require laravel/ui 修改 package.json 文件 "devDependencies": {"vue/compiler-sfc": "^3.0.7","axios": …...
【7色560页】职场可视化逻辑图高级数据分析PPT模版
7种色调职场工作汇报PPT,橙蓝、黑红、红蓝、蓝橙灰、浅蓝、浅绿、深蓝七种色调模版 【7色560页】职场可视化逻辑图高级数据分析PPT模版:职场可视化逻辑图分析PPT模版https://pan.quark.cn/s/78aeabbd92d1...
uniapp 开发ios, xcode 提交app store connect 和 testflight内测
uniapp 中配置 配置manifest 文档:manifest.json 应用配置 | uni-app官网 hbuilderx中本地打包 下载IOS最新SDK 开发环境 | uni小程序SDK hbulderx 版本号:4.66 对应的sdk版本 4.66 两者必须一致 本地打包的资源导入到SDK 导入资源 | uni小程序SDK …...
第7篇:中间件全链路监控与 SQL 性能分析实践
7.1 章节导读 在构建数据库中间件的过程中,可观测性 和 性能分析 是保障系统稳定性与可维护性的核心能力。 特别是在复杂分布式场景中,必须做到: 🔍 追踪每一条 SQL 的生命周期(从入口到数据库执行)&#…...
从面试角度回答Android中ContentProvider启动原理
Android中ContentProvider原理的面试角度解析,分为已启动和未启动两种场景: 一、ContentProvider已启动的情况 1. 核心流程 触发条件:当其他组件(如Activity、Service)通过ContentR…...
