码迷,mamicode.com
首页 > 其他好文 > 详细

postMessage隐患

时间:2020-06-01 12:01:54      阅读:77      评论:0      收藏:0      [点我收藏+]

标签:menu   event   dev   ddt   dom   res   rip   双向   ret   

postMessage漏洞

函数

postMessage是一个多窗口间的跨域传输方法。

发送
otherWindow.postMessage(data,origin)

otherWindow其他窗口的一个引用,data传递数据,origin指定哪些窗口能接收到消息事件。

一般接收及处理
window.addEventListener("message", receiveMessage, false);

function receiveMessage(event)
{
  // For Chrome, the origin property is in the event.originalEvent
  // object. 
  // 这里不准确,chrome没有这个属性
  // var origin = event.origin || event.originalEvent.origin; 
  var origin = event.origin
  if (origin !== "http://example.org:8080")
    return;

  // ...
}

message 的属性有:

  • data

    从其他 window 中传递过来的对象。

  • origin

    调用 postMessage 时消息发送方窗口的 origin . 这个字符串由 协议、“??/“、域名、“ : 端口号”拼接而成。例如 “https://example.org (隐含端口 443)”、“http://example.net (隐含端口 80)”、“http://example.com:8080”。请注意,这个origin不能保证是该窗口的当前或未来origin,因为postMessage被调用后可能被导航到不同的位置。

  • source

    对发送消息的窗口对象的引用; 您可以使用此来在具有不同origin的两个窗口之间建立双向通信。

漏洞

一般会出现两种情况:

接收端:

如果向如window.opener或者其他可以伪造的到的otherWindow发送敏感消息,且origin可绕过或者*的时候。

直接

window.addEventListener("message",function(e){
alert(e.data);
})

(这种情况一般很少..感觉没什么用)

发送端:

目标对message的origin没限制,且接收信息在网站中输出的时候可能造成xss。这个时候直接iframe包含这个页面,或者弹出窗口与他通信,然后发payload给他。

iframe

<script>   
   var opener = window.open("https://www.example.com","opener", "scrollbars=no,resizable=no,status=no,location=no,toolbar=no,menubar=no,width=500,height=1");

   setTimeout(function(){
        var message = //payload;
        opener.postMessage(message, ‘*‘);
    },‘4000‘);
</script>

弹窗

<script>
function qwqLoaded() {
  var qwq = document.getElementById(‘qwq‘);
  var message = //payload;
  qwq.contentWindow.postMessage(message, ‘*‘);
};
</script>
<iframe id="qwq" src="https://www.example.com" onload="qwqLoaded(this)"></iframe>

参考链接:
https://xz.aliyun.com/t/7783 "facebook洞"
https://www.freebuf.com/news/123284.html "addthis插件洞"
https://www.secpulse.com/archives/56637.html "大佬分析"

postMessage隐患

标签:menu   event   dev   ddt   dom   res   rip   双向   ret   

原文地址:https://www.cnblogs.com/Rainsw0rd/p/13024222.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!