通过投毒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的输出。 以下是如…...
多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度
一、引言:多云环境的技术复杂性本质 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时,基础设施的技术债呈现指数级积累。网络连接、身份认证、成本管理这三大核心挑战相互嵌套:跨云网络构建数据…...
利用ngx_stream_return_module构建简易 TCP/UDP 响应网关
一、模块概述 ngx_stream_return_module 提供了一个极简的指令: return <value>;在收到客户端连接后,立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量(如 $time_iso8601、$remote_addr 等)&a…...
(十)学生端搭建
本次旨在将之前的已完成的部分功能进行拼装到学生端,同时完善学生端的构建。本次工作主要包括: 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...
k8s从入门到放弃之Ingress七层负载
k8s从入门到放弃之Ingress七层负载 在Kubernetes(简称K8s)中,Ingress是一个API对象,它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress,你可…...
YSYX学习记录(八)
C语言,练习0: 先创建一个文件夹,我用的是物理机: 安装build-essential 练习1: 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件,随机修改或删除一部分,之后…...
【python异步多线程】异步多线程爬虫代码示例
claude生成的python多线程、异步代码示例,模拟20个网页的爬取,每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程:允许程序同时执行多个任务,提高IO密集型任务(如网络请求)的效率…...
均衡后的SNRSINR
本文主要摘自参考文献中的前两篇,相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程,其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt 根发送天线, n r n_r nr 根接收天线的 MIMO 系…...
HarmonyOS运动开发:如何用mpchart绘制运动配速图表
##鸿蒙核心技术##运动开发##Sensor Service Kit(传感器服务)# 前言 在运动类应用中,运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据,如配速、距离、卡路里消耗等,用户可以更清晰…...
论文阅读:LLM4Drive: A Survey of Large Language Models for Autonomous Driving
地址:LLM4Drive: A Survey of Large Language Models for Autonomous Driving 摘要翻译 自动驾驶技术作为推动交通和城市出行变革的催化剂,正从基于规则的系统向数据驱动策略转变。传统的模块化系统受限于级联模块间的累积误差和缺乏灵活性的预设规则。…...
归并排序:分治思想的高效排序
目录 基本原理 流程图解 实现方法 递归实现 非递归实现 演示过程 时间复杂度 基本原理 归并排序(Merge Sort)是一种基于分治思想的排序算法,由约翰冯诺伊曼在1945年提出。其核心思想包括: 分割(Divide):将待排序数组递归地分成两个子…...
