第1篇 基礎知識
第1章 漏洞概述
1.1 bug與漏洞
1.2 幾個令人困惑的安全問題
1.3 漏洞挖掘、漏洞分析、漏洞利用
1.4 漏洞的公布與0 day響應
第2章 二進制文件概述
2.1 PE文件格式
2.2 虛擬內存
2.3 PE文件與虛擬內存之間的映射
第3章 必備工具
3.1 OllyDbg簡介
3.2 SoftICE簡介
3.3 WinDbg 簡介
3.4 IDA Pro簡介
3.5 二進制編輯器
3.6 虛擬機簡介
3.7 Crack二進制文件
第2篇 漏洞利用
第4章 棧溢出利用
4.1 系統(tǒng)棧的工作原理
4.1.1 內存的不同用途
4.1.2 棧與系統(tǒng)棧
4.1.3 函數調用時發(fā)生了什么
4.1.4 寄存器與函數棧幀
4.1.5 函數調用約定與相關指令
4.2 修改鄰接變量
4.2.1 修改鄰接變量的原理
4.2.2 突破密碼驗證程序
4.3 修改函數返回地址
4.3.1 返回地址與程序流程
4.3.2 控制程序的執(zhí)行流程
4.4 代碼植入
4.4.1 代碼植入的原理
4.4.2 向進程中植入代碼
第5章 開發(fā)shellcode的藝術
5.1 shellcode概述
5.1.1 shellcode與exploit
5.1.2 shellcode需要解決的問題
5.2 定位shellcode
5.2.1 棧幀移位與jmp esp
5.2.2 獲取“跳板”的地址
5.2.3 使用“跳板”定位的exploit
5.3 緩沖區(qū)的組織
5.3.1 緩沖區(qū)的組成
5.3.2 抬高棧頂保護shellcode
5.3.3 使用其他跳轉指令
5.3.4 不使用跳轉指令
5.3.5 函數返回地址移位
5.4 開發(fā)通用的shellcode
5.4.1 定位API的原理
5.4.2 shellcode的加載與調試
5.4.3 動態(tài)定位API地址的shellcode
5.5 shellcode編碼技術
5.5.1 為什么要對shellcode編碼
5.5.2 會“變形”的shellcode
5.6 為shellcode“減肥”
5.6.1 shellcode瘦身大法
5.6.2 選擇恰當的hash算法
5.6.3 191個字節(jié)的bindshell
第6章 堆溢出利用
6.1 堆的工作原理
6.1.1 Windows堆的歷史
6.1.2 堆與棧的區(qū)別
6.1.3 堆的數據結構與管理策略
6.2 在堆中漫游
6.2.1 堆分配函數之間的調用關系
6.2.2 堆的調試方法
6.2.3 識別堆表
6.2.4 堆塊的分配
6.2.5 堆塊的釋放
6.2.6 堆塊的合并
6.3 堆溢出利用(上)——DWORD SHOOT
6.3.1 鏈表“拆卸”中的問題
6.3.2 在調試中體會“DWORD SHOOT”
6.4 堆溢出利用(下)——代碼植入
6.4.1 DWORD SHOOT的利用方法
6.4.2 狙擊P.E.B中RtlEnterCritical-Section()的函數指針
6.4.3 堆溢出利用的注意事項
第7章 Windows異常處理機制深入淺出
7.1 S.E.H概述
7.2 在棧溢出中利用S.E.H
7.3 在堆溢出中利用S.E.H
7.4 挖掘Windows異常處理
7.4.1 不同級別的S.E.H
7.4.2 線程的異常處理
7.4.3 進程的異常處理
7.4.4 系統(tǒng)默認的異常處理U.E.F
7.4.5 異常處理流程的總結
7.5 V.E.H簡介
第8章 高級內存攻擊技術
8.1 狙擊異常處理機制
8.1.1 攻擊V.E.H鏈表的頭節(jié)點
8.1.2 攻擊TEB中的S.E.H頭節(jié)點
8.1.3 攻擊U.E.F
8.1.4 攻擊PEB中的函數指針
8.2 “off by one”的利用
8.3 攻擊C++的虛函數
8.4 Heap Spray:堆與棧的協(xié)同攻擊
第9章 揭秘Windows安全機制
9.1 Service Pack 2簡介
9.2 百密一疏的S.E.H驗證
9.3 棧中的較量
9.3.1 .net中的GS安全編譯選項
9.3.2 GS機制面臨的挑戰(zhàn)
9.4 重重保護下的堆
9.5 硬件方面的安全措施
第10章 用MetaSploit開發(fā)Exploit
10.1 漏洞測試平臺MSF 簡介
10.2 入侵Windows系統(tǒng)
10.2.1 漏洞簡介
10.2.2 圖形界面的漏洞測試
10.2.3 console界面的漏洞測試
10.3 利用MSF制作shellcode
10.4 用MSF掃描“跳板”
10.5 Ruby語言簡介
10.6 “傻瓜式”Exploit開發(fā)
10.7 用MSF發(fā)布POC
第11章 其他漏洞利用技術
11.1 格式化串漏洞
11.1.1 printf中的缺陷
11.1.2 用printf讀取內存數據
11.1.3 用printf向內存寫數據
11.1.4 格式化串漏洞的檢測與防范
11.2 SQL注入攻擊
11.2.1 SQL注入原理
11.2.2 攻擊PHP+MySQL網站
11.2.3 攻擊ASP+SQL Server網站
11.2.4 注入攻擊的檢測與防范
11.3 XSS攻擊
11.3.1 腳本能夠“跨站”的原因
11.3.2 XSS Reflection攻擊場景
11.3.3 Stored XSS攻擊場景
11.3.4 攻擊案例回顧:XSS蠕蟲
11.3.5 XSS的檢測與防范
第3篇 漏洞分析
第12章 漏洞分析技術概述
12.1 漏洞分析的方法
12.2 用“白眉”在PE中漫步
12.2.1 指令追蹤技術與Paimei
12.2.2 Paimei的安裝
12.2.3 使用PE Stalker
12.2.4 迅速定位特定功能對應的代碼
12.3 補丁比較
第13章 MS06-040分析:系統(tǒng)入侵與蠕蟲
13.1 MS06-040簡介
13.2 漏洞分析
13.2.1 動態(tài)調試
13.2.2 靜態(tài)分析
13.3 遠程Exploit
13.3.1 RPC編程簡介
13.3.2 實現遠程exploit
13.3.3 改進exploit
13.3.4 MS06-040與蠕蟲
第14章 MS06-055分析:揭秘“網馬”
14.1 MS06-055簡介
14.1.1 矢量標記語言(VML)簡介
14.1.2 O day安全響應紀實
14.2 漏洞分析
14.3 漏洞利用
14.3.1 實踐Heap Spray技術
14.3.2 網頁木馬攻擊
第15章 MS07-060分析:Word文檔中的陰謀
15.1 MS07-060簡介
15.2 POC分析
第4篇 漏洞挖掘與軟件安全性測試
第16章 漏洞挖掘技術淺談
16.1 漏洞挖掘概述
16.2 Fuzz文件格式
16.2.1 File Fuzz簡介
16.2.2 用Paimei實踐File Fuzz
16.3 Fuzz網絡協(xié)議
16.3.1 協(xié)議測試簡介
16.3.2 SPIKE的Fuzz原理
16.3.3 SPIKE的Hello World
16.3.4 定義Block
16.3.5 生成Fuzz用例
16.4 Fuzz ActiveX
16.5 靜態(tài)代碼審計
第17章 安全的軟件生命周期
17.1 Threat Modeling
17.2 編寫安全的代碼
17.3 產品安全性測試
17.4 漏洞管理與應急響應
參考文獻