通过投毒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的输出。 以下是如…...
别再只改yaml了!深入理解YOLOv5检测头:从P2到P5,如何根据你的目标大小选择最优组合?
深入解析YOLOv5多尺度检测头:从理论到实践的选择艺术 在计算机视觉领域,目标检测一直是核心任务之一。YOLO系列算法以其高效的检测速度和良好的精度表现,成为工业界和学术界的热门选择。然而,很多开发者在使用YOLOv5时,…...
GitHub功能全景:从代码创作到企业级方案的技术生态
【导语:GitHub作为全球知名的代码托管平台,提供了丰富多样的功能,涵盖AI代码创作、开发者工作流、应用程序安全等多个领域,还针对不同规模公司、用例和行业提供解决方案,对软件开发行业产生着深远影响。】【GitHub的多…...
HALCON实战:从一维码到复杂OCR,图像增强与运算的工业视觉全流程解析
1. 工业视觉检测的挑战与HALCON解决方案 在自动化产线上,产品表面的一维码、二维码和字符识别是质量控制的关键环节。我曾在某电子元件生产线遇到这样的场景:传送带以每秒3米的速度移动,产品表面既有激光刻印的微小点阵字符,又有喷…...
Qwen2.5-14B-Instruct在AI编剧赛道的突破:像素剧本圣殿Glitch标题交互体验分享
Qwen2.5-14B-Instruct在AI编剧赛道的突破:像素剧本圣殿Glitch标题交互体验分享 1. 像素剧本圣殿:AI编剧的新范式 在数字内容创作领域,剧本创作一直是最具挑战性的任务之一。传统编剧需要花费大量时间构思情节、塑造角色、打磨对白ÿ…...
Calypso vs PC-DMIS:三坐标两大软件脱机编程实战对比与选型指南
Calypso vs PC-DMIS:三坐标测量软件脱机编程深度对比与实战选型策略 在精密制造领域,三坐标测量机(CMM)的脱机编程能力直接决定了检测效率与资源利用率。作为行业两大标杆,蔡司Calypso与海克斯康PC-DMIS在用户界面设计、编程逻辑、仿真验证等…...
CRI-O系统配置终极指南:从systemd服务到内核参数调优
CRI-O系统配置终极指南:从systemd服务到内核参数调优 【免费下载链接】cri-o Open Container Initiative-based implementation of Kubernetes Container Runtime Interface 项目地址: https://gitcode.com/gh_mirrors/cr/cri-o CRI-O是Kubernetes容器运行时…...
别再到处找转换工具了!用Audacity把WAV无损转成MP3,保姆级图文教程
音频处理新手指南:Audacity无损转换WAV到MP3的完整方案 你是否曾经下载了一段高质量录音,却发现文件体积大得惊人,根本无法通过邮件发送?或者尝试上传播客内容时,平台总是提示"文件格式不支持"?这…...
Rust DLL注入技术深度解析:Rust-for-Malware-Development完整实现指南
Rust DLL注入技术深度解析:Rust-for-Malware-Development完整实现指南 【免费下载链接】Rust-for-Malware-Development Rust for malware Development is a repository for advanced Red Team techniques and offensive malwares & Ransomwares, focused on Rus…...
Qwen3-ASR-0.6B作品集:Qwen3-ForcedAligner-0.6B时间戳精度图谱
Qwen3-ASR-0.6B作品集:Qwen3-ForcedAligner-0.6B时间戳精度图谱 你有没有想过,一段语音里的每个字、每个词,甚至每个音节,是在哪个精确的时间点被说出来的?这听起来像是电影后期制作里的黑科技,但现在&…...
【ZGC性能黄金阈值手册】:基于127个线上集群实测数据,定义堆大小/线程数/触发频率最优配比
第一章:ZGC性能黄金阈值的定义与行业意义ZGC(Z Garbage Collector)作为JDK 11引入的低延迟垃圾收集器,其核心设计目标是将GC暂停时间稳定控制在10毫秒以内,且不随堆大小线性增长。而“ZGC性能黄金阈值”并非官方术语&a…...
