第1部分 泄密的道德
第1章 正義黑客的道德規(guī)范 3
1.1 本書內容與正義黑客類圖書的關系 8
1.1.1 漏洞評估 9
1.1.2 滲透測試 9
1.2 關于黑客書籍和課程的爭論 11
1.2.1 工具的雙重性 12
1.2.2 攻擊發(fā)生時要分辨清楚 13
1.2.3 模擬攻擊 14
1.3 攻擊者為什么有機可乘 15
1.4 摘要 17
1.4.1 習題 17
1.4.2 答案 19
第2章 正義黑客與法制 21
2.1 與計算機犯罪相關的法律 22
2.1.1 18 USC Section 1029 22
2.1.2 18 USC Section 1030 25
2.1.3 相關州法律 30
2.1.4 18 USC Sections 2510 and 2701 32
2.1.5 數(shù)字千年版權法規(guī) 34
2.1.6 2002年電子安全強化法規(guī) 35
2.2 摘要 36
2.2.1 習題 37
2.2.2 答案 39
第3章 完全而道德的揭秘 41
3.1 不同的團隊和觀點 42
3.2 CERT工作流過程 44
3.3 完全公開策略(RainForest Puppy
策略) 45
3.4 互聯(lián)網安全組織 47
3.4.1 發(fā)現(xiàn) 47
3.4.2 通知 48
3.4.3 驗證 50
3.4.4 解決 52
3.4.5 發(fā)布 54
3.5 矛盾仍然存在 54
3.6 案例研究 55
3.6.1 完全揭秘過程的利弊 55
3.6.2 廠商要注意的問題 59
3.7 從現(xiàn)在開始,我們應該做什么 59
3.8 摘要 61
3.8.1 習題 62
3.8.2 答案 63
第2部分 滲透測試與工具
第4章 滲透測試過程 67
4.1 測試的種類 67
4.2 如何開始評估 69
4.2.1 建立團隊 69
4.2.2 建立實驗室 70
4.2.3 合同、安全和免于入獄 71
4.3 評估過程 72
4.3.1 評估的規(guī)劃 72
4.3.2 召開現(xiàn)場會以啟動評估 72
4.3.3 滲透測試過程 73
4.3.4 紅隊的過程 75
4.3.5 系統(tǒng)測試過程 78
4.3.6 給出報告 83
4.4 摘要 84
4.4.1 習題 85
4.4.2 答案 86
第5章 超越《黑客大曝光》:當今黑客
的高級工具 87
5.1 掃描之“過去的美好時光” 88
5.1.1 Paketto Keiretsu(scanrand,
paratrace) 88
5.1.2 paratrace 95
5.2 踩點:過去和現(xiàn)在 101
5.2.1 xprobe2 102
5.2.2 p0f 108
5.2.3 amap 112
5.2.4 Winfingerprint 116
5.3 嗅探工具 119
5.3.1 libpcap和WinPcap 120
5.3.2 被動嗅探與主動嗅探 121
5.3.3 防范主動嗅探 131
5.3.4 嗅探用戶名和口令 132
5.4 嗅探和攻擊LAN Manager登錄憑據(jù)
134
5.4.1 使用挑戰(zhàn)和散列(困難的方法)
138
5.4.2 使用ettercap(容易的方法) 138
5.4.3 嗅探并破解Kerberos 141
5.5 摘要 143
5.5.1 習題 144
5.5.2 答案 145
第6章 自動化滲透測試 147
6.1 Python技巧 148
6.1.1 獲得Python 148
6.1.2 Hello, World 148
6.1.3 Python對象 149
6.2 自動化滲透測試工具 156
6.2.1 Core IMPACT 156
6.2.2 Immunity CANVAS 159
6.2.3 Metasploit 163
6.3 摘要 172
6.3.1 習題 173
6.3.2 答案 173
第3部分 攻擊101
第7章 編程技巧 177
7.1 編程 178
7.1.1 問題解決過程 178
7.1.2 偽代碼 179
7.1.3 程序員vs.黑客 181
7.2 C語言 182
7.2.1 基本C語言結構 182
7.2.2 示例程序 187
7.2.3 用gcc編譯 188
7.3 計算機內存 189
7.3.1 RAM 189
7.3.2 字節(jié)序 189
7.3.3 內存分段 190
7.3.4 內存中的程序 190
7.3.5 緩沖區(qū) 191
7.3.6 內存中的字符串 191
7.3.7 指針 192
7.3.8 操作不同的內存區(qū) 192
7.4 Intel處理器 193
7.4.1 寄存器 194
7.4.2 算術邏輯部件(ALU) 195
7.4.3 程序計數(shù)器 195
7.4.4 控制單元 195
7.4.5 總線 195
7.5 匯編語言基礎 196
7.5.1 機器語言 vs.匯編語言 vs.C語言
196
7.5.2 AT&T vs. NASM 197
7.5.3 尋址模式 199
7.5.4 匯編語言文件結構 200
7.5.5 匯編 201
7.6 用gdb調試 201
7.6.1 gdb基礎 201
7.6.2 用gdb反匯編 204
7.7 摘要 205
7.7.1 習題 206
7.7.2 答案 207
第8章 基本Linux攻擊 209
8.1 棧操作 210
8.1.1 棧數(shù)據(jù)結構 210
8.1.2 具體實現(xiàn) 210
8.1.3 函數(shù)調用過程 210
8.2 緩沖區(qū)溢出 212
8.2.1 緩沖器溢出的例子 212
8.2.2 meet.c的溢出 213
8.2.3 緩沖區(qū)溢出的結果 217
8.3 本地緩沖區(qū)溢出攻擊 218
8.3.1 攻擊的組成部分 218
8.3.2 由命令行攻擊棧溢出 220
8.3.3 用通用攻擊代碼攻擊棧溢出 221
8.3.4 攻擊meet.c 223
8.3.5 攻擊小的緩沖區(qū) 224
8.4 遠程緩沖器溢出攻擊 227
8.4.1 客戶機/服務器模型 227
8.4.2 確定遠程機器的esp值 229
8.4.3 用Perl進行人工蠻力攻擊 230
8.5 摘要 232
8.5.1 習題 233
8.5.2 答案 234
第9章 高級Linux攻擊 235
9.1 格式串攻擊 236
9.1.1 問題 236
9.1.2 從任意的內存地址讀取 240
9.1.3 向任意位置內存的寫入 242
9.1.4 從.dtors到root 244
9.2 堆溢出攻擊 248
9.2.1 堆溢出 248
9.2.2 內存分配程序(malloc) 250
9.2.3 dlmalloc 250
9.2.4 堆溢出攻擊 254
9.2.5 其他攻擊 259
9.3 內存保護方案 260
9.3.1 Libsafe 260
9.3.2 GRSecurity內核補丁和腳本 260
9.3.3 Stackshield 261
9.3.4 綜合 261
9.4 摘要 262
9.4.1 習題 263
9.4.2 答案 264
第10章 編寫Linux Shellcode 265
10.1 基本的Linux Shellcode 266
10.1.1 系統(tǒng)調用 266
10.1.2 Exit系統(tǒng)調用 269
10.1.3 setreuid系統(tǒng)調用 271
10.1.4 在Shellcode中用execve建立
新的shell 272
10.2 綁定到端口的shellcode 276
10.2.1 Linux socket編程 277
10.2.2 建立socket的匯編程序 280
10.2.3 測試shellcode 283
10.3 反向連接的shellcode 286
10.3.1 用C程序反向連接 286
10.3.2 用匯編程序反向連接 288
10.4 摘要 290
10.4.1 習題 292
10.4.2 答案 294
第11章 編寫基本的Windows攻擊 295
11.1 編譯并調試Windows程序 295
11.1.1 在Windows上編譯 295
11.1.2 在Windows上調試 297
11.1.3 建立基本的Windows攻擊 307
11.2 摘要 316
11.2.1 習題 316
11.2.2 答案 317
第4部分 漏洞分析
第12章 被動分析 321
12.1 正義黑客的逆向工程 322
12.2 為什么進行逆向工程 322
12.3 源代碼分析 323
12.3.1 源代碼審計工具 324
12.3.2 源代碼審計工具的用途 326
12.3.3 人工源代碼審計 327
12.4 二進制分析 332
12.5 二進制自動分析工具 332
12.5.1 BugScam 333
12.5.2 BugScan 334
12.5.3 人工審計二進制代碼 335
12.6 摘要 348
12.6.1 習題 348
12.6.2 答案 350
第13章 高級逆向工程 351
13.1 為什么攻擊軟件 352
13.2 軟件開發(fā)過程 352
13.3 探測工具 353
13.3.1 調試器 354
13.3.2 代碼覆蓋工具 356
13.3.3 優(yōu)化測算工具 356
13.3.4 流程分析工具 356
13.3.5 內存監(jiān)控工具 359
13.4 雜湊 363
13.5 探測性雜湊的工具和技術 364
13.5.1 一個簡單的URL雜湊器 364
13.5.2 雜湊未知的協(xié)議 367
13.5.3 SPIKE 368
13.5.4 SPIKE代理 372
13.5.5 Sharefuzz 372
13.6 摘要 373
13.6.1 習題 373
13.6.2 答案 375
第14章 從發(fā)現(xiàn)漏洞到攻擊漏洞 377
14.1 攻擊的可能性 378
14.2 理解問題 382
14.2.1 前置條件和后置條件 382
14.2.2 可復現(xiàn)性 383
14.2.3 對返回libc攻擊的防御 392
14.3 把問題記入文檔 392
14.3.1 背景信息 392
14.3.2 環(huán)境 393
14.3.3 研究結果 393
14.4 摘要 393
14.4.1 習題 394
14.4.2 答案 396
第15章 關閉漏洞:緩解 397
15.1 緩解漏洞威脅的備選方法 397
15.1.1 端口敲擊 398
15.1.2 遷移 399
15.2 打補丁 400
15.2.1 對源代碼打補丁 400
15.2.2 對二進制代碼打補丁 402
15.3 摘要 406
15.3.1 習題 406
15.3.2 答案 408