漏洞分析

漏洞分析

《漏洞分析》是2011年出版的圖書,作者是王清。《0day安全:軟體漏洞分析技術》的出版填補了國內window平台緩衝區溢出攻擊技術的空白,作者王清如今是北京子衿晨風科技有限公司CEO,看雪安全論壇專家。2013年網際網路大會中,他就“大數據中的大安全”發表演講。

內 容 簡 介

本書分為5篇33章,系統、全面地介紹了Windows平台緩衝區溢出漏洞的分析、檢測與防護。第一篇為漏洞exploit的基礎理論和初級技術,可以引領讀者迅速入門;第二篇在第一篇的基礎上,結合國內外相關研究者的前沿成果,對漏洞技術從攻、防兩個方面進行總結;第三篇站在安全測試者的角度,討論了幾類常用軟體的漏洞挖掘方法與思路;第四篇則填補了本類書籍在Windows核心安全及相關攻防知識這個神秘領域的技術空白;第五篇以大量的0 day案例分析,來幫助讀者理解前四篇的各類思想方法。

本書可作為網路安全從業人員、黑客技術發燒友的參考指南,也可作為網路安全專業的研究生或本科生的指導用書。

自 序

雖然事隔多年,我仍然清晰記得自己被“衝擊波”愚弄的場景——2003年夏的那個晚上,自己像往常一樣打開實驗室的計算機,一邊嘲笑著旁邊同學因為不裝防火牆而被提示系統將在一分鐘內關機,一邊非常諷刺地在自己的計算機上發現了同樣的提示對話框。正是這個聞名世界的“框框”堅定了我投身網路安全研究的信念,而漏洞分析與利用正是這個領域的靈魂所在。

漏洞分析與利用的過程是充滿藝術感的。想像一下,剝掉Windows中那些經過層層封裝的神秘的對話框“外衣”,面對著浩如煙海的二進制機器碼,跋涉於記憶體中不知所云的海量數據,在沒有任何技術文檔可以參考的情況下,進行反彙編並調試,把握函式調用和參數傳遞的細節,猜測程式的設計思路,設定巧妙的斷點並精確定位到幾行有邏輯缺陷的代碼,分析研究怎么去觸發這個邏輯漏洞,最後編寫出天才的滲透代碼,從而得到系統的控制權……這些分析過程的每一個環節無不散發著充滿智慧的藝術美感!這種技術不同於其他計算機技術,它的進入門檻很高,需要擁有豐富的計算機底層知識、精湛的軟體調試技術、非凡的邏輯分析能力,還要加上一點點創造性的思維和可遇而不可求的運氣。

在無數個鑽研這些技術的夜裡,我深深地感覺到國內的漏洞分析資料和文獻是多么匱乏。為了真正搞清楚蠕蟲病毒是怎樣利用Windows漏洞精確淹沒EIP暫存器並獲得進程控制權,我仍然記得自己不得不遊走於各種論壇收集高手們零散手稿時的情形。那時的我多么希望能有一本教材式的書籍,讓我讀了之後比較全面、系統地了解這個領域。

我想,在同樣漆黑的夜裡,肯定還有無數朋友和我從前一樣,滿腔熱情地想學習這門技術而又困惑於無從下手。正是這種“請纓無處,劍吼西風”的感覺,激勵著我把自己鑽研的心血凝結成一本教程,希望這樣一本教程可以幫助喜歡網路安全的朋友們在學習時繞開我曾走過的彎路。

再版序

距離《0day安全:軟體漏洞分析技術》的出版已有3年,接到再版約稿的時候我著實有一番感慨,也有著太多的內容想與大家分享。在這3年裡,我經歷了從一個初出象牙塔的少年到安全分析員的演變。期間我參加了若干次安全事件的應急回響、在若干個安全峰會上做過漏洞技術的演講、完成了無數次的滲透測試、也有幸見證了先行者們在Windows平台上進行的最為精彩的幾場較量……

為了在再版中更加完美地總結這精彩的幾年,我特意邀請了幾位和我意氣相投的兄弟加入編寫團隊,他們是:

熟悉Windows核心機制的張東輝(Shineast,負責編寫核心安全部分);

精通Windows各類保護機制的周浩(Zihan,負責編寫高級溢出部分);

黑客防線的知名撰稿人、漏洞挖掘專家王繼剛(愛無言,負責編寫漏洞挖掘部分);

檔案格式解析專家趙雙(Dflower,負責編寫檔案型漏洞測試部分);

資深病毒分析員蔡山楓(Beanniecai,編寫樣本分析和案例分析的部分章節)。

團隊的力量大大增強了再版內容的廣度和深度。再版中新增了大量前沿知識和案例分析,囊括了Windows平台高級溢出技巧、手機平台的溢出基礎、核心攻防、漏洞挖掘與安全測試、大量的0day分析案例等。此外我們還對Windows平台中高級防護技巧和部分經典案例的分析等內容進行了修訂和勘誤。第一版中關於基礎溢出的知識也得以保留,在經過重新編排和濃縮後,放置在再版的第一篇供入門者學習。

在計算機工業向模組化、封裝化、架構化發展的過程中,人們更加傾向於把時間和精力用於那些敏捷開發的高級工具上。走進大學的計算機系你可以發現J2EE與.NET的書籍隨處可見,但是卻沒有幾個學生能在二進制級別把計算機體系結構講清。甚至在某些網路安全學院裡,能把蠕蟲入侵的原理刨根問底徹底、弄清的也是鳳毛麟角,非好奇心不盛也,乃道之不傳也久矣。在信息安全這條道路上行走,需要“男兒何不帶吳鉤,收取關山五十州”的豪情,需要“臣心一片磁針石,不指南方不肯休”的毅力,需要“壁立千仞,無欲則剛”的情懷……我等立書只為布道交友,最大的收益莫過於幫助還在彷徨如何入門的朋友邁過那條門檻,通過此書結交更多的同道中人。

前 言

關於安全技術人才

國內外對網路安全技術人才的需求量很大,精通緩衝區溢出攻擊的安全專家可以在大型軟體公司輕易地獲得高薪的安全諮詢職位。

信息安全技術是一個對技術性要求極高的領域,除了紮實的計算機理論基礎外,更重要的是優秀的動手實踐能力。在我看來,不懂二進制數據就無從談起安全技術。

國內近年來對網路安全的重視程度正在逐漸增加,許多高校相繼成立了“信息安全學院”或者設立“網路安全專業”。科班出身的學生往往具有紮實的理論基礎,他們通曉密碼學知識、知道PKI體系架構,但要談到如何真刀實槍地分析病毒樣本、如何拿掉PE上複雜的保護殼、如何在二進制檔案中定位漏洞、如何對軟體實施有效的攻擊測試……能夠做到的人並不多。

雖然每年有大量的網路安全技術人才從高校湧入人力市場,真正能夠滿足用人單位需求的卻寥寥無幾。捧著書本去做應急回響和風險評估是濫竽充數的作法,社會需要的是能夠為客戶切實解決安全風險的技術精英,而不是滿腹教條的闊論者。

我所認識的很多資深安全專家都並非科班出身,他們有的學醫、有的學文、有的根本沒有學歷和文憑,但他們卻技術精湛,充滿自信。

這個行業屬於有興趣、夠執著的人,屬於為了夢想能夠不懈努力的意志堅定者。

關於“Impossible”與“I’m possible”

從拼寫上看,“Impossible”與“I’m possible”僅僅相差一個用於縮寫的撇號(apostrophe)。學完本書之後,您會發現將“不可能(Impossible)”變為“可能(I’m possible)”的“關鍵(key point)”往往就是那么簡單的幾個位元組,本書將要討論的就是在什麼位置畫上這一撇!

從語法上看,“Impossible”是一個單詞,屬於數據的範疇;“I’m possible”是一個句子,含有動詞(算符),可以看成是代碼的範疇。學完本書之後,您會明白現代攻擊技術的精髓就是混淆數據和代碼的界限,讓系統錯誤地把數據當作代碼去執行。

從意義上看,To be the apostrophe which changed “Impossible” into “I’m possible” 代表著人類挑戰自我的精神,代表著對理想執著的追求,代表著對事業全情的投入,代表著敢於直面慘澹人生的豪情……而這一切正好是黑客精神的完美詮釋——還記得在電影《Sword Fish(劍魚行動)》中,Stan在那台酷斃的計算機前堅定地說:“Nothing is impossible”,然後開始在使用Vernam加密算法和512位密鑰加密的網路上,挑戰蠕蟲的經典鏡頭嗎?

於是我在以前所發表過的所有文章和代碼中都加入了這個句子。儘管我的英語老師和不少外國朋友提醒我,說這個句子帶有強烈的“Chinglish”味道,甚至會引起Native Speaker的誤解,然而我最終還是決定把它寫進書里。

雖然我不是莎士比亞那樣的文豪,可以創造語言,發明修辭,用文字撞擊人們的心靈,但這句“Chinglish”的確能把我所要表達的含義精確地傳遞給中國人,這已足夠。

關於本書

通常情況下,利用緩衝區溢出漏洞需要深入了解計算機系統,精通彙編語言乃至二進制的機器代碼,這足以使大多數技術愛好者望而卻步。

隨著時間的推移,緩衝區溢出攻擊在漏洞的挖掘、分析、調試、利用等環節上已經形成了一套完整的體系。伴隨著調試技術和逆向工程的發展,Windows平台下湧現出的眾多功能強大的debug工具和反彙編分析軟體逐漸讓二進制世界和作業系統變得不再神秘,這有力地推動了Windows平台下緩衝區溢出的研究。除此以外,近年來甚至出現了基於架構(Frame Work)的漏洞利用程式開發平台,讓這項技術的進入門檻大大降低,使得原本高不可攀的黑客技術變得不再遙不可及。

遺憾的是,與國外飛速發展的高級黑客技術相比,目前國內還沒有系統介紹Windows平台下緩衝區溢出漏洞利用技術的專業書籍,而且相關的中文文獻資料也非常匱乏。

本書將系統全面地介紹Windows平台軟體緩衝區溢出漏洞的發現、檢測、分析和利用等方面的知識。

為了保證這些技術能夠被讀者輕鬆理解並掌握,本書在敘述中儘量避免枯燥乏味的大段理論闡述和代碼貼上。概念只有在實踐中運用後才能真正被掌握,這是我多年來求學生涯的深刻體會。書中所有概念和方法都會在緊隨其後的調試實驗中被再次解釋,實驗和案例是本書的精髓所在。從為了闡述概念而精心自製的漏洞程式調試實驗到現實中已經造成很大影響的著名漏洞分析,每一個調試實驗都有著不同的技術側重點,每一個漏洞利用都有自己的獨到之處。

我將帶領您一步一步地完成調試的每一步,並在這個過程中逐步解釋漏洞分析思路。不管您是網路安全從業人員、黑客技術發燒友、網路安全專業的研究生或本科生,如果您能夠完成這些分析實驗,相信您的軟體調試技術、對作業系統底層的理解等計算機能力一定會得到一次質的飛躍,並能夠對安全技術有一個比較深入的認識。

關於本書原始碼及相關文檔

本書中調試實驗所涉及的所有原始碼和PE檔案都可從看雪論壇相關版面下載

這些代碼都經過了仔細調試,如在使用中發現問題,請查看實驗指導中對實驗環境的要求。個別攻擊實驗的代碼可能會被部分防毒軟體鑑定為存在風險的檔案,請您調試前詳細閱讀實驗說明。

關於對讀者的要求

雖然溢出技術經常涉及彙編語言,但本書並不要求讀者一定具備彙編語言的開發能力。所用到的指令和暫存器在相關的章節都有額外介紹,只要您有C語言基礎就能消化本書的絕大部分內容。

我並不推薦在閱讀本書之前先去系統的學習彙編知識和逆向知識,枯燥的定址方式和指令介紹很容易讓人失去學習的興趣。本書將帶您迅速跨過漏洞分析與利用技術的進入門檻。即使您並不懂彙編與二進制也能完成書中的調試實驗,並獲得一定的樂趣。當然,在您達到一定水平想進一步提高時,補習逆向知識和彙編語言將是絕對必要的。

本書適合的讀者群體包括:

 安全技術工作者 本書比較全面、系統地收錄了Windows平台下緩衝區溢出攻擊所涉及的各種方法,將會是一本不錯的技術字典。

 信息安全理論研究者 本書中紕漏的許多漏洞利用、檢測方法在學術上具有一定的前沿性,在一定程度上反映了目前國內外安全技術所關注的焦點問題。

 QA工程師、軟體測試人員 本書第4篇中集中介紹了產品安全性測試方面的知識,這些方法可以指導QA人員審計軟體中的安全漏洞,增強軟體的安全性,提高軟體質量。

 軟體開發人員 知道漏洞利用原理將有利於編寫出安全的代碼。

 高校信息安全專業的學生 本書將在一定程度上彌補高校教育與信息安全公司人才需求脫節的現象。用一套過硬的調試技術和逆向技術來武裝自己可以讓您在未來的求職道路上利於不敗之地。精通exploit的人才可以輕鬆征服任何一家防毒軟體公司或安全資訊公司的求職門檻,獲得高薪工作。

 本科二年級以上計算機系學生 通過調試實驗,你們將更加深入地了解計算機體系架構和作業系統。這些知識一樣將成為您未來求職時過硬的敲門磚。

 所有黑客技術愛好者 如果您厭倦了網路嗅探、連線埠掃描之類的掃盲讀物,您將在本書中學到實施有效攻擊所必備的知識和技巧。

致謝

感謝電子工業出版社對本書的大力支持,尤其是畢寧編輯為本書出版所做的大量工作。

感謝看雪對本書的大力推薦和支持以及看雪論壇為本書提供的交流平台。

非常感謝在本書第一版問世後,向我提供勘誤信息的眾多熱心讀者,本書質量的提高離不開你們熱心的幫助。

感謝賽門鐵克中國回響中心的病毒分析員Beannie Cai為本書第26章友情撰稿。

最後感謝我的母校西安交通大學,是那裡踏實求是的校風與校訓激勵著我不斷進步。

Failwest

2011年5月4日

內容導讀

本書分為5篇,共33章。

第1篇 漏洞利用原理(初級)

第1章 基礎知識

本章著重對漏洞挖掘中的一些基礎知識進行介紹。首先是漏洞研究中的一些基本概念和原理;然後是對Windows平台下執行檔的結構和記憶體方面的一些基礎知識的介紹;最後介紹了一些漏洞分析中經常使用的軟體工具。包括調試工具、反彙編工具、二進制編輯工具等。您會在後面的調試實驗中反覆見到這些工具的身影。在這章的最後一節,我們設計了一個非常簡單的破解小實驗,用於實踐工具的套用,消除您對二進制的恐懼感,希望能夠給您帶來一些樂趣。

第2章 棧溢出原理與實踐

基於棧的溢出是最基礎的漏洞利用方法。本章首先用大量的示意圖,深入淺出地講述了作業系統中函式調用、系統棧操作等概念和原理;隨後通過三個調試實驗逐步講解如何通過棧溢出,一步一步地劫持進程並植入可執行的機器代碼。即使您沒有任何彙編語言基礎,從未進行過二進制級別的調試,在本章詳細的實驗指導下也能輕鬆完成實驗,體會到exploit的樂趣。

第3章 開發shellcode的藝術

本章緊接第2章的討論,比較系統地介紹了溢出發生後,如何布置緩衝區、如何定位shellcode、如何編寫和調試shellcode等實際的問題。最後兩小節還給出了一些編寫shellcode的高級技術,供有一定彙編基礎的朋友做參考。

第4章 用MetaSploit開發Exploit

MetaSploit是軟體工程中的Frame Work(架構)在安全技術中的完美實現,它把模組化、繼承性、封裝等面向對象的特點在漏洞利用程式的開發中發揮得淋漓盡致。使用這個架構開發Exploit要比直接使用C語言寫出的Exploit簡單得多。本章將集中介紹如何使用這個架構進行Exploit開發。

第5章 堆溢出利用

在很長一段時間內,Windows下的堆溢出被認為是不可利用的,然而事實並非如此。本章將用精闢的論述點破堆溢出利用的原理,讓您輕鬆領會堆溢出的精髓。此外,這章的一系列調試實驗將加深您對概念和原理的理解。用通俗易懂的方式論述複雜的技術是本書始終堅持的原則。

第6章 形形色色的記憶體攻擊技術

在了解基本的堆疊溢出後,本章將為大家展示更為高級的記憶體攻擊技術。本章集中介紹了一些曾發表於Black Hat上的著名論文中所提出的高級利用技術,如狙擊Windows異常處理機制、攻擊虛函式、off by one、 Heap Spray等利用技巧。對於安全專家,了解這些技巧和手法不至於在分析漏洞時錯把可以利用的漏洞誤判為低風險類型;對於黑客技術愛好者,這些知識很可能成為激發技術靈感的火花。

第7章 手機里的緩衝區溢出

在PC機上的溢出攻擊進行的如火如荼的時候,您是否也想了解手機平台上的緩衝區溢出問題?那就不要錯過本章!本章以ARM和Windows Mobile為例,介紹手機平台上編程和調試技巧。並在最後以一個手機上的exploit me為大家揭開手機里緩衝區溢出的神秘面紗。

第8章 其他類型的軟體漏洞

緩衝區溢出漏洞只是軟體漏洞的一個方面,我們來看看其他一些流行的安全漏洞。如格式化串漏洞、SQL注入、XPath注入、XSS等安全漏洞產生的原因、利用技巧及防範措施。

第2篇 漏洞利用原理(高級)

第9章 Windows安全機制概述

微軟在Windows XP SP2和Windows 2003之後,向作業系統中加入了許多安全機制。本章將集中討論這些安全機制對漏洞利用的影響。

第10章 棧中的守護天使:GS

針對緩衝區溢出時覆蓋函式返回地址這一特徵,微軟在編譯程式時使用了一個很酷的安全編譯選項——GS。本章將對GS編譯選項的原理進行詳細介紹,並介紹幾種繞過GS的溢出技巧。

第11章 亡羊補牢:SafeSEH

攻擊S.E.H已經成為windows平台下漏洞利用的經典手法。為了遏制日益瘋狂的攻擊,微軟在Windows XP SP2及後續版本的作業系統中引入了著名的S.E.H校驗機制SafeSEH。本章將會對這一安全機制進行詳細的分析,並介紹其中的不足和繞過方法。

第12章 數據與程式的分水嶺:DEP

溢出攻擊的根源在於現代計算機對數據和代碼沒有明確區分這一先天缺陷, 而DEP這種看似釜底抽薪式的防護措施是否真的可以杜絕溢出攻擊呢?答案馬上揭曉。

第13章 在記憶體中躲貓貓:ASLR

程式載入時不再使用固定的基址載入,ASLR技術將溢出時使用的跳板在記憶體中隱藏了起來,沒有了跳板我們如何溢出呢?本章將帶領您在黑暗中尋找溢出的出口。

第14章 S.E.H終極防護:SEHOP

SafeSEH的敗北,讓微軟推出一種更為嚴厲的S.E.H保護機制SEHOP。這裡將為您展示這種保護機制的犀利之處。

第15章 重重保護下的堆

當堆溢出變成可能後,微軟不能再無視堆中的保護機制了,讓我們一覽堆中的保護機制,並分析其漏洞。

第3篇 漏洞挖掘技術

第16章 漏洞挖掘技術簡介

不論從工程上講還是從學術上講,漏洞挖掘都是一個相當前沿的領域。本章將從動態測試和靜態審計兩方面對漏洞挖掘技術的基礎知識進行簡單的介紹。

第17章 檔案類型漏洞挖掘與Smart Fuzz

檔案類型的漏洞層出不窮,持續威脅著網際網路的安全。如何系統的測試檔案格式,產生精確有效的畸形測試用例用以發掘檔案解析器的安全漏洞,並不是一件容易的事情。本章將從理論和實踐兩個方面向您講述灰盒測試技術。

第18章 FTP的漏洞挖掘

本章將簡述FTP協定,並手把手地帶領您完成幾個初級的漏洞測試案例,讓您親身體會下真實的漏洞長什麼模樣。

第19章 E-mail的漏洞挖掘

E-mail系統涉及的安全問題不光只有緩衝區溢出,在本章的挖掘案例中,您會發現除了工具和常用方法外,威力最為強大的武器還是您的大腦。Evil thinking是安全測試中最重要的思維方式之一。

第20章 ActiveX控制項的漏洞挖掘

控制項類漏洞曾經是大量網馬的棲身之地。本章將結合若干個曾經的0 day向您比較系統的介紹這類漏洞的測試、調試的相關工具和方法。

第4篇 作業系統核心安全

第21章 探索ring0

研究核心漏洞,需要首先掌握一些核心基礎知識,例如核心驅動程式的開發、編譯、運行和調試,核心中重要的數據結構等,本章將為讀者開啟探索ring0之門,逐步掌握一些核心基礎知識。

第22章 核心漏洞利用技術

本章將帶領讀者從一個簡單的核心漏洞程式exploitme.sys的編寫開始,展示核心漏洞利用的思路、方法,以及利用程式和Ring0 Shellcode的編寫和設計。

第23章 FUZZ驅動程式

掌握了核心漏洞的原理和利用方法,本章將進入核心漏洞挖掘階段,學習較為高級的核心漏洞挖掘技術,最後實踐該漏洞挖掘技術,分析挖掘出核心漏洞。

第24章 核心漏洞案例分析

本章對幾種典型的核心漏洞,用幾個真實的核心漏洞案例來詳細分析,分析漏洞造成的具體原因和細節,並構造漏洞成功利用的方法。

第5篇 漏洞分析案例

第25章 漏洞分析技術概述

本章縱覽了漏洞分析與調試的思路,並介紹了一些輔助漏洞調試分析的高級逆向工具。

第26章 RPC入侵:MS06-040 與MS08-067

由於可以做到主動式遠程入侵,RPC級別的漏洞被譽為漏洞中的王者,此類漏洞也極其稀有,每一個都有一段曲折的故事。值得一提的是最近的兩個RPC系統漏洞竟然出自同一個函式。本章將對這個縫來補去沒有修好的函式進行詳細分析,讓您從攻防兩方面深刻理解漏洞的起因和修復策略的重要性。

第27章 MS06-055分析:實戰Heap Spray

通過網頁“掛馬”是近年來攻擊者慣用的手法。本章通過分析微軟IE瀏覽器中真實的緩衝區溢出漏洞,告訴您為什麼不能隨便點擊來歷不明的URL連結,並在實戰中為大家演示Heap Spray技術。

第28章 MS09-032分析:一個“&”引發的血案

一個視頻網頁的背後可能是一隻兇狠的木馬,這就是著名的Microsoft DirectShow MPEG-2視頻ActiveX控制項遠程代碼執行漏洞。本章將為您分析該漏洞產生的原因及分析技巧。

第29章 Yahoo!Messenger棧溢出漏洞

在波濤洶湧的溢出大潮中Yahoo也沒能倖免,作為國外非常流行的Yahoo!Messenger也存在過非常嚴重的漏洞。本章將重現當時的場景,並分析漏洞產生的原因。

第30章 CVE-2009-0927:PDF中的JS

您可能不會隨便運行一個執行檔,但是您會想到別人發過來的PDF文檔中也有可能隱藏著一些東西嗎?本章將以PDF文檔為例,帶您領略檔案類型溢出漏洞的風采。

第31章 壩之蟻穴:超長URL溢出漏洞

安全軟體不一定安全,即便是這款保護未成年人健康上網的計算機終端過濾軟體,也有可能成為黑客攻擊的視窗。本章將介紹綠壩軟體中一個已經被修復了的安全漏洞。

第32章 暴風影音M3U檔案解析漏洞

晚上回家後用暴風影音打開別人發過來的M3U列表檔案,在你陶醉於其內容之時,一隻精幹的小馬已悄然在後台運行。想要了解這隻小馬是如何進入你的電腦的?請閱讀本章。

第33章 LNK捷徑檔案漏洞

是否我不去運行任何可疑檔案,不去打開陌生的網址就安全了呢?答案是否定。LNK捷徑漏洞無需打開檔案,只要瀏覽惡意檔案,所在資料夾就會中毒,俗稱“看一眼就掛”。本章將帶您分析這一神奇的漏洞。

Failwest

目 錄

第1篇 漏洞利用原理(初級)

第1章 基礎知識 2

1.1 漏洞概述 2

1.1.1 bug與漏洞 2

1.1.2 幾個令人困惑的安全問題 2

1.1.3 漏洞挖掘、漏洞分析、漏洞利用 3

1.1.4 漏洞的公布與0 day回響 5

1.2 二進制檔案概述 5

1.2.1 PE檔案格式 5

1.2.2 虛擬記憶體 6

1.2.3 PE檔案與虛擬記憶體之間的映射 7

1.3 必備工具 11

1.3.1 OllyDbg簡介 11

1.3.2 SoftICE簡介 11

1.3.3 WinDbg簡介 16

1.3.4 IDA Pro簡介 18

1.3.5 二進制編輯器 20

1.3.6 VMware簡介 21

1.3.7 Python編程環境 28

1.4 Crack小實驗 29

第2章 棧溢出原理與實踐 38

2.1 系統棧的工作原理 38

2.1.1 記憶體的不同用途 38

2.1.2 棧與系統棧 39

2.1.3 函式調用時發生了什麼 40

2.1.4 暫存器與函式棧幀 43

2.1.5 函式調用約定與相關指令 44

2.2 修改鄰接變數 47

2.2.1 修改鄰接變數的原理 47

2.2.2 突破密碼驗證程式 49

2.3 修改函式返回地址 53

2.3.1 返回地址與程式流程 53

2.3.2 控制程式的執行流程 57

2.4 代碼植入 62

2.4.1 代碼植入的原理 62

2.4.2 向進程中植入代碼 62

第3章 開發shellcode的藝術 71

3.1 shellcode概述 71

3.1.1 shellcode與exploit 71

3.1.2 shellcode需要解決的問題 72

3.2 定位shellcode 73

3.2.1 棧幀移位與jmp esp 73

3.2.2 獲取“跳板”的地址 76

3.2.3 使用“跳板”定位的exploit 78

3.3 緩衝區的組織 81

3.3.1 緩衝區的組成 81

3.3.2 抬高棧頂保護shellcode 83

3.3.3 使用其他跳轉指令 83

3.3.4 不使用跳轉指令 84

3.3.5 函式返回地址移位 85

3.4 開發通用的shellcode 87

3.4.1 定位API的原理 87

3.4.2 shellcode的載入與調試 88

3.4.3 動態定位API地址的shellcode 89

3.5 shellcode編碼技術 98

3.5.1 為什麼要對shellcode編碼 98

3.5.2 會“變形”的shellcode 99

3.6 為shellcode“減肥” 103

3.6.1 shellcode瘦身大法 103

3.6.2 選擇恰當的hash算法 105

3.6.3 191個位元組的bindshell 107

第4章 用MetaSploit開發Exploit 119

4.1 漏洞測試平台MSF 簡介 119

4.2 入侵Windows系統 121

4.2.1 漏洞簡介 121

4.2.2 圖形界面的漏洞測試 121

4.2.3 console界面的漏洞測試 125

4.3 利用MSF製作shellcode 126

4.4 用MSF掃描“跳板” 128

4.5 Ruby語言簡介 129

4.6 “傻瓜式”Exploit開發 134

4.7 用MSF發布POC 140

第5章 堆溢出利用 144

5.1 堆的工作原理 144

5.1.1 Windows堆的歷史 144

5.1.2 堆與棧的區別 145

5.1.3 堆的數據結構與管理策略 146

5.2 在堆中漫遊 151

5.2.1 堆分配函式之間的調用關係 151

5.2.2 堆的調試方法 152

5.2.3 識別堆表 155

5.2.4 堆塊的分配 158

5.2.5 堆塊的釋放 159

5.2.6 堆塊的合併 159

5.2.7 快表的使用 161

5.3 堆溢出利用(上)——DWORD SHOOT 163

5.3.1 鍊表“拆卸”中的問題 163

5.3.2 在調試中體會“DWORD SHOOT” 165

5.4 堆溢出利用(下)——代碼植入 169

5.4.1 DWORD SHOOT的利用方法 169

5.4.2 狙擊P.E.B中RtlEnterCritical-Section()的函式指針 170

5.4.3 堆溢出利用的注意事項 175

第6章 形形色色的記憶體攻擊技術 178

6.1 狙擊Windows異常處理機制 178

6.1.1 S.E.H概述 178

6.1.2 在棧溢出中利用S.E.H 180

6.1.3 在堆溢出中利用S.E.H 184

6.1.4 深入挖掘Windows異常處理 187

6.1.5 其他異常處理機制的利用思路 192

6.2 “off by one”的利用 196

6.3 攻擊C++的虛函式 198

6.4 Heap Spray:堆與棧的協同攻擊 201

第7章 手機里的緩衝區溢出 204

7.1 Windows Mobile簡介 204

7.1.1 Windows Mobile前世今生 204

7.1.2 Windows Mobile架構概述 205

7.1.3 Windows Mobile的記憶體管理 209

7.2 ARM簡介 212

7.2.1 ARM是什麼 212

7.2.2 ARM暫存器結構 212

7.2.3 ARM彙編指令結構 215

7.2.4 ARM指令定址方式 220

7.2.5 ARM的函式調用與返回 222

7.3 Windows Mobile上的HelloWorld 223

7.4 遠程調試工具簡介 227

7.4.1 遠程信息查看管理套件 227

7.4.2 手機上的調試——Microsoft Visual Studio 231

7.4.3 手機上的調試——IDA 233

7.5 手機上的exploit me 237

第8章 其他類型的軟體漏洞 243

8.1 格式化串漏洞 243

8.1.1 printf中的缺陷 243

8.1.2 用printf讀取記憶體數據 244

8.1.3 用printf向記憶體寫數據 245

8.1.4 格式化串漏洞的檢測與防範 246

8.2 SQL注入攻擊 247

8.2.1 SQL注入原理 247

8.2.2 攻擊PHP+MySQL網站 248

8.2.3 攻擊ASP+SQL Server網站 250

8.2.4 注入攻擊的檢測與防範 252

8.3 其他注入方式 253

8.3.1 Cookie注入,繞過馬其諾防線 253

8.3.2 XPath注入,XML的阿喀琉斯之踵 254

8.4 XSS攻擊 255

8.4.1 腳本能夠“跨站”的原因 255

8.4.2 XSS Reflection攻擊場景 256

8.4.3 Stored XSS攻擊場景 258

8.4.4 攻擊案例回顧:XSS蠕蟲 258

8.4.5 XSS的檢測與防範 259

8.5 路徑回溯漏洞 260

8.5.1 路徑回溯的基本原理 260

8.5.2 範式化與路徑回溯 261

第2篇 漏洞利用原理(高級)

第9章 Windows安全機制概述 264

第10章 棧中的守護天使:GS 267

10.1 GS安全編譯選項的保護原理 267

10.2 利用未被保護的記憶體突破GS 271

10.3 覆蓋虛函式突破GS 273

10.4 攻擊異常處理突破GS 276

10.5 同時替換棧中和.data中的Cookie突破GS 280

第11章 亡羊補牢:SafeSEH 284

11.1 SafeSEH對異常處理的保護原理 284

11.2 攻擊返回地址繞過SafeSEH 288

11.3 利用虛函式繞過SafeSEH 288

11.4 從堆中繞過SafeSEH 288

11.5 利用未啟用SafeSEH模組繞過SafeSEH 292

11.6 利用載入模組之外的地址繞過SafeSEH 299

11.7 利用Adobe Flash Player ActiveX控制項繞過SafeSEH 305

第12章 數據與程式的分水嶺:DEP 313

12.1 DEP機制的保護原理 313

12.2 攻擊未啟用DEP的程式 316

12.3 利用Ret2Libc挑戰DEP 317

12.3.1 Ret2Libc實戰之利用ZwSetInformationProcess 318

12.3.2 Ret2Libc實戰之利用VirtualProtect 330

12.3.3 Ret2Libc實戰之利用VirtualAlloc 339

12.4 利用可執行記憶體挑戰DEP 348

12.5 利用.NET挑戰DEP 352

12.6 利用Java applet挑戰DEP 359

第13章 在記憶體中躲貓貓:ASLR 363

13.1 記憶體隨機化保護機制的原理 363

13.2 攻擊未啟用ASLR的模組 367

13.3 利用部分覆蓋進行定位記憶體地址 372

13.4 利用Heap spray技術定位記憶體地址 376

13.5 利用Java applet heap spray技術定位記憶體地址 379

13.6 為.NET控制項禁用ASLR 382

第14章 S.E.H終極防護:SEHOP 386

14.1 SEHOP的原理 386

14.2 攻擊返回地址 388

14.3 攻擊虛函式 388

14.4 利用未啟用SEHOP的模組 388

14.5 偽造S.E.H鍊表 390

第15章 重重保護下的堆 396

15.1 堆保護機制的原理 396

15.2 攻擊堆中存儲的變數 397

15.3 利用chunk重設大小攻擊堆 398

15.4 利用Lookaside表進行堆溢出 407

第3篇 漏洞挖掘技術

第16章 漏洞挖掘技術簡介 414

16.1 漏洞挖掘概述 414

16.2 動態測試技術 415

16.2.1 SPIKE簡介 415

16.2.2 beSTORM簡介 421

16.3 靜態代碼審計 429

第17章 檔案類型漏洞挖掘 與Smart Fuzz 431

17.1 Smart Fuzz概述 431

17.1.1 檔案格式Fuzz的基本方法 431

17.1.2 Blind Fuzz和Smart Fuzz 432

17.2 用Peach挖掘檔案漏洞 433

17.2.1 Peach介紹及安裝 433

17.2.2 XML介紹 434

17.2.3 定義簡單的 Peach Pit 436

17.2.4 定義數據之間的依存關係 440

17.2.5 用Peach Fuzz PNG檔案 441

17.3 010腳本,複雜檔案解析的瑞士軍刀 446

17.3.1 010 Editor簡介 446

17.3.2 010腳本編寫入門 447

17.3.3 010腳本編寫提高——PNG檔案解析 449

17.3.4 深入解析,深入挖掘——PPT檔案解析 452

第18章 FTP的漏洞挖掘 457

18.1 FTP協定簡介 457

18.2 漏洞挖掘手記1:DOS 457

18.3 漏洞挖掘手記2:訪問許可權 466

18.4 漏洞挖掘手記3:緩衝區溢出 468

18.5 漏洞挖掘手記4:Fuzz DIY 472

第19章 E-Mail的漏洞挖掘 477

19.1 挖掘SMTP漏洞 477

19.1.1 SMTP協定簡介 477

19.1.2 SMTP漏洞挖掘手記 478

19.2 挖掘POP3漏洞 480

19.2.1 POP3協定簡介 480

19.2.2 POP3漏洞挖掘手記 481

19.3 挖掘IMAP4漏洞 489

19.3.1 IMAP4協定簡介 489

19.3.2 IMAP4漏洞挖掘手記 490

19.4 其他E-mail漏洞 491

19.4.1 URL中的路徑回溯 491

19.4.2 記憶體中的路徑回溯 494

19.4.3 郵件中的XSS 500

第20章 ActiveX控制項的漏洞挖掘 502

20.1 ActiveX控制項簡介 502

20.1.1 瀏覽器與ActiveX控制項的關係 502

20.1.2 控制項的屬性 503

20.2 手工測試ActiveX控制項 504

20.2.1 建立測試模板 504

20.2.2 獲取控制項的接口信息 505

20.3 用工具測試ActiveX控制項:COMRaider 509

20.4 挖掘ActiveX漏洞 516

20.4.1 ActiveX漏洞的分類 516

20.4.2 漏洞挖掘手記1:超星閱讀器溢出 517

20.4.3 漏洞挖掘手記2:目錄操作許可權 521

20.4.4 漏洞挖掘手記3:檔案讀許可權 523

20.4.5 漏洞挖掘手記3:檔案刪除許可權 525

第4篇 作業系統核心安全

第21章 探索ring0 528

21.1 核心基礎知識介紹 528

21.1.1 核心概述 528

21.1.2 驅動編寫之Hello World 528

21.1.3 派遣例程與IRP結構 533

21.1.4 Ring3打開驅動設備 537

21.1.5 DeviceIoControl函式與IoControlCode 538

21.1.6 Ring3/Ring0的四種通信方式 539

21.2 核心調試入門 541

21.2.1 創建核心調試環境 541

21.2.2 藍屏分析 549

21.3 核心漏洞概述 551

21.3.1 核心漏洞的分類 551

21.3.2 核心漏洞的研究過程 553

21.4 編寫安全的驅動程式 555

21.4.1 輸入輸出檢查 555

21.4.2 驗證驅動的調用者 556

21.4.3 白名單機制的挑戰 556

第22章 核心漏洞利用技術 557

22.1 利用實驗之exploitme.sys 557

22.2 核心漏洞利用思路 559

22.3 核心漏洞利用方法 560

22.4 核心漏洞利用實戰與編程 565

22.5 Ring0 Shellcode的編寫 570

第23章 FUZZ驅動程式 579

23.1 核心FUZZ思路 579

23.2 核心FUZZ工具介紹 581

23.3 核心FUZZ工具DIY 583

23.3.1 Fuzz對象、Fuzz策略、Fuzz項 583

23.3.2 IoControl MITM Fuzz 583

23.3.3 IoControl Driver Fuzz 585

23.3.4 MyIoControl Fuzzer界面 586

23.4 核心漏洞挖掘實戰 588

23.4.1 超級巡警ASTDriver.sys本地提權漏洞 588

23.4.2 東方微點mp110013.sys本地提權漏洞 594

23.4.3 瑞星HookCont.sys驅動本地拒絕服務漏洞 601

第24章 核心漏洞案例分析 605

24.1 遠程拒絕服務核心漏洞 605

24.2 本地拒絕服務核心漏洞 611

24.3 緩衝區溢出核心漏洞 614

24.4 任意地址寫任意數據核心漏洞 619

24.5 任意地址寫固定數據核心漏洞 622

第5篇 漏洞分析案例

第25章 漏洞分析技術概述 628

25.1 漏洞分析的方法 628

25.2運動中尋求突破:調試技術 629

25.2.1 斷點技巧 630

25.2.2 回溯思路 644

25.3 用“白眉”在PE中漫步 647

25.3.1 指令追蹤技術與Paimei 647

25.3.2 Paimei的安裝 648

25.3.3 使用PE Stalker 649

25.3.4 迅速定位特定功能對應的代碼 652

25.4 補丁比較 654

第26章 RPC入侵:MS06-040 與MS08-067 658

26.1 RPC漏洞 658

26.1.1 RPC漏洞簡介 658

26.1.2 RPC編程簡介 658

26.2 MS06-040 659

26.2.1 MS06-040簡介 659

26.2.2 動態調試 660

26.2.3 靜態分析 667

26.2.4 實現遠程exploit 670

26.3 Windows XP環境下的MS06-040 exploit 677

26.3.1 靜態分析 677

26.3.2 蠕蟲樣本的exploit方法 682

26.3.3 實踐跨平台exploit 684

26.4 MS08-067 690

26.4.1 MS08-067簡介 690

26.4.2 認識Legacy Folder 693

26.4.3 “移經”測試 694

26.4.4 “移經”風險 695

26.4.5 POC的構造 696

26.5 魔波、Conficker與蠕蟲病毒 703

第27章 MS06-055分析:實戰Heap Spray 705

27.1 MS06-055簡介 705

27.1.1 矢量標記語言(VML)簡介 705

27.1.2 0 day安全回響紀實 706

27.2 漏洞分析 707

27.3 漏洞利用 710

第28章 MS09-032分析:一個“&”引發的血案 713

28.1 MS09-032簡介 713

28.2 漏洞原理及利用分析 713

第29章 Yahoo!Messenger棧 溢出漏洞 719

29.1 漏洞介紹 719

29.2 漏洞分析 719

29.3 漏洞利用 723

第30章 CVE-2009-0927:PDF中的JS 725

30.1 CVE-2009-0927簡介 725

30.2 PDF文檔格式簡介 725

30.3 漏洞原理及利用分析 727

第31章 壩之蟻穴:超長URL溢出漏洞 731

31.1 漏洞簡介 731

31.3 漏洞原理及利用分析 731

第32章 暴風影音M3U檔案解析漏洞 737

32.1 漏洞簡介 737

32.2 M3U檔案簡介 737

32.3 漏洞原理及利用分析 738

第33章 LNK捷徑檔案漏洞 744

33.1 漏洞簡介 744

33.2 漏洞原理及利用分析 744

附錄A 已公布的核心程式漏洞列表 750

參考文獻 753

相關詞條

熱門詞條

聯絡我們