挖掘二進位漏洞具體指的是什麼?
挖二進位漏洞具體指的是什麼?
它的意義體現在哪裡?需要什麼樣的知識儲備才能入門?
謝邀 現今,瀏覽器是用戶接入互聯網的門戶.瀏覽器從誕生之初主要提供簡單的文檔閱讀功能.很少構成網路安全威脅,但隨著互聯網的高速發展,越來越多的功能集被加入到瀏覽器中。瀏覽器不僅需要像操作 系統那樣,為閱讀文檔、觀看電影、欣賞音樂等傳統計算機應用提供基礎,也需要為社交網路、網路購物等新興互聯網應用提供支持。瀏覽器在增加功能集的同時, 也就帶來了更多的安全問題。同時又由於IE是 windows的默認瀏覽器, 所以hacker 們對 IE 的漏洞十分感興趣. 關注的人多了,IE瀏覽器相關的漏洞利用技術也就發展的很快.
早期hacker 們挖掘 IE瀏覽器漏洞,挖到的絕大部分是一些緩衝區溢出 或者是 ActiveX控制項漏洞,這些漏洞中有很多是棧溢出類型的漏洞這類漏洞,利用起來非常的方便,直接使用過長字元串覆蓋函數返回地址,我們就可以控制程序的執行流程. 此時的漏洞利用和其他軟體的漏洞利用技術差不多,即先通過輸入數據布置好棧上的數據,然後將返回地址覆蓋為 jmp esp 之類的指令的地址,這樣一來在函數返回時我們就能控制程序執行到我們輸入的數據中,這樣我們就能 干我們想乾的事情了. 瀏覽器畢竟和其他類型軟體不一樣,瀏覽器實現了許多的功能, 其中很大一部分都是基於的堆實現的,所以很多時候 hacker 會發現 :挖到了一個漏洞 ,也劫持了 eip 控制了程序流程,但是不能控制棧上的內容,或者能控制的內容的長度非常小,以至於連一個彈框的 shellcode 都不能布置上去.難道 hacker 們就這樣放棄了嗎? 當然沒有 , 有了問題咱就解決問題.來看看我們現在擁有的條件. 1. eip 可控 2.不能在棧上布置 shellcode . 既然棧上不行 , 那咱就可以將我們的 shellcode布置到堆上 , 之後我們在將 eip 指向 堆中的shellcode 即可.這樣又來了一個難題,我們知道 堆的分配是動態的,即分配的堆塊的地址是不固定的,會變化的.為了解決這一困難 , hackers 發明了一種技術 → Heap Spraying 即 堆噴射技術 , 該技術在 瀏覽器中的大致原理是 ,通過使用瀏覽器的支持的一些腳本語言, 如 javascript ,vbscript , actionscript ….. , 申請大量的內存,這樣我們就有可能使內存中的某個地址恰好指向我們的數據.通過這樣一種技術, 我們現在的擁有的條件是: 1.EIP可控 2. 我們輸入數據的地址可知. 不考慮一些漏洞利用緩解措施, 如 DEP , 棧cookies 等, 我們就能實現代碼執行. 扯了這麼久來實踐一把吧.
這裡用的漏洞是 阿里旺旺2010 的 ActiveX控制項的一個棧溢出漏洞, 測試環境為 xp sp3 IE6,可以通過在控制面板中卸載 ie8 得到 ie6漏洞的原理是 其控制項的 imageMan.dll 中的AutoPic 函數由於未對參數的長度進行有效的檢測 ,導致存在棧溢出漏洞.先用一段小html代碼驗證下漏洞是否是這樣
POC代碼如下:
&
&
&
&
&
&
其大致流程為, 獲取 ActiveX控制項 對象, 之後調用 對象的 AutoPic 方法,並向它傳入 很長的一段 A ,來觸發漏洞.打開瀏覽器, 用調試器附加上去, 打開 poc 頁面, 出發異常 , 查看 SEH 鏈 ,可以看到 SEH 鏈的被覆蓋
我們就能利用 SEH 來實現任意代碼執行.同時可以看到,此時的棧並沒有我們的輸入數據,故我們應該使用 堆噴射技術 將咱們的 shellcode 噴射到可預測的地址來完成最後的漏洞利用.這裡給出一個可以在 IE 6, 7上穩定噴射內存到 0x0c0c0c0c 地址處的堆噴射腳本, 以後要噴射內存時,直接貼到 exp 前面使用即可.
&
&
&
&
會創建由一大塊 由nop指令 + shellcode 的內存塊,之後重複分配 500次,以將數據塊噴射到 0x0c0c0c0c處.我們來看看是否能噴射內存到可預測的地址上去,保存 上述內容到一個文件中 ,用調試器附加到 IE瀏覽器上打開 poc 文件,在 彈出 1 對話框時 ,在調試器中將 ie進程中斷下來,查看 0x0c0c0c0c 處的內存數據.
可以看到 地址 0x0c0c0c0c 處的值為 大量的 0x90(即 nop指令的16進位) 從堆噴射腳本可以知道 該地址位於我們 nop + shellcode 塊的 nop 區 ,如果我們將 eip 劫持到 0x0c0c0c0c 處, 程序就會執行大量的 nop 指令,最後會執行到我們的 shellcode 中. 那麼,我將最初那個觸發漏洞腳本的內容貼到 堆噴射代碼的後面 ,並改變傳入漏洞函數的參數為 一大串的 「x0c」 ,並添加上我們的 shellcode 這裡我用的是 彈出一個計算器。
最終的exp代碼:
&
&
&
&
&
&
保存內容,打開網頁 ,就可彈出一個計算器, 乾淨利落.
上面那種類型的漏洞流行於 03年-08年, 由於緩衝區溢出類的漏洞挖掘較為容易 , 所以沒過多久,這一類型的漏洞就被 hacker 們挖的差不多了, 於是 hacker 們又紛紛轉向 堆相關漏洞的挖掘 , 於是 08年之後釋放重利用這種堆相關漏洞利用方式變成了IE漏洞的主流.逐漸在這幾年達到了高峰.對象畸形操作類的漏洞一般來說觸發漏洞需要一系列的操作.單個的操作,比方說對象的創建使用刪除都是正常的。導致問題的是對於對象操作的畸形的組合.比如一個對象釋放後 引用計數沒有清0 , 導致我們可以使用已經釋放的內存,又比如 我們新建對象時 ,申請到了一塊為初始化的內存 等等 這些都會造成一些安全問題, 甚至可能導致 遠程代碼執行.
OK,這裡就不更新了。排版麻煩,明天發到公眾號和我的專欄,歡迎指教。
註:二進位漏洞挖掘會繼續更新很多很多字.....
謝邀....
不論二進位漏洞,還是web應用漏洞本質都是對程序的攻擊,執行自己的程序段。叫二進位漏洞,就是因為腳本語言和編譯語言之前的差異。編譯後無法獲得源碼只能通過反編譯讀彙編。幾乎所有漏洞利用的目標,都是要改變程序原有正常的行為,而去運行本不該運行的代碼。
推薦閱讀:
※想出一個防盜版和防破解的好招?
※立志在網路安全領域發展,應該如何系統學習安全知識?
※《360黑匣子之謎——奇虎360「癌」性基因大揭秘》有哪些報道是客觀的?有哪些是失實的?
※6 月 18 日蘋果系統曝出嚴重漏洞會對用戶造成什麼影響?
※學校的監控可以被黑掉嗎?
TAG:網路安全 | 二進位 | 烏雲WooYun | 白帽黑客WhiteHat | 漏洞挖掘 |