目錄
第I部分 引言
第1章 關注數據庫安全的原因 3
1.1 最安全的數據庫 3
1.2 數據庫安全研究現狀 4
1.3 討論數據庫安全研究現狀的意義 10
1.4 尋找數據庫服務器的漏洞 10
1.4.1 不要相信文獻 11
1.4.2 實現自己的客戶程序 11
1.4.3 調試係統,理解它是如何運行的 11
1.4.4 標識通信協議 11
1.4.5 理解任意代碼執行bug 12
1.4.6 寫下自己的“fuzzer” 12
1.5 小結 12
第Ⅱ部分 Oracle
第2章 Oracle體係結構 15
2.1 分析Oracle體係結構 15
2.2 Oracle RDBMS 21
2.3 Oracle Intelligent Agent 22
2.4 Oracle的身份驗證和授權 27
2.5 數據庫身份驗證 28
2.5.1 授權 30
2.5.2 關鍵係統特權 30
2.5.3 Oracle審計 31
第3章 攻擊Oracle 33
3.1 掃描Oracle服務器 33
3.1.1 常用端口 33
3.1.2 TNS Listener 34
3.2 Oracle中的PL/SQL 42
3.3 PL/SQL Injection 46
3.4 注入DELETE、INSERT及UPDATE語句 52
3.4.1 注入INSETRT語句 52
3.4.2 實際示例 53
3.5 注入匿名的PL/SQL代碼塊 54
3.6 用DBMS_SQL執行用戶自定義查詢 56
3.7 實際示例 59
3.8 PL/SQL和Oracle Application Server(Oracle應用程序服務器) 62
3.9 小結 65
第4章 Oracle:深入網絡 67
4.1 運行操作係統命令 67
4.1.1 通過PL/SQL運行OS命令 67
4.1.2 通過DBMS_SCHEDULER運行OS命令 69
4.1.3 通過Java運行OS命令 70
4.2 訪問文件係統 70
4.3 訪問網絡 72
4.4 PL/SQL和網絡 73
4.4.1 UTL_TCP 73
4.4.2 UTL_HTTP 75
4.4.3 UTL_SMTP 75
4.5 小結 76
第5章 保護Oracle 77
5.1 Oracle安全建議 77
5.2 Oracle數據庫服務器 79
5.2.1 賬戶 79
5.2.2 角色 80
5.2.3 DBA角色 81
第Ⅲ部分 DB2
第6章 IBM DB2通用數據庫 87
6.1 引言 87
6.2 DB2部署場景 87
6.3 DB2進程 93
6.4 DB2物理數據庫布局 95
6.4.1 Windows上的DB2 95
6.4.2 Linux上的DB2 95
6.5 DB2邏輯數據庫布局 95
6.6 DB2身份驗證和授權 96
6.7 授權 105
6.7.1 DBAUTH視圖 105
6.7.2 TABAUTH視圖 106
6.7.3 ROUTINEAUTH視圖 107
6.8 小結 108
第7章 DB2:發現、攻擊和防禦 109
第8章 攻擊DB2 119
8.1 DB2過程和函數的緩衝區溢齣 119
8.2 DB2遠程命令服務器 122
8.3 通過DB2運行命令 124
8.4 通過DB2訪問文件係統 125
8.4.1 加載方式 125
8.4.2 XML函數 125
8.5 本地攻擊DB2 126
8.6 小結 134
第9章 保護DB2 135
9.1 保護操作係統 135
9.2 保護DB2網絡接口 135
9.3 保護DBMS 136
9.4 刪除不必要組件 136
9.5 小結 136
第Ⅳ部分 Informix
第10章 Informix體係結構 139
10.1 分析Informix體係結構 139
10.1.1 網絡上的Informix 139
10.1.2 連接遠程Informix服務器 139
10.2 Informix邏輯布局 140
第11章 Informix:發現、攻擊和防禦 145
11.1 攻擊和防禦Informix 145
11.1.1 身份驗證提交攻擊 155
11.1.2 共享內存、用戶名和口令 157
11.2 用SPL攻擊Informix 160
11.2.1 通過SPL運行任意命令 160
11.2.2 加載任意庫 164
11.2.3 讀、寫服務器上的任意文件 164
11.3 Informix內的SQL緩衝區溢齣 164
11.4 小結 167
第12章 保護Informix 169
12.1 為服務器持續打補丁 169
12.2 加密網絡通信量 169
12.3 取消Public的Connect特權 169
12.4 啓用審計 169
12.5 取消Public對文件訪問例程的權限 169
12.6 取消Public對模塊例程的執行權限 170
12.7 阻止轉儲共享內存 170
12.8 阻止對基於Unix的服務器的本地攻擊 170
12.9 限製語言Usage權限 170
12.10 有用文檔 170
第Ⅴ部分 Sybase ASE
第13章 Sybase體係結構 175
13.1 Sybase背景 175
13.2 曆史 175
13.3 顯著特性 176
13.3.1 Java-In-ASE 176
13.3.2 部署場景 178
13.3.3 防火牆對Sybase的含意 180
13.3.4 與Sybase通信 181
13.3.5 特權模型 181
13.3.6 登錄賬戶基礎 181
13.3.7 口令和口令復雜性 182
13.3.8 服務交互 183
第14章 Sybase:發現、攻擊和防禦 185
14.1 發現目標 185
14.1.1 掃描Sybase 185
14.1.2 Sybase版本號 185
14.1.3 窺探身份驗證 186
14.2 攻擊Sybase 186
14.2.1 Sybase中的SQL注入 187
14.2.2 SQL注入基礎 187
14.3 Sybase內的MS SQL Server注入技術 190
14.3.1 注釋 190
14.3.2 Union Select 191
14.3.3 錯誤消息 191
14.3.4 @@version 191
14.3.5 Having/Group By 192
14.3.6 SQL批處理注入 192
14.3.7 xp_cmdshell 193
14.3.8 xp_regread 193
14.3.9 自定義的擴展存儲過程 193
14.3.10 調用CHAR函數以繞過引號篩選器 193
14.3.11 SHUTDOWN 194
14.3.12 通過sp_password逃避審計 194
14.3.13 連接服務器 194
14.3.14 利用時間延遲作通信通道 195
14.3.15 VARBINARY字麵值編碼和Exec 197
14.4 外部文件係統訪問 197
14.5 防禦攻擊 199
14.6 過去已知的一些Sybase ASE安全bug 199
14.6.1 CAN-2003-0327——遠程口令數組溢齣 199
14.6.2 DBCC CHECKVERIFY緩衝區溢齣 199
14.6.3 DROP DATABASE緩衝區溢齣漏洞 200
14.6.4 xp_freedll緩衝區溢齣 200
14.7 Sybase版本工具 200
第15章 Sybase:深入網絡 207
15.1 訪問網絡 207
15.2 用Sybase連接其他服務器 207
15.3 SQL中的Java 208
15.3.1 JSQL TDS客戶端 210
15.3.2 JSQL TCP代理 212
15.4 特洛伊(Trojanning)Sybase 213
15.4.1 授予用戶sa或sso_role權限 213
15.4.2 允許直接更新係統錶,授權訪問選擇的係統錶 214
第16章 保護Sybase 215
16.1 Sybase安全一覽錶 215
16.1.1 背景 215
16.1.2 操作係統 215
16.1.3 Sybase用戶 215
16.1.4 Sybase配置 216
16.2 背景 216
16.3 操作係統 216
16.4 Sybase用戶 217
16.5 Sybase配置 218
第Ⅵ部分 MySQL
第17章 MySQL體係結構 223
17.1 分析物理數據庫結構 223
17.1.1 部署 224
17.1.2 WinMySQLAdmin自動啓動 225
17.1.3 默認用戶名和口令 225
17.1.4 協議 226
17.1.5 身份驗證協議中的bug 226
17.2 分析邏輯數據庫結構 229
17.2.1 MySQL邏輯數據庫結構 229
17.2.2 存儲引擎 230
17.2.3 文件係統布局 231
17.2.4 查詢批處理 231
17.2.5 分析用戶和組 231
17.3 利用體係結構設計缺陷 237
17.3.1 用戶定義函數 237
17.3.2 訪問控製係統缺陷 239
17.3.3 缺少安全影響特性 240
17.3.4 缺少提高安全的特性 241
第18章 MySQL:發現、攻擊和防禦 243
18.1 發現目標 243
18.1.1 掃描MySQL 243
18.1.2 MySQL版本號 243
18.1.3 窺探身份驗證 244
18.2 黑掉MySQL 245
18.2.1 MySQL中的SQL注入 245
18.2.2 已知的一些MySQL bug 251
18.2.3 特洛伊(Trojanning)MySQL 258
18.3 本地攻擊MySQL 263
18.3.1 競爭條件 264
18.3.2 溢齣 264
18.4 再論MySQL文件結構 264
第19章 MySQL:深入網絡 265
19.1 MySQL客戶機散列身份驗證補丁 265
19.2 運行外部程序:用戶定義函數 266
19.3 Windows中的用戶定義函數 268
19.4 小結 272
第20章 保護MySQL 273
20.1 MySQL安全一覽錶 273
20.1.1 背景 273
20.1.2 操作係統 273
20.1.3 MySQL用戶 274
20.1.4 MySQL配置 274
20.1.5 例行審計 274
20.2 背景 275
20.3 操作係統 275
20.4 MySQL用戶 276
20.5 MySQL配置 278
20.6 例行審計 279
第Ⅶ部分 SQL Server
第21章 Microsoft SQL Sever體係結構 283
21.1 SQL Server背景 283
21.2 物理體係結構 284
21.2.1 錶格數據流(TDS)協議 284
21.2.2 網絡庫 285
21.2.3 SQL Server進程和端口 285
21.2.4 身份驗證和授權 287
21.3 邏輯體係結構 290
21.3.1 存儲過程 291
21.3.2 觸發器 295
21.4 用戶和組 296
21.4.1 賬戶信息 296
21.4.2 口令加密 298
第22章 SQL Server:漏洞、攻擊和防禦 303
22.1 漏洞 303
22.2 利用設計錯誤 303
22.2.1 SQL Slammer 溢齣 303
22.2.2 x08前導字節溢齣 304
22.2.3 x0A前導字節網絡DoS 304
22.2.4 客戶機溢齣 305
22.3 SQL 注入 305
22.3.1 係統級彆的攻擊 309
22.3.2 其他攻擊嚮量 309
22.3.3 時間延遲 310
22.3.4 存儲過程 311
22.3.5 端口掃描 313
22.3.6 批處理查詢 313
22.3.7 SQL注入的防禦 313
22.4 掩蓋入侵痕跡 315
22.4.1 三字節補丁 315
22.4.2 XSTATUS後門 317
第23章 保護SQL Server 319
23.1 安裝 319
23.1.1 步驟1:身份驗證 319
23.1.2 步驟2:口令強度 321
23.1.3 步驟3:操作係統鎖定 321
23.1.4 步驟4:安裝後的鎖定 322
23.2 配置 323
23.2.1 步驟5:配置網絡庫 323
23.2.2 步驟6:配置審計和警報 323
23.2.3 步驟7:鎖定特權 323
23.2.4 步驟8:刪除不需要的功能和服務 324
23.2.5 步驟9:刪除存儲過程 325
23.2.6 步驟10:安裝安全補丁 326
第Ⅷ部分 PostgreSQL
第24章 PostgreSQL體係結構 329
24.1 分析物理數據庫體係結構 329
24.1.1 安全部署 329
24.1.2 通用部署場景 330
24.1.3 術語 330
24.2 PostgreSQL文件結構 331
24.2.1 協議 332
24.2.2 身份驗證 333
24.2.3 係統目錄 335
24.2.4 分析用戶和組 338
24.2.5 存儲過程 339
第25章 PostgreSQL:發現與攻擊 341
25.1 尋找目標 341
25.2 PostgreSQL協議 342
25.3 針對PostgreSQL的網絡
攻擊 343
25.3.1 網絡嗅探 343
25.3.2 ARP欺騙和TCP劫持 343
25.3.3 ident欺騙 344
25.4 來自攻陷資源的信息泄露 345
25.5 已知的各種PostgreSQL bug 346
25.5.1 配置漏洞 347
25.5.2 代碼執行漏洞 347
25.5.3 PostgreSQL組件中的漏洞 351
25.6 PostgreSQL中的SQL注入 353
25.6.1 有用的內置函數 356
25.6.2 使用PostgreSQL 8.0中的時間延遲 357
25.6.3 存儲過程中的SQL注入 357
25.6.4 其他應用程序中的SQL注入漏洞 358
25.7 與文件係統進行交互 359
25.7.1 大對象支持 361
25.7.2 通過共享對象使用擴展 361
25.7.3 LOAD命令 363
25.8 小結 365
第26章 保護PostgreSQL 367
附錄A 時間延遲SQL注入
Harness的C代碼示例 369
附錄B 危險的擴展存儲過程 373
附錄C Oracle默認用戶名和口令 377
· · · · · · (
收起)