第Ⅰ部分速成課:備戰第1章道德黑客和法律制度 3
1.1理解敵方策略的意義 3
1.2正義黑客過程 4
1.2.1滲透測試過程 5
1.2.2不道德黑客的做法 7
1.3網絡法的興起 8
1.3.1了解各種網絡法 8
1.3.2關于“黑客”工具的爭論 13
1.4漏洞披露 13
1.4.1各方看待問題的不同角度 14
1.4.2個中緣由 14
1.4.3CERT目前采取的工作流程 15
1.4.4Internet安全組織 16
1.4.5爭議仍將存在 17
1.4.6再沒有免費的bug了 18
1.4.7bug賞金計劃 19
1.5本章小結 19
1.6參考文獻 20
1.7擴展閱讀 21
第2章編程技能 23
2.1C編程語言 23
2.1.1C語言基本結構 23
2.1.2程序范例 27
2.1.3使用gcc進行編譯 28
2.2計算機內存 29
2.2.1隨機存取存儲器(RAM) 29
2.2.2字節序 29
2.2.3內存分段 30
2.2.4內存中的程序 30
2.2.5緩沖區 31
2.2.6內存中的字符串 31
2.2.7指針 31
2.2.8內存知識小結 32
2.3Intel處理器 32
2.4匯編語言基礎 33
2.4.1機器指令、匯編語言與C語言 33
2.4.2AT&T與NASM 33
2.4.3尋址模式 36
2.4.4匯編文件結構 37
2.4.5匯編過程 37
2.5使用gdb進行調試 37
2.5.1gdb基礎 38
2.5.2使用gdb進行反匯編 39
2.6Python編程技能 40
2.6.1獲取Python 40
2.6.2Python的HelloWorld程序 40
2.6.3Python對象 41
2.6.4字符串 41
2.6.5數字 42
2.6.6列表 43
2.6.7字典 44
2.6.8Python文件操作 45
2.6.9Python套接字編程 46
2.7本章小結 47
2.8參考文獻 47
2.9擴展閱讀 47
第3章靜態分析 49
3.1道德的逆向工程 49
3.2使用逆向工程的原因 50
3.3源代碼分析 51
3.3.1源代碼審計工具 51
3.3.2源代碼審計工具的實用性 53
3.3.3手工源代碼審計 54
3.3.4自動化源代碼分析 59
3.4二進制分析 60
3.4.1二進制代碼的手工審計 60
3.4.2自動化的二進制分析工具 72
3.5本章小結 74
3.6擴展閱讀 74
第4章使用IDAPro進行高級分析 75
4.1靜態分析難點 75
4.1.1剝離的二進制文件 75
4.1.2靜態鏈接程序和FLAIR 77
4.1.3數據結構分析 83
4.1.4已編譯的C++代碼的怪異之處 87
4.2擴展IDAPro 89
4.2.1IDAPython腳本 90
4.2.2執行Python代碼 98
4.3本章小結 98
4.4擴展閱讀 98
第5章模糊測試的世界 101
5.1模糊測試簡介 101
5.2選擇目標 102
5.2.1輸入類型 102
5.2.2易于自動化 102
5.2.3復雜性 103
5.3模糊器的類型 104
5.3.1變異模糊器 104
5.3.2生成模糊器 105
5.4開始 105
5.4.1尋找模糊測試模板 106
5.4.2實驗5-1:從互聯網檔案館獲取樣本 107
5.4.3利用代碼覆蓋率選取最優模板集 108
5.4.4實驗5-2:為模糊測試選取最優樣本 109
5.5Peach模糊測試框架 110
5.5.1Peach模糊測試策略 115
5.5.2速度的重要性 116
5.5.3崩潰分析 116
5.5.4實驗5-3:Peach變異模糊測試 120
5.5.5其他變異模糊器 121
5.6生成模糊器 121
5.7本章小結 122
5.8擴展閱讀 122
第6章shellcode策略 125
6.1用戶空間shellcode 125
6.1.1系統調用 125
6.1.2基本shellcode 126
6.1.3端口綁定shellcode 126
6.1.4反向shellcode 128
6.1.5查找套接字shellcode 129
6.1.6命令執行代碼 130
6.1.7文件傳輸代碼 130
6.1.8多級shellcode 130
6.1.9系統調用代理shellcode 131
6.1.10進程注入shellcode 131
6.2其他shellcode考慮因素 132
6.2.1shellcode編碼 132
6.2.2自我破壞shellcode 133
6.2.3反匯編shellcode 134
6.3內核空間shellcode 135
6.4本章小結 136
6.5參考文獻 136
6.6擴展閱讀 137
第7章編寫Linuxshellcode 139
7.1基本的Linuxshellcode 139
7.1.1系統調用 139
7.1.2使用C進行系統調用 140
7.1.3使用匯編語言進行系統調用 141
7.1.4exit系統調用 141
7.1.5setreuid系統調用 143
7.1.6利用execve實現創建shell的shellcode 144
7.2實現端口綁定shellcode 147
7.2.1Linux套接字編程 147
7.2.2用匯編程序創建套接字 150
7.2.3測試shellcode 152
7.3實現反向連接shellcode 155
7.3.1反向連接的C代碼 155
7.3.2反向連接的匯編程序 156
7.4shellcode編碼 158
7.4.1簡單的異或編碼 158
7.4.2編碼后shellcode的結構 158
7.4.3JMP/CALLXOR解碼器示例 159
7.4.4FNSTENVXOR示例 160
7.4.5將代碼整合起來 162
7.5利用Metasploit自動生成shellcode 164
7.5.1利用Metasploit生成shellcode 164
7.5.2利用Metasploit對shellcode進行編碼 166
7.6本章小結 167
7.7擴展閱讀 167
第Ⅱ部分漏洞攻擊
第8章基于欺騙的攻擊 171
8.1什么是欺騙 171
8.2ARP欺騙 172
8.2.1實驗8-1:使用Ettercap的ARP欺騙 173
8.2.2查看網絡流量 174
8.2.3修改網絡流量 175
8.3DNS欺騙 181
8.3.1實驗8-2:使用Ettercap進行DNS欺騙 182
8.3.2執行攻擊 183
8.4NetBIOS名稱欺騙和LLMNR欺騙 184
8.4.1實驗8-3:使用Responder攻擊NetBIOS和LLMNR 185
8.4.2破解NTLMv1和NTLMv2哈希 188
8.5本章小結 188
8.6擴展閱讀 189
第9章攻擊Cisco路由器 191
9.1攻擊團體字符串和密碼 191
9.1.1實驗9-1:使用Ncrack和Metasploit來猜測憑據 191
9.1.2實驗9-2:使用onesixtyone和Metasploit猜測團體字符串 193
9.2SNMP和TFTP 195
9.2.1實驗9-3:使用Metasploit下載配置文件 195
9.2.2實驗9-4:使用SNMP和TFTP修改配置 197
9.3攻擊Cisco密碼 199
9.3.1攻擊CiscoType7密碼 199
9.3.2實驗9-5:使用Cain破解Type7密碼 200
9.3.3實驗9-6:使用Metasploit解密Type7密碼 200
9.3.4攻擊CiscoType5密碼 201
9.3.5實驗9-7:使用JohntheRipper攻擊CiscoType5密碼 201
9.4使用隧道中轉流量 202
9.4.1實驗9-8:建立GRE隧道 203
9.4.2實驗9-9:在GRE隧道上路由流量 205
9.5漏洞攻擊和其他攻擊 209
9.5.1Cisco漏洞攻擊 209
9.5.2保持對Cisco設備的訪問 210
9.6本章小結 210
9.7擴展閱讀 211
第10章基本的Linux漏洞攻擊 213
10.1棧操作 213
10.2緩沖區溢出 214
10.2.1實驗10-1:meet.c溢出 216
10.2.2緩沖區溢出的后果 219
10.3本地緩沖區溢出漏洞攻擊 220
10.3.1實驗10-2:漏洞攻擊的組件 220
10.3.2實驗10-3:在命令行上進行棧溢出漏洞攻擊 222
10.3.3實驗10-4:使用通用漏洞攻擊代碼進行棧溢出漏洞攻擊 224
10.3.4實驗10-5:對小緩沖區進行漏洞攻擊 225
10.4漏洞攻擊的開發過程 228
10.4.1實驗10-6:構建定制漏洞攻擊 228
10.4.2確定偏移 229
10.4.3確定攻擊向量 231
10.4.4生成shellcode 232
10.4.5驗證漏洞攻擊 233
10.5本章小結 234
10.6擴展閱讀 234
第11章高級Linux漏洞攻擊 235
11.1格式化字符串漏洞攻擊 235
11.1.1問題描述 235
11.1.2實驗11-1:從任意內存讀取 238
11.1.3實驗11-2:寫入任意內存 241
11.1.4實驗11-3:改變程序執行 242
11.2內存保護機制 245
11.2.1編譯器的改進 245
11.2.2實驗11-4:繞過堆棧保護 247
11.2.3內核補丁和腳本 249
11.2.4實驗11-5:"Returntolibc"漏洞攻擊 250
11.2.5實驗11-6:使用ret2libc保持權限 254
11.2.6結論 258
11.3本章小結 259
11.4參考文獻 259
11.5擴展閱讀 259
第12章Windows漏洞攻擊 261
12.1Windows程序編譯與調試 261
12.1.1實驗12-1:在Windows上編譯程序 261
12.1.2在Windows上使用ImmunityDebugger進行調試 263
12.1.3實驗12-2:程序崩潰 265
12.2編寫Windows漏洞攻擊程序 268
12.2.1漏洞攻擊程序開發過程回顧 268
12.2.2實驗12-3:攻擊ProSSHD服務器 268
12.3理解結構化異常處理(SEH) 277
12.4本章小結 279
12.5參考文獻 279
12.6擴展閱讀 279
第13章繞過Windows內存保護 281
13.1理解Windows內存保護(XPSP3、Vista、Windows7/8、Server2008和Server2012) 281
13.1.1基于棧的緩沖區溢出檢測(/GS) 281
13.1.2SafeSEH 282
13.1.3SEHOP 283
13.1.4堆保護 283
13.1.5DEP 283
13.1.6ASLR 284
13.1.7EMET 285
13.2繞過Windows內存保護 285
13.2.1繞過/GS 285
13.2.2繞過SafeSEH 286
13.2.3繞過ASLR 287
13.2.4繞過DEP 287
13.2.5繞過EMET 293
13.2.6繞過SEHOP 294
13.3本章小結 300
13.4參考文獻 300
13.5擴展閱讀 301
第14章攻擊Windows訪問控制模型 303
14.1為何黑客要攻擊訪問控制機制 303
14.1.1多數人并不理解訪問控制機制 303
14.1.2訪問控制漏洞易于攻擊 304
14.1.3訪問控制漏洞的數量巨大 304
14.2Windows訪問控制的工作機制 304
14.2.1安全標識符 304
14.2.2訪問令牌 305
14.2.3安全描述符 308
14.2.4訪問檢查 311
14.3訪問控制配置的分析工具 314
14.3.1轉儲進程令牌 314
14.3.2轉儲SD 317
14.4特殊SID、特殊訪問權限和“禁止訪問” 318
14.4.1特殊的SID 318
14.4.2特殊訪問權限 320
14.4.3剖析“禁止訪問” 321
14.5分析訪問控制引起的提權漏洞 327
14.6各種關注的對象類型的攻擊模式 328
14.6.1針對服務的攻擊 328
14.6.2針對Windows注冊表DACL的攻擊 334
14.6.3針對目錄DACL的攻擊 337
14.6.4針對文件DACL的攻擊 342
14.7其他對象類型的枚舉方法 346
14.7.1枚舉共享內存段 346
14.7.2枚舉命名管道 347
14.7.3枚舉進程 347
14.7.4枚舉其他命名的內核對象(信號量、互斥鎖、
事件、設備) 348
14.8本章小結 349
14.9擴展閱讀 349
第15章攻擊Web應用程序 351
15.1概述十大Web漏洞 351
15.2MD5哈希注入 352
15.2.1實驗15-1:注入哈希 352
15.3多字節編碼注入 357
15.3.1理解漏洞 357
15.3.2實驗15-2:利用多字節編碼 358
15.4搜捕跨站腳本攻擊(XSS) 362
15.4.1實驗15-3:JavaScript塊中的基本XSS注入 363
15.5Unicode規范化形式攻擊 364
15.5.1實驗15-4:利用Unicode規范化 364
15.5.2Unicode規范化簡介 365
15.5.3規范化形式 366
15.5.4準備好測試的環境 367
15.5.5通過x5s插件執行XSS測試 368
15.5.6手動發起攻擊 369
15.5.7添加自己的測試用例 370
15.6本章小結 371
15.7參考文獻 372
15.8擴展閱讀 372
第16章攻擊IE:堆溢出攻擊 373
16.1設置環境 373
16.1.1WinDbg配置 373
16.1.2將瀏覽器附加到WinDbg 374
16.2堆噴射簡介 374
16.3使用HTML5噴射 376
16.3.1實驗16-1:使用HTML5執行堆噴射 377
16.4DOM元素屬性噴射(DEPS) 379
16.4.1實驗16-2:使用DEPS技術的堆噴射 380
16.5HeapLib2技術 382
16.5.1通過耗盡緩存塊來強制執行新的分配 383
16.5.2實驗16-3:HeapLib2噴射 383
16.6使用字節數組的Flash噴射 384
16.6.1實驗16-4:使用Flash執行基本的堆噴射 385
16.7使用整數向量的Flash噴射 386
16.7.1實驗16-5:使用Flash向量的堆噴射 385
16.8利用低碎片堆(LFH) 388
16.9本章小結 389
16.10參考文獻 389
16.11擴展閱讀 389
第17章攻擊IE:釋放后重用技術 391
17.1釋放后重用概述 391
17.2分析釋放后重用攻擊(UAF) 394
17.3利用UAF漏洞 402
17.4本章小結 407
17.5參考文獻 407
17.6擴展閱讀 408
第18章使用BeEF進行高級客戶端攻擊 409
18.1BeEF基礎 409
18.1.1實驗18-1:設置BeEF 409
18.1.2實驗18-2:使用BeEF控制臺 411
18.2掛鉤瀏覽器 414
18.2.1實驗18-3:基本的XSS掛鉤 414
18.2.2實驗18-4:使用網站欺騙掛鉤瀏覽器 415
18.2.3實驗18-5:使用shank自動注入掛鉤 417
18.3使用BeEF獲得指紋 419
18.3.1實驗18-6:使用BeEF獲得瀏覽器指紋 419
18.3.2實驗18-7:使用BeEF獲得用戶指紋 420
18.3.3實驗18-8:使用BeEF獲得計算機指紋 421
18.4攻擊瀏覽器 423
18.4.1實驗18-9:使用BeEF和Java來攻擊瀏覽器 423
18.4.2使用BeEF和Metasploit攻擊瀏覽器 426
18.5自動化攻擊 430
18.6本章小結 432
18.7擴展閱讀 432
第19章基于補丁比較的1-day漏洞開發 433
19.1有關二進制比較的介紹 433
19.1.1應用程序比較 433
19.1.2補丁比較 434
19.2二進制比較工具 434
19.2.1BinDiff 435
19.2.2turbodiff 436
19.2.3實驗19-1:首次文件比較 438
19.3補丁管理流程 440
19.3.1微軟周二補丁 440
19.3.2實驗19-2:獲得并提取微軟補丁 441
19.3.3檢查補丁 443
19.3.4實驗19-3:使用turbodiff比較MS14-006 445
19.3.5內核調試 447
19.3.6實驗19-4:內核調試MS14-006 451
19.4本章小結 454
19.5參考文獻 454
19.6擴展閱讀 454
第Ⅲ部分高級惡意軟件分析
第20章剖析Android惡意軟件 457
20.1Android平臺簡介 457
20.1.1Android應用程序包 457
20.1.2應用程序清單 459
20.1.3分析DEX 460
20.1.4Java反編譯 462
20.1.5DEX反編譯 463
20.1.6DEX反匯編 465
20.1.7練習20-1:在模擬器中運行APK 466
20.2惡意軟件分析 468
20.2.1惡意軟件分析入門 468
20.2.2練習20-2:運用Droidbox進行黑盒APK監控 471
20.3本章小結 472
20.4擴展閱讀 473
第21章剖析勒索軟件 475
21.1勒索軟件的歷史 475
21.2贖金支付選項 476
21.3剖析Ransomlock 476
20.2.1實驗21-1:動態分析 477
20.2.2實驗21-2:靜態分析 479
21.4CryptoLocker 491
21.5本章小結 493
21.6擴展閱讀 493
第22章分析64位惡意軟件 495
22.1AMD64架構概述 495
22.2解密C&C服務器 498
22.3本章小結 511
22.4擴展閱讀 511
第23章下一代逆向工程 513
23.1著名的IDA插件 513
23.1.1IDAscope 513
23.1.2IDAToolbag 519
23.1.3協作 522
23.2基于TrapX的蜜罐和沙箱技術 523
23.2.1免費的動態分析工具 523
23.2.2商業替代品:TrapXMalwareTrap 524
23.3本章小結 527
23.4參考文獻 527
23.5擴展閱讀 527