內容介紹
內容簡介:Web套用無處不在,安全隱患如影隨形。承載著豐富功能與用途的Web應用程式中布滿了各種漏洞,攻擊者能夠利用這些漏洞盜取用戶資料,實施詐欺,破壞其他系統等。近年來,一些公司的網路系統頻頻遭受攻擊,導致用戶信息泄露,造成不良影響。因此,如何確保Web應用程式的安全,已成為擺在人們眼前亟待解決的問題。
本書是Web安全領域專家的經驗結晶,系統闡述了如何針對Web應用程式展開攻擊與反攻擊,深入剖析了攻擊時所使用的技巧、步驟和工具,條理清晰,內容詳盡。第2版全面升級,涵蓋了最新的攻擊技巧與應對措施,此外,書中還列出了幾百個“漏洞實驗室”,以幫助讀者對所學內容進行鞏固和實戰演習。
作者介紹
作者簡介:Dafydd Stuttard 世界知名安全顧問、作家、軟體開發人士。牛津大學博士,MDSec公司聯合創始人,尤其擅長Web應用程式和編譯軟體的滲透測試。Dafydd以網名PortSwigger蜚聲安全界,是眾所周知的Web應用程式集成攻擊平台Burp Suite的開發者。
Marcus Pinto 資深滲透測試專家,劍橋大學碩士,MDSec公司聯合創始人。Marcus為全球金融、政府、電信、博彩、零售等行業頂尖組織和機構提供Web應用程式滲透測試和安全防禦的諮詢與培訓。
作品目錄
目錄第1章 Web應用程式安全與風險1
1.1 Web應用程式的發展歷程1
1.1.1 Web應用程式的常見功能3
1.1.2 Web應用程式的優點4
1.2 Web應用程式安全4
1.2.1 “本站點是安全的”5
1.2.2 核心安全問題:用戶可提交任意輸入6
1.2.3 關鍵問題因素7
1.2.4 新的安全邊界8
1.2.5 Web應用程式安全的未來10
1.3 小結10
第2章 核心防禦機制12
2.1 處理用戶訪問12
2.1.1 身份驗證13
2.1.2 會話管理13
2.1.3 訪問控制14
2.2 處理用戶輸入15
2.2.1 輸入的多樣性15
2.2.2 輸入處理方法16
2.2.3 邊界確認18
2.2.4 多步確認與規範化20
2.3 處理攻擊者21
2.3.1 處理錯誤21
2.3.2 維護審計日誌22
2.3.3 向管理員發出警報23
2.3.4 應對攻擊24
2.4 管理應用程式25
2.5 小結26
2.6 問題26
第3章 Web應用程式技術27
3.1 HTTP27
3.1.1 HTTP請求27
3.1.2 HTTP回響28
3.1.3 HTTP方法29
3.1.4 URL30
3.1.5 REST31
3.1.6 HTTP訊息頭31
3.1.7 cookie33
3.1.8 狀態碼33
3.1.9 HTTPS34
3.1.10 HTTP代理35
3.1.11 HTTP身份驗證35
3.2 Web功能36
3.2.1 伺服器端功能36
3.2.2 客戶端功能40
3.2.3 狀態與會話46
3.3 編碼方案47
3.3.1 URL編碼47
3.3.2 Unicode編碼48
3.3.3 HTML編碼48
3.3.4 Base64編碼49
3.3.5 十六進制編碼49
3.3.6 遠程和序列化框架49
3.4 下一步50
3.5 問題50
第4章 解析應用程式51
4.1 枚舉內容與功能51
4.1.1 Web抓取51
4.1.2 用戶指定的抓取54
4.1.3 發現隱藏的內容56
4.1.4 應用程式頁面與功能路徑67
4.1.5 發現隱藏的參數69
4.2 分析應用程式69
4.2.1 確定用戶輸入入口點70
4.2.2 確定伺服器端技術72
4.2.3 確定伺服器端功能76
4.2.4 解析受攻擊面79
4.2.5 解析Extreme Internet Shopping應用程式80
4.3 小結81
4.4 問題82
第5章 避開客戶端控制項83
5.1 通過客戶端傳送數據83
5.1.1 隱藏表單欄位84
5.1.2 HTTP cookie86
5.1.3 URL參數86
5.1.4 Referer訊息頭86
5.1.5 模糊數據88
5.1.6 ASP.NET ViewState89
5.2 收集用戶數據:HTML表單91
5.2.1 長度限制91
5.2.2 基於腳本的確認93
5.2.3 禁用的元素94
5.3 收集用戶數據:瀏覽器擴展95
5.3.1 常見的瀏覽器擴展技術96
5.3.2 攻擊瀏覽器擴展的方法97
5.3.3 攔截瀏覽器擴展的流量97
5.3.4 反編譯瀏覽器擴展100
5.3.5 附加調試器109
5.3.6 本地客戶端組件111
5.4 安全處理客戶端數據112
5.4.1 通過客戶端傳送數據112
5.4.2 確認客戶端生成的數據112
5.4.3 日誌與警報113
5.5 小結114
5.6 問題114
第6章 攻擊驗證機制115
6.1 驗證技術115
6.2 驗證機制設計缺陷116
6.2.1 密碼保密性不強116
6.2.2 蠻力攻擊登錄117
6.2.3 詳細的失敗訊息120
6.2.4 證書傳輸易受攻擊122
6.2.5 密碼修改功能124
6.2.6 忘記密碼功能125
6.2.7 “記住我”功能127
6.2.8 用戶偽裝功能129
6.2.9 證書確認不完善131
6.2.10 非唯一性用戶名131
6.2.11 可預測的用戶名132
6.2.12 可預測的初始密碼133
6.2.13 證書分配不安全133
6.3 驗證機制執行缺陷134
6.3.1 故障開放登錄機制134
6.3.2 多階段登錄機制中的缺陷135
6.3.3 不安全的證書存儲138
6.4 保障驗證機制的安全139
6.4.1 使用可靠的證書140
6.4.2 安全處理證書140
6.4.3 正確確認證書141
6.4.4 防止信息泄露142
6.4.5 防止蠻力攻擊143
6.4.6 防止濫用密碼修改功能144
6.4.7 防止濫用賬戶恢復功能145
6.4.8 日誌、監控與通知146
6.5 小結146
6.6 問題147
第7章 攻擊會話管理148
7.1 狀態要求148
7.2 會話令牌生成過程中的薄弱環節151
7.2.1 令牌有一定含義152
7.2.2 令牌可預測153
7.2.3 加密令牌162
7.3 會話令牌處理中的薄弱環節170
7.3.1 在網路上泄露令牌170
7.3.2 在日誌中泄露令牌173
7.3.3 令牌—會話映射易受攻擊175
7.3.4 會話終止易受攻擊176
7.3.5 客戶端暴露在令牌劫持風險之中177
7.3.6 寬泛的cookie範圍178
7.4 保障會話管理的安全180
7.4.1 生成強大的令牌181
7.4.2 在整個生命周期保障令牌的安全182
7.4.3 日誌、監控與警報184
7.5 小結185
7.6 問題185
第8章 攻擊訪問控制187
8.1 常見漏洞187
8.1.1 完全不受保護的功能188
8.1.2 基於標識符的功能190
8.1.3 多階段功能191
8.1.4 靜態檔案191
8.1.5 平台配置錯誤192
8.1.6 訪問控制方法不安全192
8.2 攻擊訪問控制193
8.2.1 使用不同用戶賬戶進行測試194
8.2.2 測試多階段過程197
8.2.3 通過有限訪問許可權進行測試199
8.2.4 測試“直接訪問方法”201
8.2.5 測試對靜態資源的控制202
8.2.6 測試對HTTP方法實施的限制202
8.3 保障訪問控制的安全203
8.4 小結206
8.5 問題207
第9章 攻擊數據存儲區208
9.1 注入解釋型語言208
9.2 注入SQL210
9.2.1 利用一個基本的漏洞211
9.2.2 注入不同的語句類型213
9.2.3 查明SQL注入漏洞216
9.2.4 “指紋”識別資料庫219
9.2.5 UNION操作符220
9.2.6 提取有用的數據224
9.2.7 使用UNION提取數據224
9.2.8 避開過濾226
9.2.9 二階SQL注入227
9.2.10 高級利用229
9.2.11 SQL注入之外:擴大資料庫攻擊範圍236
9.2.12 使用SQL注入工具238
9.2.13 SQL語法與錯誤參考241
9.2.14 防止SQL注入246
9.3 注入NoSQL249
9.4 注入XPath250
9.4.1 破壞應用程式邏輯251
9.4.2 謹慎XPath注入252
9.4.3 盲目XPath注入252
9.4.4 查找XPath注入漏洞253
9.4.5 防止XPath注入254
9.5 注入LDAP254
9.5.1 利用LDAP注入255
9.5.2 查找LDAP注入漏洞257
9.5.3 防止LDAP注入258
9.6 小結258
9.7 問題258
第10章 測試後端組件260
10.1 注入作業系統命令260
10.1.1 例1:通過Perl注入261
10.1.2 例2:通過ASP注入262
10.1.3 通過動態執行注入264
10.1.4 查找OS命令注入漏洞264
10.1.5 查找動態執行漏洞267
10.1.6 防止OS命令注入268
10.1.7 防止腳本注入漏洞268
10.2 操作檔案路徑268
10.2.1 路徑遍歷漏洞269
10.2.2 檔案包含漏洞278
10.3 注入XML解釋器279
10.3.1 注入XML外部實體279
10.3.2 注入SOAP281
10.3.3 查找並利用SOAP注入283
10.3.4 防止SOAP注入284
10.4 注入後端HTTP請求284
10.4.1 伺服器端HTTP重定向285
10.4.2 HTTP參數注入287
10.5 注入電子郵件290
10.5.1 操縱電子郵件標頭290
10.5.2 SMTP命令注入291
10.5.3 查找SMTP注入漏洞292
10.5.4 防止SMTP注入293
10.6 小結294
10.7 問題294
第11章 攻擊應用程式邏輯296
11.1 邏輯缺陷的本質296
11.2 現實中的邏輯缺陷297
11.2.1 例1:徵求提示297
11.2.2 例2:欺騙密碼修改功能298
11.2.3 例3:直接結算299
11.2.4 例4:修改保險單300
11.2.5 例5:入侵銀行302
11.2.6 例6:規避交易限制303
11.2.7 例7:獲得大幅折扣305
11.2.8 例8:避免轉義305
11.2.9 例9:避開輸入確認306
11.2.10 例10:濫用搜尋功能308
11.2.11 例11:利用調試訊息310
11.2.12 例12:與登錄機制競賽311
11.3 避免邏輯缺陷312
11.4 小結313
11.5 問題314
第12章 攻擊其他用戶315
12.1 XSS的分類316
12.1.1 反射型XSS漏洞316
12.1.2 保存型XSS漏洞320
12.1.3 基於DOM的XSS漏洞322
12.2 進行中的XSS攻擊323
12.2.1 真實XSS攻擊323
12.2.2 XSS攻擊有效載荷324
12.2.3 XSS攻擊的傳送機制327
12.3 查找並利用XSS漏洞329
12.3.1 查找並利用反射型XSS漏洞331
12.3.2 查找並利用保存型XSS漏洞352
12.3.3 查找並利用基於DOM的XSS漏洞357
12.4 防止XSS攻擊360
12.4.1 防止反射型與保存型XSS漏洞360
12.4.2 防止基於DOM的XSS漏洞364
12.5 小結365
12.6 問題365
第13章 攻擊用戶:其他技巧366
13.1 誘使用戶執行操作366
13.1.1 請求偽造366
13.1.2 UI偽裝374
13.2 跨域捕獲數據377
13.2.1 通過注入HTML捕獲數據377
13.2.2 通過注入CSS捕獲數據378
13.2.3 JavaScript劫持380
13.3 同源策略深入討論384
13.3.1 同源策略與瀏覽器擴展384
13.3.2 同源策略與HTML5386
13.3.3 通過代理服務應用程式跨域388
13.4 其他客戶端注入攻擊389
13.4.1 HTTP訊息頭注入389
13.4.2 cookie注入393
13.4.3 開放式重定向漏洞396
13.4.4 客戶端SQL注入402
13.4.5 客戶端HTTP參數污染402
13.5 本地隱私攻擊403
13.5.1 持久性cookie404
13.5.2 快取Web內容404
13.5.3 瀏覽歷史記錄405
13.5.4 自動完成406
13.5.5 Flash本地共享對象406
13.5.6 Silverlight獨立存儲406
13.5.7 Internet Explorer userData407
13.5.8 HTML5本地存儲機制407
13.5.9 防止本地隱私攻擊407
13.6 攻擊ActiveX控制項408
13.6.1 查找ActiveX漏洞409
13.6.2 防止ActiveX漏洞410
13.7 攻擊瀏覽器411
13.7.1 記錄鍵擊411
13.7.2 竊取瀏覽器歷史記錄與搜尋查詢412
13.7.3 枚舉當前使用的應用程式412
13.7.4 連線埠掃描412
13.7.5 攻擊其他網路主機413
13.7.6 利用非HTTP服務413
13.7.7 利用瀏覽器漏洞414
13.7.8 DNS重新綁定414
13.7.9 瀏覽器利用框架415
13.7.10 中間人攻擊416
13.8 小結418
13.9 問題418
第14章 定製攻擊自動化419
14.1 套用定製自動化攻擊419
14.2 枚舉有效的標識符420
14.2.1 基本步驟420
14.2.2 探測“觸點”421
14.2.3 編寫攻擊腳本422
14.2.4 JAttack423
14.3 獲取有用的數據428
14.4 常見漏洞模糊測試431
14.5 整合全部功能:Burp Intruder434
14.6 實施自動化的限制442
14.6.1 會話處理機制443
14.6.2 CAPTCHA控制項448
14.7 小結451
14.8 問題451
第15章 利用信息泄露453
15.1 利用錯誤訊息453
15.1.1 錯誤訊息腳本453
15.1.2 棧追蹤454
15.1.3 詳盡的調試訊息455
15.1.4 伺服器與資料庫訊息456
15.1.5 使用公共信息458
15.1.6 製造詳盡的錯誤訊息459
15.2 收集公布的信息460
15.3 使用推論461
15.4 防止信息泄露462
15.4.1 使用常規錯誤訊息462
15.4.2 保護敏感信息462
15.4.3 儘量減少客戶端信息泄露463
15.5 小結463
15.6 問題463
第16章 攻擊本地編譯型應用程式466
16.1 緩衝區溢出漏洞467
16.1.1 棧溢出467
16.1.2 堆溢出467
16.1.3 “一位偏移”漏洞468
16.1.4 查找緩衝區溢出漏洞470
16.2 整數漏洞472
16.2.1 整數溢出472
16.2.2 符號錯誤472
16.2.3 查找整數漏洞473
16.3 格式化字元串漏洞474
16.4 小結475
16.5 問題475
第17章 攻擊應用程式架構477
17.1 分層架構477
17.1.1 攻擊分層架構478
17.1.2 保障分層架構的安全482
17.2 共享主機與應用程式服務提供商483
17.2.1 虛擬主機484
17.2.2 共享的應用程式服務484
17.2.3 攻擊共享環境485
17.2.4 保障共享環境的安全490
17.3 小結491
17.4 問題491
第18章 攻擊Web伺服器493
18.1 Web伺服器配置缺陷493
18.1.1 默認證書493
18.1.2 默認內容494
18.1.3 目錄列表499
18.1.4 WebDAV方法500
18.1.5 Web伺服器作為代理伺服器503
18.1.6 虛擬主機配置缺陷504
18.1.7 保障Web伺服器配置的安全504
18.2 易受攻擊的伺服器軟體505
18.2.1 應用程式框架缺陷505
18.2.2 記憶體管理漏洞507
18.2.3 編碼與規範化漏洞508
18.2.4 查找Web伺服器漏洞512
18.2.5 保障Web伺服器軟體的安全513
18.3 Web應用程式防火牆514
18.4 小結515
18.5 問題516
第19章 查找原始碼中的漏洞517
19.1 代碼審查方法517
19.1.1“黑盒”測試與“白盒”
測試517
19.1.2 代碼審查方法518
19.2 常見漏洞簽名519
19.2.1 跨站點腳本519
19.2.2 SQL注入520
19.2.3 路徑遍歷520
19.2.4 任意重定向521
19.2.5 OS命令注入522
19.2.6 後門密碼522
19.2.7 本地代碼漏洞522
19.2.8 原始碼注釋524
19.3 Java平台524
19.3.1 確定用戶提交的數據524
19.3.2 會話互動525
19.3.3 潛在危險的API526
19.3.4 配置Java環境528
19.4 ASP.NET529
19.4.1 確定用戶提交的數據529
19.4.2 會話互動530
19.4.3 潛在危險的API531
19.4.4 配置ASP.NET環境533
19.5 PHP534
19.5.1 確定用戶提交的數據534
19.5.2 會話互動536
19.5.3 潛在危險的API536
19.5.4 配置 PHP 環境540
19.6 Perl542
19.6.1 確定用戶提交的數據542
19.6.2 會話互動543
19.6.3 潛在危險的API543
19.6.4 配置Perl環境544
19.7 JavaScript545
19.8 資料庫代碼組件546
19.8.1 SQL注入546
19.8.2 調用危險的函式547
19.9 代碼瀏覽工具547
19.10 小結548
19.11 問題548
第20章 Web應用程式黑客工具包550
20.1 Web瀏覽器550
20.1.1 Internet Explorer550
20.1.2 Firefox551
20.1.3 Chrome552
20.2 集成測試套件552
20.2.1 工作原理553
20.2.2 測試工作流程566
20.2.3 攔截代理伺服器替代工具568
20.3 獨立漏洞掃描器570
20.3.1 掃描器探測到的漏洞570
20.3.2 掃描器的內在限制571
20.3.3 掃描器面臨的技術挑戰572
20.3.4 當前產品574
20.3.5 使用漏洞掃描器576
20.4 其他工具577
20.4.1 Wikto/Nikto577
20.4.2 Firebug577
20.4.3 Hydra578
20.4.4 定製腳本578
20.5 小結581
第21章 Web應用程式滲透測試方法論582
21.1 解析應用程式內容584
21.1.1 搜尋可見的內容584
21.1.2 瀏覽公共資源585
21.1.3 發現隱藏的內容586
21.1.4 查找默認的內容586
21.1.5 枚舉標識符指定的功能586
21.1.6 調試參數587
21.2 分析應用程式587
21.2.1 確定功能587
21.2.2 確定數據進入點587
21.2.3 確定所使用的技術588
21.2.4 解析受攻擊面588
21.3 測試客戶端控制項588
21.3.1 通過客戶端傳送數據589
21.3.2 客戶端輸入控制項589
21.3.3 測試瀏覽器擴展組件590
21.4 測試驗證機制592
21.4.1 了解驗證機制592
21.4.2 測試密碼強度593
21.4.3 測試用戶名枚舉593
21.4.4 測試密碼猜測的適應性593
21.4.5 測試賬戶恢復功能594
21.4.6 測試“記住我”功能594
21.4.7 測試偽裝功能594
21.4.8 測試用戶名唯一性595
21.4.9 測試證書的可預測性595
21.4.10 檢測不安全的證書傳輸595
21.4.11 檢測不安全的證書分配596
21.4.12 測試不安全的存儲596
21.4.13 測試邏輯缺陷596
21.4.14 利用漏洞獲取未授權訪問597
21.5 測試會話管理機制598
21.5.1 了解會話管理機制598
21.5.2 測試令牌的含義599
21.5.3 測試令牌的可預測性599
21.5.4 檢查不安全的令牌傳輸600
21.5.5 檢查在日誌中泄露的令牌600
21.5.6 測試令牌?會話映射601
21.5.7 測試會話終止601
21.5.8 測試會話固定602
21.5.9 檢查 CSRF602
21.5.10 檢查cookie範圍602
21.6 測試訪問控制項603
21.6.1 了解訪問控制要求603
21.6.2 使用多個賬戶測試604
21.6.3 使用有限的許可權測試604
21.6.4 測試不安全的訪問控制方法605
21.7 測試基於輸入的漏洞605
21.7.1 模糊測試所有請求參數605
21.7.2 測試 SQL 注入607
21.7.3 測試 XSS和其他回響注入609
21.7.4 測試 OS 命令注入611
21.7.5 測試路徑遍歷612
21.7.6 測試腳本注入613
21.7.7 測試檔案包含613
21.8 測試特殊功能方面的輸入漏洞613
21.8.1 測試 SMTP 注入614
21.8.2 測試本地代碼漏洞614
21.8.3 測試SOAP注入616
21.8.4 測試 LDAP 注入616
21.8.5 測試XPath注入617
21.8.6 測試後端請求注入617
21.8.7 測試XXE注入617
21.9 測試邏輯缺陷618
21.9.1 確定關鍵的受攻擊面618
21.9.2 測試多階段過程618
21.9.3 測試不完整的輸入619
21.9.4 測試信任邊界619
21.9.5 測試交易邏輯619
21.10 測試共享主機漏洞620
21.10.1 測試共享基礎架構之間的隔離620
21.10.2 測試使用ASP主機的應用程式之間的隔離620
21.11 測試Web伺服器漏洞621
21.11.1 測試默認證書621
21.11.2 測試默認內容621
21.11.3 測試危險的HTTP方法622
21.11.4 測試代理功能622
21.11.5 測試虛擬主機配置不當622
21.11.6 測試Web伺服器軟體漏洞622
21.11.7 測試Web應用程式防火牆623
21.12 其他檢查623
21.12.1 測試基於 DOM 的攻擊624
21.12.2 測試本地隱私漏洞624
21.12.3 測試脆弱的SSL加密算法625
21.12.4 檢查同源策略配置625
21.13 檢查信息泄露625