目錄
第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
· · · · · · (
收起)