前言
windows平台的漏洞挖掘和安全研究中,ie始終是繞不開的話題。ie漏洞就跟adobe系列一樣經典,是學習exploit、shellcode的絕佳途徑。
在ie漏洞中,uaf即use-after-free是最為經典的一類。uaf可以這樣簡單理解:a先後呼叫b、c、d三個子函式,b會把a的某個資源釋放掉;而d由於判斷不嚴謹即使在b把a的資源釋放後依然去引用它,比如某個指標,這時d引用了很危險的懸空指標;c是個什麼角色呢?我們可以通過b分配資料。所以利用方法來了:構造奇葩的資料,讓a呼叫b,b把a的某個指標釋放掉;接著執行c,c趕緊分配記憶體,企圖使用剛才釋放掉的記憶體,同時我們可以控制這個記憶體;最後d被呼叫,由於檢查不嚴格呼叫了已經釋放掉的某指標,而該指標實際上已經被我們重用並且扭曲。漏洞被利用。
但是學習ie的資料非常少,已知的大都是大牛們逆向mshtml.dll來的,辛辛苦苦得來的東西也不方便馬上透露出來,所以自力更生是很重要的。我們希望了解ie執行機制,自己fuzz並找到有價值的漏洞。與此同時,能夠除錯已公布的漏洞,學習已有的poc,也是很重要的能力。所以這裡選擇cve-2013-3893這個經典的uaf來學習ie漏洞的除錯。
工具windbg、ida、各版本ie程式、xp/vista/win7/win8虛擬機器
windbg用於動態除錯;ida用於靜態分析mshtml.dll——實現ie直譯器的dll;各版本ie和windows是必不可少的。
基礎知識
出現乙個新的漏洞,涉及到的解析過程我們並不一定分析過,所以分析漏洞的同時也是學習瀏覽器機制的好機會。比如cve-2013-3893這個漏洞,我們需要了解ctreenode和元素的關係以及幾個關鍵的函式實現。具體的結合poc和除錯過程分析。
poc除錯技巧
用windbg載入ie時設定jscript!tan、jscript!sin、jscript!cos斷點,逐語句分析。也可以將poc頁面設定為ie主頁,便於直接載入。結合ida對mshtml.dll分析相關函式。
漏洞原理
id_1.setcapture時,進入cdoc::pumpmessage;獲取element的treenode,呼叫cdoc::releasedetachedcaptures();引數為0呼叫cdos::setmousecapture,進入cdos::clearmousecapture,呼叫celement::fireevent,觸發事件導致id_0.onlosecapture指定的js函式呼叫,document.write(「」),該函式將所有物件釋放cbodyelement的ctreenode也被釋放。然後返回pumpmessage,cdos::hascontainercapture被呼叫,它引用了釋放的ctreenode物件。uaf發生。看下面ida靜態分析的**。
int__userpurge cdoc::setmousecapture(inta1,lpvoid lpmem,inta3,inta4,inta5,inta6,inta7)while
實戰除錯IE8
乙個瀏覽器相容性bug所想到的文中提到了ie8有些特殊的地方,對於開發人員來說,最大的問題是無法除錯。關於ie8的更多資訊,參見ie 8 不得不說的七件事 針對ie8這個例子,我們可以考慮使用windows為應用程式提供的特殊除錯能力,系統自動除錯設定,配置如下 1 在登錄檔hkey local m...
IE下的console除錯
今天算是真正體驗到了在ie下用console.log帶來的麻煩,所以記錄下來,給自己乙個深刻的提醒。ie下是不支援console物件的,或者說在開發工具 f12 未開啟的情況下。所以如果要在ie下做測試,一定要提前把console.log 語句去掉,是去掉而不是注釋掉。測試時遇到的情況 1.先用火狐...
漏洞之檔案包含漏洞
在專案中為了更好地使用 的重用性,引入了檔案包含函式,可以通過檔案包含函式將檔案包含進來,直接使用包含檔案的 完成類似python中的import功能。在包含檔案時候,為了靈活包含檔案,將被包含檔案設定為變數,通過動態變數來引入需要包含的檔案時,使用者可以對變數的值可控而伺服器端未對變數值進行合理地...