真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

如何進行CVE-2019-5786漏洞原理分析及利用-創(chuàng)新互聯(lián)

如何進行CVE-2019-5786漏洞原理分析及利用,相信很多沒有經(jīng)驗的人對此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個問題。

創(chuàng)新互聯(lián)公司總部坐落于成都市區(qū),致力網(wǎng)站建設(shè)服務(wù)有網(wǎng)站建設(shè)、成都網(wǎng)站建設(shè)、網(wǎng)絡(luò)營銷策劃、網(wǎng)頁設(shè)計、網(wǎng)站維護、公眾號搭建、小程序開發(fā)、軟件開發(fā)等為企業(yè)提供一整套的信息化建設(shè)解決方案。創(chuàng)造真正意義上的網(wǎng)站建設(shè),為互聯(lián)網(wǎng)品牌在互動行銷領(lǐng)域創(chuàng)造價值而不懈努力!

從補丁發(fā)現(xiàn)漏洞本質(zhì)

首先根據(jù)谷歌博客收集相關(guān)CVE-2019-5786漏洞的資料:High CVE-2019-5786: Use-after-free in FileReader,得知是FileReader上的UAF漏洞。

然后查看 https://github.com/chromium/chromium/commit/ba9748e78ec7e9c0d594e7edf7b2c07ea2a90449?diff=split上的補丁

如何進行CVE-2019-5786漏洞原理分析及利用

對比補丁可以看到DOMArrayBuffer* result = DOMArrayBuffer::Create(raw_data_->ToArrayBuffer()),操作放到了判斷finished_loading后面,返回值也從result變成了array_buffer_result_(result的拷貝)。猜測可能是這個返回值導(dǎo)致的問題。

分析代碼

如何進行CVE-2019-5786漏洞原理分析及利用

如何進行CVE-2019-5786漏洞原理分析及利用

如何進行CVE-2019-5786漏洞原理分析及利用

raw_data_->ToArrayBuffer()可能會返回內(nèi)部buffer的拷貝,或者是返回一個指向其偏移buffer的指針。

根據(jù)MDN中FileReader.readAsArrayBuffer()的描述:

FileReader 接口提供的 readAsArrayBuffer() 方法用于啟動讀取指定的 Blob 或 File 內(nèi)容。當(dāng)讀取操作完成時,readyState 變成 DONE(已完成),并觸發(fā) loadend 事件,同時 result 屬性中將包含一個 ArrayBuffer 對象以表示所讀取文件的數(shù)據(jù)。

FileReader.onprogress事件在處理progress時被觸發(fā),當(dāng)數(shù)據(jù)過大的時候,onprogress事件會被多次觸發(fā)。

所以在調(diào)用FileReader.result屬性的時候,返回的是WTF::ArrayBufferBuilder創(chuàng)建的WTF::ArrayBuffer對象的指針,Blob未被讀取完時,指向一個WTF::ArrayBuffer副本,在已經(jīng)讀取完的時候返回WTF::ArrayBufferBuilder創(chuàng)建的WTF::ArrayBuffer自身。

如何進行CVE-2019-5786漏洞原理分析及利用

那么在標志finished_loading被置為ture的時候可能已經(jīng)加載完畢,所以onprogress和onloaded事件中返回的result就可能是同一個result。通過分配給一個worker來釋放其中一個result指針就可以使另一個為懸掛指針,從而導(dǎo)致UAF漏洞。

漏洞利用思路

我選擇的32位win7環(huán)境的Chrome72.0.3626.81版本,可以通過申請1GB的ArrayBuffer,使Chrome釋放512MB保留內(nèi)存,通過異常處理使OOM不會導(dǎo)致crash,然后在這512MB的內(nèi)存上分配空間。

如何進行CVE-2019-5786漏洞原理分析及利用

如何進行CVE-2019-5786漏洞原理分析及利用

調(diào)用FileReader.readAsArrayBuffer,將觸發(fā)多個onprogress事件,如果事件的時間安排正確,則最后兩個事件可以返回同一個ArrayBuffer。通過釋放其中一個指針來釋放ArrayBuffer那塊內(nèi)存,后面可以使用另一個懸掛指針來引用這塊內(nèi)存。然后通過將做好標記的JavaScript對象(散布在TypedArrays中)噴灑到堆中來填充釋放的區(qū)域。

如何進行CVE-2019-5786漏洞原理分析及利用

通過懸掛的指針查找做好的標記。通過將任意對象的地址設(shè)置為找到的對象的屬性,然后通過懸掛指針讀取屬性值,可以泄漏任意對象的地址。破壞噴涂的TypedArray的后備存儲,并使用它來實現(xiàn)對地址空間的任意讀寫訪問。

如何進行CVE-2019-5786漏洞原理分析及利用

如何進行CVE-2019-5786漏洞原理分析及利用

之后可以加載WebAssembly模塊會將64KiB的可讀寫執(zhí)行存儲區(qū)域映射到地址空間,這樣的好處是可以免去繞過DEP或使用ROP鏈就可以執(zhí)行shellcode。

如何進行CVE-2019-5786漏洞原理分析及利用

如何進行CVE-2019-5786漏洞原理分析及利用

使用任意讀取/寫入原語遍歷WebAssembly模塊中導(dǎo)出的函數(shù)的JSFunction對象層次結(jié)構(gòu),以找到可讀寫可執(zhí)行區(qū)域的地址。將WebAssembly函數(shù)的代碼替換為shellcode,然后通過調(diào)用該函數(shù)來執(zhí)行它。

如何進行CVE-2019-5786漏洞原理分析及利用

通過瀏覽器訪問網(wǎng)頁,就會導(dǎo)致執(zhí)行任意代碼

如何進行CVE-2019-5786漏洞原理分析及利用

幫助

本人在初次調(diào)試瀏覽器的時候遇到了很多問題,在這里列舉出一些問題來減少大家走的彎路。

因為chrome是多進程模式,所以在調(diào)試的時候會有多個chrome進程,對于剛開始做瀏覽器漏洞那話會很迷茫不知道該調(diào)試那個進程或者怎么調(diào)試,可以通過chrome自帶的任務(wù)管理器來幫我們鎖定要附加調(diào)試的那個進程ID。

。

如何進行CVE-2019-5786漏洞原理分析及利用

如何進行CVE-2019-5786漏洞原理分析及利用

這里新的標簽頁的進程ID就是我們在后面要附加的PID。

Chrome調(diào)試的時候需要符號,這是google提供的 符號服務(wù)器(加載符號的時候需要Over the wall)。在windbg中,您可以使用以下命令將其添加到符號服務(wù)器搜索路徑,其中c:\Symbols是本地緩存目錄:

.sympath + SRV * c:\ Symbols * https://chromium-browser-symsrv.commondatastorage.googleapis.com

因為Chrome的沙箱機制,在調(diào)試的過程中需要關(guān)閉沙箱才可以執(zhí)行任意代碼??梢栽诳旖莘绞街刑砑?code>no-sandbox來關(guān)閉沙箱。

如何進行CVE-2019-5786漏洞原理分析及利用

由于這個漏洞機制的原因,可能不是每次都能執(zhí)行成功,但是我們可以通過多次加載腳本的方式來達到穩(wěn)定利用的目的。

如何進行CVE-2019-5786漏洞原理分析及利用

如何進行CVE-2019-5786漏洞原理分析及利用

在github上有chromuim的源碼,在分析源碼的時候推薦使用sourcegraph這個插件,能夠查看變量的定義和引用等。

如何進行CVE-2019-5786漏洞原理分析及利用

在需要特定版本Chrome的時候可以自己去build源碼或者去網(wǎng)絡(luò)上尋找chrome歷代發(fā)行版收集的網(wǎng)站。

在看exp和自己編寫的時候需要注意v8引擎的指針問題,v8做了指針壓縮,所以在內(nèi)存中存訪的指針可能和實際數(shù)據(jù)位置地址有出入。

看完上述內(nèi)容,你們掌握如何進行CVE-2019-5786漏洞原理分析及利用的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司行業(yè)資訊頻道,感謝各位的閱讀!


分享標題:如何進行CVE-2019-5786漏洞原理分析及利用-創(chuàng)新互聯(lián)
本文鏈接:http://weahome.cn/article/djpshd.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部