91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

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

發布時間:2021-12-29 19:14:37 來源:億速云 閱讀:110 作者:柒染 欄目:網絡安全

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

從補丁發現漏洞本質

首先根據谷歌博客收集相關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的拷貝)。猜測可能是這個返回值導致的問題。

分析代碼

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

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

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

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

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

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

FileReader.onprogress事件在處理progress時被觸發,當數據過大的時候,onprogress事件會被多次觸發。

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

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

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

漏洞利用思路

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

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

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

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

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

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

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

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

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

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

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

使用任意讀取/寫入原語遍歷WebAssembly模塊中導出的函數的JSFunction對象層次結構,以找到可讀寫可執行區域的地址。將WebAssembly函數的代碼替換為shellcode,然后通過調用該函數來執行它。

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

通過瀏覽器訪問網頁,就會導致執行任意代碼

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

幫助

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

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

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

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

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

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

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

因為Chrome的沙箱機制,在調試的過程中需要關閉沙箱才可以執行任意代碼。可以在快捷方式中添加no-sandbox來關閉沙箱。

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

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

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

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

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

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

在需要特定版本Chrome的時候可以自己去build源碼或者去網絡上尋找chrome歷代發行版收集的網站。

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

看完上述內容,你們掌握如何進行CVE-2019-5786漏洞原理分析及利用的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

德格县| 固安县| 汝州市| 金平| 江北区| 含山县| 文水县| 江陵县| 松滋市| 体育| 平江县| 兴城市| 革吉县| 太和县| 天全县| 和龙市| 团风县| 习水县| 兰考县| 绵阳市| 玉田县| 白山市| 揭东县| 屯门区| 岚皋县| 万安县| 德保县| 天全县| 曲麻莱县| 黑水县| 芒康县| 钦州市| 蒙山县| 嘉善县| 五寨县| 荔波县| 修水县| 达拉特旗| 上林县| 石景山区| 百色市|