第1章 安全測試的一般方法 1
1.1 安全測試人員的不同類型 2
1.2 一種安全測試的方法 3
1.2.1 深入理解測試的內容 4
1.2.2 從攻擊者的角度思考如何攻擊目標 6
1.2.3 攻擊産品 8
1.2.4 時刻關注新的攻擊 8
1.3 小結 9
第2章 利用威脅模型進行安全測試 10
2.1 威脅建模 10
2.2 測試人員如何對威脅模型分級 11
2.3 數據流程圖 12
2.4 入口點和退齣點的安全 13
2.5 識彆威脅的技巧及常見威脅 14
2.6 測試人員如何利用一個完整的威脅模型 16
2.7 技術實現難以符閤産品規範或威脅模型 19
2.8 小結 20
第3章 查找入口點 21
3.1 查找入口點並劃分等級 22
3.2 常見入口點 23
3.2.1 文件 23
3.2.2 套接字(Socket) 27
3.2.3 HTTP請求 29
3.2.4 命名管道 32
3.2.5 可插入協議處理程序 35
3.2.6 惡意服務器響應 37
3.2.7 程序化接口 38
3.2.8 SQL 39
3.2.9 注冊錶 39
3.2.10 用戶接口 41
3.2.11 E-mail 42
3.2.12 命令行參數 44
3.2.13 環境變量 45
3.3 小結 47
第4章 成為惡意的客戶端 48
4.1 客戶端/服務器交互 48
4.1.1 發現服務器正常接收的請求 49
4.1.2 操縱網絡請求 51
4.2 測試HTTP 55
4.2.1 理解無狀態協議 56
4.2.2 接收輸入的測試方法 56
4.3 快速測試特定的網絡請求 66
4.4 測試技巧 68
4.5 小結 69
第5章 成為惡意的服務器 70
5.1 理解客戶端接收惡意服務器響應的常見方法 71
5.2 SSL能否阻止惡意服務器的攻擊 73
5.3 操縱服務器響應 73
5.4 惡意響應漏洞的例子 74
5.5 錯誤認識:對攻擊者來說創建惡意服務器非常睏難 76
5.6 理解降級(Downgrade)MITM攻擊 77
5.7 測試技巧 78
5.8 小結 79
第6章 欺騙 80
6.1 掌握欺騙問題的重要性 80
6.2 尋找欺騙問題 82
6.3 常見欺騙案例 82
6.3.1 IP地址欺騙 83
6.3.2 MAC地址欺騙 84
6.3.3 利用網絡協議欺騙 85
6.4 用戶接口(User Interface,UI)欺騙 88
6.4.1 重構對話框 88
6.4.2 Z-Order欺騙 93
6.4.3 讓人誤解的URL和文件名 94
6.5 測試技巧 97
6.6 小結 97
第7章 信息泄露 98
7.1 信息泄露問題 98
7.2 定位信息泄露的常見區域 99
7.2.1 文件泄露 99
7.2.2 網絡泄露 107
7.3 識彆重要的數據 111
7.3.1 數據混淆 112
7.3.2 隱含泄露 113
7.4 小結 113
第8章 緩衝區溢齣及堆棧/堆操縱 114
8.1 瞭解溢齣的工作原理 117
8.1.1 堆棧溢齣 118
8.1.2 整型溢齣 121
8.1.3 堆溢齣 128
8.1.4 其他攻擊 129
8.2 溢齣測試:在哪裏尋找(測試)用例 130
8.2.1 網絡 130
8.2.2 文檔與文件 131
8.2.3 較高權限和較低權限用戶之間的共享信息 131
8.2.4 可編程接口 132
8.3 黑盒(功能)測試 133
8.3.1 確定期待的是什麼數據 133
8.3.2 使用你能識彆的數據 134
8.3.3 瞭解界限與邊界 134
8.3.4 保持全部數據的完整性 137
8.3.5 改造正常數據使其溢齣的策略 141
8.3.6 測試首要行為和次要行為 143
8.3.7 要查找什麼 144
8.3.8 運行時工具 156
8.3.9 模糊測試 158
8.4 白盒測試 159
8.4.1 要查找的對象 160
8.4.2 溢齣的可用性 164
8.4.3 Unicode數據 169
8.4.4 已過濾的數據 170
8.5 其他主題 170
8.5.1 無代碼執行的溢齣也很嚴重 170
8.5.2 /GS編譯器開關 173
8.6 測試技巧 175
8.7 小結 176
第9章 格式化字符串攻擊 177
9.1 什麼是格式化字符串 178
9.2 理解為什麼格式化字符串存在問題 178
9.2.1 剖析prinf調用 179
9.2.2 堆棧解析錯誤 180
9.2.3 內存覆蓋 182
9.3 格式化字符串安全漏洞測試 183
9.3.1 代碼檢查 183
9.3.2 黑盒測試 184
9.4 走查(Walkthrough):經曆一個格式化字符串攻擊過程 185
9.4.1 尋找格式化字符串漏洞 185
9.4.2 分析可利用性 186
9.4.3 深度挖掘:圍繞可利用性問題進行工作 189
9.4.4 構建一個簡單的負載 201
9.5 測試技巧 208
9.6 小結 209
第10章 HTML腳本攻擊 210
10.1 理解針對服務器的反射跨站腳本攻擊 211
10.1.1 例子:一個搜索引擎中的反射XSS 212
10.1.2 理解為什麼XSS攻擊是安全相關的 214
10.1.3 利用服務端的反射XSS漏洞 216
10.1.4 POST也是可利用的 218
10.2 理解針對服務器的持久性XSS攻擊 219
10.2.1 例子:在一個留言簿中的持久性XSS攻擊 220
10.2.2 利用針對服務器的持久性XSS攻擊 221
10.3 識彆用於反射和持久性XSS攻擊的數據 221
10.4 程序員阻止攻擊的常用方法 224
10.5 理解針對本地文件的反射XSS攻擊 227
10.5.1 例子:本地文件中的反射XSS 228
10.5.2 利用本地文件中的反射XSS漏洞 229
10.5.3 理解為何本地XSS漏洞是一個問題 229
10.5.4 利用本地XSS漏洞在受害者的機器上運行二進製文件 232
10.5.5 HTML資源 233
10.5.6 編譯後的幫助文件 234
10.5.7 在客戶端腳本中查找XSS漏洞 236
10.6 理解本地計算機區域中的腳本注入攻擊 237
10.6.1 例子:在Winamp播放列錶中的腳本注入 237
10.6.2 把非HTML文件當作HTML來解析 240
10.7 程序員用於防止HTML腳本攻擊的方法 243
10.7.1 過濾器 243
10.7.2 深入理解瀏覽器中的解析器 245
10.7.3 Style中的注釋 245
10.7.4 ASP.NET內置的過濾器 247
10.8 理解Internet Explorer如何減輕針對本地文件的XSS攻擊 248
10.8.1 從互聯網到本地計算機區域的鏈接被阻止 248
10.8.2 在默認情況下,腳本在本地計算機區域中是禁止運行的 248
10.9 識彆HTML腳本的脆弱性 250
10.10 通過檢查代碼查找HTML腳本漏洞 250
10.10.1 識彆所有返迴內容給Web瀏覽器或者文件係統的位置 251
10.10.2 確定輸齣中是否包含攻擊者提供的數據 251
10.10.3 檢查攻擊者的數據是否進行瞭適當的驗證或者編碼 252
10.10.4 ASP.NET自動對數據進行編碼 253
10.11 小結 254
第11章 XML問題 255
11.1 測試XML輸入文件中的非XML安全問題 255
11.1.1 結構良好的XML 256
11.1.2 有效的XML 257
11.1.3 XML輸入中包括非字母數字的數據 257
11.2 測試特定的XML攻擊 260
11.2.1 實體(Entity) 260
11.2.2 XML注入(XML Injection) 263
11.2.3 大文件引用(Large File Reference) 266
11.3 簡單對象訪問協議(Simple Object Access Protocol) 266
11.4 測試技巧 271
11.5 小結 271
第12章 規範化問題 272
12.1 理解規範化問題的重要性 272
12.2 查找規範化問題 273
12.3 基於文件的規範化問題 273
12.3.1 目錄遍曆 274
12.3.2 使文件擴展名檢查失效 274
12.3.3 導緻規範化問題的其他常見錯誤 277
12.4 基於Web的規範化問題 282
12.4.1 編碼問題 282
12.4.2 URL問題 287
12.5 測試技巧 290
12.6 小結 291
第13章 查找弱權限 292
13.1 理解權限的重要性 293
13.2 查找權限問題 294
13.3 理解Windows的訪問控製機製 295
13.3.1 安全對象 295
13.3.2 安全描述符 296
13.3.3 ACL 296
13.3.4 ACE 297
13.4 查找和分析對象的權限 298
13.4.1 使用Windows安全屬性對話框 298
13.4.2 使用AccessEnum 300
13.4.3 使用Process Explorer 300
13.4.4 使用ObjSD 301
13.4.5 使用AppVerifier 302
13.5 識彆常見的權限問題 302
13.5.1 弱自主訪問控製列錶(DACL) 303
13.5.2 NULL DACL 307
13.5.3 不恰當的ACE順序 308
13.5.4 對象創建者 308
13.5.5 間接訪問資源 309
13.5.6 忘記恢復原權限 309
13.5.7 蹲點(Squatting)攻擊 310
13.5.8 利用競爭條件 311
13.5.9 文件鏈接 312
13.6 確定對象的可訪問性 315
13.6.1 可遠程訪問的對象 315
13.6.2 本地可訪問對象 317
13.7 其他的權限考慮 318
13.7.1 .NET權限 318
13.7.2 SQL權限 318
13.7.3 基於角色的安全 320
13.8 小結 321
第14章 拒絕服務攻擊 322
14.1 掌握DoS攻擊的類型 322
14.1.1 查找技術實現缺陷 323
14.1.2 查找資源消耗缺陷 329
14.1.3 尋找解決嚴重問題的方法 335
14.2 測試技巧 336
14.3 小結 336
第15章 托管代碼問題 337
15.1 澄清有關使用托管代碼的常見錯誤認識 338
15.1.1 錯誤認識1:在托管代碼中不存在緩衝區溢齣 338
15.1.2 錯誤認識2:ASP.NET Web控件可防止跨站腳本 339
15.1.3 錯誤認識3:垃圾迴收可以防止內存泄露 339
15.1.4 錯誤認識4:托管代碼可防止SQL注入 340
15.2 理解代碼訪問安全的基礎 340
15.2.1 用戶安全和代碼安全的比較(User Security vs. Code Security) 341
15.2.2 CAS概況 341
15.2.3 程序(Assembly) 342
15.2.4 物證 343
15.2.5 權限 343
15.2.6 策略 344
15.2.7 全局程序集緩衝區(Global Assembly Cache) 348
15.2.8 堆棧審核(Stack Walk) 348
15.2.9 堆棧審查修改器(Stack Walk Modifier) 350
15.3 使用代碼檢查方法查找問題 352
15.3.1 調用不安全的代碼 353
15.3.2 查找斷言導緻的問題 355
15.3.3 查找鏈接查詢中的問題 357
15.3.4 瞭解拙劣的異常處理 360
15.4 理解使用APTCA帶來的問題 362
15.5 .NET程序反編譯 368
15.6 測試技巧 368
15.7 小結 369
第16章 SQL注入 370
16.1 SQL注入的確切含義 370
16.2 瞭解SQL注入的重要性 372
16.3 查找SQL注入問題 373
16.3.1 利用黑盒測試方法 374
16.3.2 利用代碼檢查 385
16.4 避免SQL注入的常見錯誤 387
16.4.1 轉義輸入中的單引號 388
16.4.2 刪除分號以阻止多重語句 388
16.4.3 隻使用存儲過程 389
16.4.4 刪除不必要的存儲過程 390
16.4.5 將運行SQL Server的計算機安置在防火牆之後 390
16.5 理解SQL存儲過程的再利用 391
16.5.1 示例:備份文檔 392
16.5.2 搜尋存儲過程中的再利用問題 393
16.6 識彆類似的注入攻擊 393
16.7 測試技巧 394
16.8 小結 395
第17章 觀察及逆嚮工程 396
17.1 在沒有調試器或反匯編工具時的觀測結果 396
17.1.1 輸齣比較 397
17.1.2 使用監視工具 398
17.2 使用調試器跟蹤程序的執行並改變其行為 399
17.2.1 修改執行流程以旁路限製 400
17.2.2 在調試器下讀取並修改內存的內容 404
17.3 使用反編譯器或反匯編工具對一個程序實施逆嚮工程 408
17.3.1 理解二進製本地代碼與字節碼的區彆 409
17.3.2 在沒有源代碼時定位不安全的函數調用 411
17.3.3 對算法實施逆嚮工程以識彆安全缺陷 415
17.4 分析安全更新 417
17.5 測試技巧 418
17.6 法律方麵的考慮因素 419
17.7 小結 419
第18章 ActiveX再利用攻擊 420
18.1 理解ActiveX控件 421
18.1.1 在Internet Explorer瀏覽器中創建ActiveX控件 421
18.1.2 ActiveX控件的初始化和腳本解析 423
18.1.3 ActiveX控件再利用 424
18.1.4 理解ActiveX控件安全模型 428
18.1.5 利用ActiveX控件測試方法學 434
18.1.6 其他的測試竅門及技術 441
18.2 走查(Walkthrough):ActiveX控件測試 450
18.2.1 Clear 451
18.2.2 ClipboardCopy 452
18.2.3 ClipboardPaste 453
18.2.4 InvokeRTFEditor 455
18.2.5 LoadRTF 464
18.2.6 NumChars 465
18.2.7 RTFEditor 屬性 466
18.2.8 RTFEditor PARAM 467
18.2.9 RTFEditorOverride 468
18.2.10 挑戰 470
18.3 測試技巧 470
18.4 小結 471
第19章 其他再利用攻擊 472
19.1 理解請求外部數據的文檔格式 472
19.1.1 文檔格式請求外部數據的常見的降低風險的方法 473
19.1.2 測試請求外部數據的文檔格式 474
19.2 請求外部數據的Web頁麵 475
19.2.1 通過URL查詢字符串進行的CSRF攻擊 475
19.2.2 通過POST數據進行的CSRF攻擊 476
19.2.3 防止CSRF攻擊的常用方法 477
19.2.4 通過SOAP數據進行的CSRF攻擊 478
19.2.5 對CSRF攻擊進行測試 479
19.3 理解窗口和綫程消息的再利用 479
19.4 小結 480
第20章 報告安全漏洞 481
20.1 報告問題 481
20.2 聯係開發商 482
20.3 期望聯係開發商後得到什麼 484
20.4 公開發布 485
20.4.1 確定細節數量 485
20.4.2 公開時間選擇 486
20.5 定位産品中的安全漏洞 486
20.5.1 與漏洞發現者聯係 487
20.5.2 識彆漏洞産生的根本原因 487
20.5.3 尋找相關的漏洞 487
20.5.4 確定受影響的産品及其版本 488
20.5.5 測試補丁 488
20.5.6 確定減輕措施和相關工作 488
20.5.7 為所有受影響的産品及其版本同時發布補丁 489
20.6 小結 489
附錄A 相關工具 490
附錄B 安全測試用例列錶 497
· · · · · · (
收起)