時至今日,網上已有頗多ms06-040的文章,其中不乏精闢之作。與其相比,本文突顯業餘,技術上無法超越,徒逞口舌之快。本文適合有一定計算機基礎,初步了解溢位攻擊原理,稍微了解逆向技術的朋友閱讀。如果您根據本文的指導親手完成了全部的7節實驗內容,相信您對棧溢位的掌握和漏洞利用的認識一定會到乙個更高的level。實驗中涉及的所有細節均可重現,使用的源**都已經過詳細的注釋附於附錄之中。
好了,現在讓我們立刻去體會把「impossible」變成「i』m possible」的那一撇是怎麼畫進windows裡的吧。
1 淺出篇
——欲善其事,先利其器
思考許久,為了讓更多的人能夠享受到實驗的樂趣,我還是決定用一些篇幅來介紹幾個在本章的實驗中涉及到的逆向工具。沒有工具的hacker如同沒有槍的戰士,欲善其事,先利其器!
1.1 逆向,永恆的主題
微軟post出的漏洞資訊是沒有技術細節的,一般都是幾句簡短的類似「***x可能存在允許遠端**執行的漏洞」之類的話。光靠這些是沒有辦法利用,滲透,入侵,控制的。詳細技術資料很難搜到,因為那都是安全專家和hacker們辛苦的研究成果,當然今天討論的ms06-040除外。要想第一時間研究和利用漏洞,你需要查出漏洞對應的補丁號,追查這個補丁patch了哪幾個系統檔案的哪幾個部分,然後進行逆向分析。
ms06-040指的是windows系統的dll檔案netapi32.dll中的幾個匯出函式在字串複製時有邊界檢查的缺陷。本文的實驗和分析都基於win2000 sp4版本的作業系統,它也是這個漏洞危害最嚴重的作業系統版本。
在win2000 sp4中,netapi32.dll位於系統目錄c:\\winnt\\system32下,大小為309008位元組。如果你的系統已經打過補丁,則該檔案會被補丁替換,大小為309520位元組,原先的漏洞dll會備份到系統目錄下的c:\\winnt\\$ ntuninstallkb921883$ 裡(我為您在本文的附加資料中提供了這個dll)。netapi32.dll中幾個有溢位問題的函式,本文實驗以目前討論最多的 netpwpathcanonicalize()函式的溢位為例進行闡述。
netapi32.dll庫中第303個匯出函式netpwpathcanonicalize()用於格式化網路路徑字串, 它需要6個引數:
引數1:指向乙個unicode字串的指標,用於生成路徑字串的第二個部分
引數2:指向乙個buffer的指標,用於接收格式化後的路徑字串
引數3:指向乙個數字的指標,標明引數2所指buffer的大小
引數4:指向乙個unicode字串的指標,用於生成路徑字串的第乙個部分
引數5:指標,在漏洞利用中不起作用
引數6:標誌位,必需為0
這個函式大體功能是把引數4所指的字串(以後簡稱4號串)連線上』/』作為路徑分割,再連上引數1所指字串(後簡稱1號串),並將生成的這個新串拷回引數2所指的buffer,也就是返回給2號buffer如下形式的字串: 4號串 + 『/』 + 1號串
該函式在格式化字串時的函式呼叫canonicalizepathname()使用wcscpy()進行字串拷貝時,邊界檢查有缺陷,可以被構造棧溢位。
netpwpathcanonicalize()函式的細節資料是很難找到的,msdn上沒有任何介紹,甚至在google上也只是在srvsvc的介面定義檔案idl裡看到了函式宣告。在這種情況下要利用這個函式只有靠自己逆向分析了。上面這些說明就是我用ida把它反彙編後分析、總結出來的,在本小節中提前擺出來是為了讓您在閱讀後面這節的彙編**時提前有乙個全域性觀。
一定要堅信,求人不如靠自己。不管你是cracker還是hacker,不管你做外掛程式、做脫殼、做病毒分析、還是做exploit的開發人員,要獲得第一手資料都離不開逆向技術。就算微軟公布原始碼,逆向技術仍然是安全領域裡永恆不變的主題。
1.2 ida,迷宮的地圖
在大體了解了漏洞的位置之後,我們需要進行除錯,需要獲得具體的棧空間資訊以及漏洞被觸發時的暫存器資訊。進入乙個pe檔案就好像置身乙個錯綜複雜的迷宮,光靠動態偵錯程式的分析是遠遠不夠的。ida強大的靜態分析和標註功能則是這個迷宮的地圖,他能為你的除錯導航。
下面我們就用ida來看看這個神秘的netpwpathcanonicalize()函式到底幹什麼用的。安裝好了後,把我們的問題dll直接丟進 ida,忽悠忽悠幾下,它就分析出結構明確質量上乘的彙編**了。這裡要慶幸的是我們研究的是微軟的系統api檔案,用c語言編寫並且沒有任何加殼之類的保護,所以得到的結果如此優美,幾乎所有的函式都自動標註好了。
我們直接去exports視窗在最後幾行找到我們需要分析的netpwpathcanonicalize,雙擊就跳到了這個匯出函式對應的**部分,按下空格鍵彙編**將以流程圖的形式顯示出來,給閱讀者乙個全域性的把握。
深入淺出sizeof
int佔 位元組,short佔 位元組 1.0 回答下列問題 答案在文章末尾 1.sizeof char 2.sizeof a 3.sizeof a 4.strlen a 如果你答對了全部四道題,那麼你可以不用細看下面關於sizeof的論述。如果你答錯了部分題目,那麼就跟著我來一起 關於sizeof...
深入淺出ShellExecute
ipconfig c log.txt應如何處理?二樓的朋友,開啟拔號網路這樣 shellexecute null,open c windows rundll32.exe shell32.dll,control rundll c windows system telephon.cpl null,sw ...
深入淺出ShellExecute
深入淺出shellexecute譯者 徐景周 原作 nishant s q 如何開啟乙個應用程式?shellexecute this m hwnd,open calc.exe sw show 或shellexecute this m hwnd,open notepad.exe c mylog.log...