一次小破站JS代码审计出XSS漏洞思路学习

news2024/11/27 14:44:52
  • 今天看了小破站一个大佬的分析,感觉思路很有意思,感兴趣的xdm可以到大佬视频下提供的链接进行测试(传送门)这类社交平台的XSS漏洞利用起来其实危害是特别大的,利用XSS能在社交平台上呈现蠕虫式的扩散,大部分资产其实很容易存在这样的问题,也是一种挖高危的好思路。
  • 由于up主视频分析比较概括,自己吧源码拉下来再研究和复现一遍,加深印象。
  • 最后,JS看来还是得再学一下,学的东西都还给老师了qaq,代码还是理解得不透彻,不过暂且记录下来,有什么问题欢迎各路大佬来指正。

一、私信功能JS的部分代码:

<script>
function test(){
    var any_url = 'https?:\\/\\/(www\\.)?[-a-zA-Z0-9@:%._\\+~#=]{1,256}\\.[a-zA-Z0-9()]{1,6}\\b([-a-zA-Z0-9()@:%_\\+.~#?&//=]*)|bilibili://[\\w!@#$&\\*=\\./?~_%\\-]*';
    var white_list = JSON.parse('["^https?://[-A-Za-z0-9.]*(bilibili.com|biligame.com|acg.tv|b23.tv|(bili2233|bili23|bili33|bili22).cn|dl.hdslb.com)(/[A-Za-z0-9!@#$&\\\\*=\\\\./?~_%\\\\-]*)*$","^bilibili://[\\\\w!@#$&\\\\*=\\\\./?~_%\\\\-]*"]');
    var msgRegex = {
        any_url:any_url,
        white_list:white_list,
        black_list:[]
    }
    var g = null;
    var p = document.getElementById("in").value;
     //sort((function(t, e){})是比值函数结合sort()函数以字符长度大到小排序,具体解释:https://blog.51cto.com/u_15076212/4265209
    var m, f, h = new RegExp(any_url,"g"), g = (p.match(h) || []).sort((function(t, e) {
        return e.length - t.length
    }
    )), v = null === (m = msgRegex) || void 0 === m ? void 0 : m.white_list.filter((function(t) {
        return -1 === t.indexOf("bilibili://")
    }
    )), b = new RegExp(v.join("|")), y = new RegExp(null === (f = msgRegex) || void 0 === f ? void 0 : f.black_list.join("|"));
    g.forEach((function(e, n) {
        var i, s;
        console.log(e);
        !b.test(e) || null !== (i = msgRegex) && void 0 !== i && null !== (s = i.black_list) && void 0 !== s && s.length && y.test(e) || (p = p.split(e).join("bilibili-msg-link-placeholder-".concat(n)))
    }
    )),
    (function(){
        //url是bilibili://开头的提示移动端打开
        p = p.replace(/(?:bilibili:\/\/)(?:[/.$*?~=#!%@&\-\w]*)?/g,function(t){
            return '\n              <span data-href="'.concat(t, '">\n                【请在移动端上打开链接】\n              </span>\n            ')
        })
    })(),
    //p = u(d, p).join(""),
    g.forEach((function(t, e) {
        //造成漏洞的关键部分:满足条件的字符串拼接bilibili-msg-link-placeholder-(序号)
        p = p.split("bilibili-msg-link-placeholder-".concat(e)).join('\n              <a href="'.concat(t, '" target="_blank" class="dynamic-link">\n                <i class="bp-icon-font icon-link"></i> 网页链接\n              </a>\n            '))
    }
    )),
    document.getElementById("output_html").value = p;
    console.log(document.getElementById("output"));
    document.getElementById("output").contentWindow.document.documentElement.innerHTML=p;
    console.log(p);
};
</script>

chatgpt对这一部分代码解释:

在这里插入图片描述

二、分析原理

  1. 首先要理解的是js代码里面的”bilibili-msg-link-placeholder-".concat(e)部分,这部分称为占位符,也可以理解为一个便于后面进行输出的数组变量,代码中看出只要符合url格式的字符串都会被归入占位符数组中,concat(e)可以简单理解为当存在多个符合条件的url的时候按短到长的顺序生成序号1,2,3…,

最后再满足white_list正则的占位符进行拼接并输出
显示效果就是这样
在这里插入图片描述

  1. 当攻击者故意在URL里面插入”bilibili-msg-link-placeholder-".concat(e)这样的字符串时就有可能导致XSS的发生。

比如发送两条符合条件的url:
https://www.bilibili.com/bilibili-msg-link-placeholder-1
https://www.baidu.com/οnmοuseοver=console.log(99)//

此时占位符的排序是由url长到短排序的,所以
bilibili-msg-link-placeholder-1的值是https://www.baidu.com/οnmοuseοver=console.log(99)//,但是由于格式不符合white_list,最后不会进行超链接的拼接
bilibili-msg-link-placeholder-0的值是https://www.bilibili.com/bilibili-msg-link-placeholder-1,格式符合white_list,最后会进行超链接的拼接

bilibili-msg-link-placeholder-0拼接的结果为

  <a href="https://www.bilibili.com/
  <a href="https://www.baidu.com/onmouseover=console.log(99)//" target="_blank" class="dynamic-link">
    <i class="bp-icon-font icon-link"></i> 网页链接
  </a>
" target="_blank" class="dynamic-link">
    <i class="bp-icon-font icon-link"></i> 网页链接
  </a>

最后效果:
可以看到控制台console.log(99)显示出来了。
在这里插入图片描述

三、一些疑问

最后的结果到html为什么拼接部分的斜线会转成等号导致漏洞最终生效的?
不太理解。。。滚回去补JS了
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/423585.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

redis内存回收——过期、淘汰

DB结构删除策略惰性删除周期删除SLOWFAST淘汰策略redis内存设置过大时会增加同步等操作的复杂度 DB结构 /* Redis database representation. There are multiple databases identified* by integers from 0 (the default database) up to the max configured* database. The …

es 搜索中同时包含 “query“ 和 “filter“ 子句

Elasticsearch支持很多查询方式&#xff0c;其中一种就是DSL&#xff0c;它是把请求写在JSON里面&#xff0c;然后进行相关的查询。 一、Query DSL 与 Filter DSL DSL查询语言中存在两种&#xff1a;查询DSL&#xff08;query DSL&#xff09;和过滤DSL&#xff08;filter DSL…

数据库管理-第六十八期 Oracle 23c的其他(20230417)

数据库管理 2023-04-17第六十八期 Oracle 23c的其他1 DGPDB2 无锁并发总结第六十八期 Oracle 23c的其他 由于Oracle 23c的文档相对较少&#xff0c;一是当前文档主要面向开发人员&#xff0c;二是感觉实际内容还在不断增加&#xff0c;主要还有一点就是各种新特性的在官方文档…

几分种学会React Router v6使用

React路由可以实现页面间的切换。 传送门&#xff1a;英文文档 中文教程&#xff1a; https://www.reactrouter.cn/docs/getting-started/tutorial 1.基础使用 react 需求&#xff1a;实现一个普通的底部导航切换 1.安装react-router npm i react-router-dom62.配置根组件…

C#调试与测试 | DebuggerDisplay使用技巧

DebuggerDisplay使用技巧 文章目录DebuggerDisplay使用技巧前言DebuggerDisplay介绍示例代码前言 当你在开发一个大型的应用程序时&#xff0c;调试是一个不可避免的任务。调试器是你的好朋友&#xff0c;但是有时候它并不能直接给你所需的信息。这时&#xff0c;就需要使用 C…

线上问题排查异闻录

如何解决堆内存溢出问题 OOM有很多种情况啊&#xff0c;这里就先讲解最常见也是最容易观测的java.lang.OutOfMemoryError: Java heap space&#xff0c;也就是堆内存溢出。 发现 启动Java程序的时候&#xff0c;最好参数加上-XX:HeapDumpOnOutOfMemoryError&#xff0c;该参…

【RabbitMQ】RabbitMQ控制台的使用

一、访问控制台页面 如果在本机上装了RabbitMQ则在浏览器访问127.0.0.1:15672,如果在服务器装了RabbitMQ则通过在浏览器输入urlip:15762来访问 登录后进入主页 二、添加RabbitMQ用户 进入主页后选择Admin&#xff0c;对应找到添加用户选择输入信息后即可完成添加 三、添加Rab…

GROUP BY 与 聚合函数、 HAVING 与 ORDER BY-MySQL数据库 - 分组选择数据(头歌实践教学平台)

文章目的初衷是希望学习笔记分享给更多的伙伴&#xff0c;并无盈利目的&#xff0c;尊重版权&#xff0c;如有侵犯&#xff0c;请官方工作人员联系博主谢谢。 目录 第1关&#xff1a;GROUP BY 与 聚合函数 任务描述 相关知识 GROUP BY与聚合函数的使用 编程要求 第2关&…

交通 | 应用Benders分解方法解决多车生产路由问题

论文解读​ 曲晨辉&#xff0c;王飞龙 1 知识补充和文章贡献 2.1 IRP (Inventory routing problems) IRP关注的是在一个给定的规划范围内&#xff0c;从一个设施到一组客户的单一产品分配。客户以给定的速度消费产品&#xff0c;并可将产品的库存维持在一个特定的水平上。一组…

HTB-SolidState

HTB-SolidState信息收集80端口Apache Jamesmindyrbash绕过mindy -> root总结信息收集 80端口 目录扫描 从/README.txt文件里知道他们在捣鼓一个新的秘密项目&#xff0c;这个新的秘密项目就是一个新的网页外观。 80端口先点到为止&#xff0c;免得进兔子洞。 Apache James …

基于SpringBoot技术点餐系统的设计与实现(论文+源码)_kaic

摘 要 饮食行业的发展推动了服务的提升&#xff0c;在线点餐服务模式随之产生。相比于传统点餐&#xff0c;在线点餐更加方便地浏览菜品&#xff0c;挑选菜品&#xff0c;有更好的用餐体验。系统的使用减少了人工成本&#xff0c;方便数据统计&#xff0c;便于提供更优质的服务…

大数据学习路线图(2023完整版)适合收藏

大数据开发是一门涉及处理和分析大规模数据的技术领域&#xff0c;随着大数据技术的不断发展和应用&#xff0c;对大数据开发人员的需求也在逐渐增加。就业前景相对较好&#xff0c;尤其在科技行业和数据驱动型企业中。大数据开发的前景还是有很多优势的&#xff0c;就业范围广…

Ubuntu14.04+ROS-indigo版本安装教程

ROS之indigo版本安装教程 1、Ubuntu14.04安装&#xff08;indigo对应的ubuntu版本是14.04&#xff09; Ubuntu14.04 的下载地址https://www.releases.ubuntu.com/14.04/ 64位的电脑下载如下图 在虚拟机上配置了该镜像&#xff08;我用的是VMware虚拟机&#xff09; 2、ROS …

mac苹果电脑运行慢卡顿如何释放内存?

苹果电脑受到大众追捧的大部分原因是她高效的运行速度&#xff0c;为我们带来了很大的方便。但是大家有没有发现经过几年时间后&#xff0c;现在自己的苹果电脑运行速度没有以前快了呢&#xff1f;导致苹果电脑变慢的原因有哪些&#xff1f;苹果电脑变慢了怎么办&#xff1f;小…

平凡的Python为什么能一跃成为世界排名第一的语言

本文首发自「慕课网」&#xff0c;想了解更多IT干货内容&#xff0c;程序员圈内热闻&#xff0c;欢迎关注"慕课网"&#xff01; 作者&#xff1a;大周|慕课网讲师 一、前言 本文将结合个人经历为各位同学客观的分析是否有学习Python的必要、Python适合谁学、为什么…

webgl-画三角形

html <!DOCTYPE html> <head> <style> *{ margin: 0px; padding: 0px; } </style> </head> <body> <canvas id webgl> 您的浏览器不支持HTML5,请更换浏览器 </canvas> <script src"./main.js"></script&g…

007:Mapbox GL实现地图地点搜索定位功能

第007个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+mapbox中实现地图地点搜索定位功能 直接复制下面的 vue+mapbox源代码,操作2分钟即可运行实现效果 文章目录 示例效果配置方式示例源代码(共68行)安装插件相关API参考:专栏目标示例效果 配置方式 1)查看基础设…

linux 命名管道 mkfifo

专栏内容&#xff1a;linux下并发编程个人主页&#xff1a;我的主页座右铭&#xff1a;天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物&#xff0e;目录 前言 概述 原理介绍 接口说明 代码演示 结尾 前言 本专栏主要分享linux下并发编程…

HBU 2023 Simple problem set

目录 7-1 递推公式 7-2 存钱罐 7-3 买东西 7-4 双重子串 7-5 放小球 7-6 最短路径 7-7 统计子序列的个数 7-8 摆放灯笼 7-9 选零食 7-10 1还是2 7-11 最少的门禁数量 7-12 青春猪头之开学了要好好学习 7-13 青春猪头之毕设真头大 7-14 青春猪头之我没学过C语言 7-15 发射小球 7…

FreeRTOS 列表和列表项

文章目录一、什么是列表和列表项&#xff1f;二、列表和列表项初始化三、列表项插入四、列表项末尾插入五、列表项的删除六、列表的遍历七、列表项的插入和删除实验一、什么是列表和列表项&#xff1f; 1. 列表 列表是 FreeRTOS 中的一个数据结构&#xff0c;概念上和链表有点…