第1章 Oracle RDBMS概述 1
1.1 体系结构 1
1.2 进程 2
1.3 文件系统 10
1.4 网络 11
1.5 数据库对象 11
1.6 用户和角色 12
1.7 权限 12
1.8 Oracle补丁 13
1.9 小结 15
第2章 Oracle网络体系结构 17
2.1 TNS协议 18
2.1.1 TNS头 18
2.1.2 包的内部结构 20
2.2 获得Oracle版本 22
2.2.1 Listener的version命令和status命令 22
2.2.2 使用TNS协议版本 23
2.2.3 使用XML数据库版本 24
2.2.4 使用TNS错误文本 24
2.2.5 使用TNS版本的TTC函数 25
2.3 小结 27
第3章 攻击TNS Listener和调度器 37
3.1 攻击TNS Listener 37
3.2 Aurora GIOP Server 39
3.3 XML数据库 45
3.4 小结 51
第4章 攻击身份验证过程 53
4.1 身份验证的工作原理 53
4.2 攻击密码术 59
4.3 默认用户名和密码 63
4.4 账户穷举与蛮力攻击 67
4.4.1 长用户名缓冲区溢出 68
4.4.2 对Windows XP平台上Oracle的注释 68
4.5 小结 69
第5章 Oracle与PL/SQL 71
5.1 PL/SQL的概念 71
5.2 PL/SQL的执行权限 72
5.3 包装PL/SQL 76
5.3.1 在10g版本上包装和解包装 76
5.3.2 在9i及更早版本上包装和解包装 77
5.3.3 脱离代码的工作 78
5.4 PL/SQL注入 79
5.4.1 注入SELECT语句来获得更多的数据 81
5.4.2 注入函数 83
5.4.3 注入匿名PL/SQL块 85
5.4.4 PL/SQL注入的弊端 85
5.5 隐患研究 88
5.6 直接执行SQL的隐患 91
5.7 PL/SQL的紊乱条件 91
5.8 审计PL/SQL代码 94
5.9 DBMS_ASSERT包 96
5.10 实例 96
5.10.1 利用DBMS_CDC_IMPDP的漏洞 97
5.10.2 利用LT 98
5.10.3 利用漏洞DBMS_CDC_SUBSCRIBE和DBMS_CDC_ISUBSCRIBE 99
5.10.4 PL/SQL与触发器 105
5.11 小结 105
第6章 触发器 107
6.1 出于玩笑和利益的目的利用触发器的漏洞 107
6.2 利用触发器漏洞的实例 109
6.2.1 触发器MDSYS.SDO_GEOM_TRIG_INS1和SDO_GEOM_TRIG_INS 109
6.2.2 触发器MDSYS_SDO_CMT_CBK_TRIG 111
6.2.3 触发器SYS.CDC_DROP_CTABLE_BEFORE 113
6.2.4 触发器MDSYS.SDO_DROP_USER_BEFORE 114
6.3 小结 115
第7章 间接增加权限 117
7.1 逐步间接获得数据库管理员的权限 117
7.1.1 由CREATE ANY TRIGGER获得数据库管理员权限 117
7.1.2 由CREATE ANY VIEW获得数据库管理员权限 120
7.1.3 由EXECUTE ANY PROCEDURE获得数据库管理员权限 123
7.1.4 由CREATE PROCEDUER获得数据库管理员权限 124
7.2 小结 124
第8章 战胜虚拟专有数据库 127
8.1 设计使Oracle丢弃某种机制 127
8.2 利用原文件访问战胜VPD 133
8.3 通用权限 135
8.4 小结 136
第9章 攻击Oracle PL/SQL Web应用程序 137
9.1 Oracle PL/SQL网关体系结构 137
9.2 识别Oracle PL/SQL网关 138
9.2.1 PL/SQL网关URL 138
9.2.2 Oracle Portal 140
9.3 验证Oracle PL/SQL网关的存在 140
9.3.1 Web服务器、HTTP服务器响应的报头 141
9.3.2 Oracle PL/SQL网关与数据库服务器的通信方式 142
9.4 攻击PL/SQL网关 144
9.5 小结 152
第10章 运行操作系统命令 153
10.1 通过PL/SQL运行OS命令 153
10.2 用Java运行OS命令 154
10.3 使用DBMS_SCHEDULER运行OS命令 155
10.4 直接用任务调度程序运行OS命令 156
10.5 使用ALTER SYSTEM运行OS命令 158
10.6 小结 159
第11章 访问文件系统 161
11.1 用UTL_FILE包访问文件系统 161
11.2 用Java访问文件系统 163
11.3 访问二进制文件 164
11.4 利用操作系统环境变量 168
11.5 小结 169
第12章 访问网络 171
12.1 数据泄露 171
12.1.1 使用UTL_TCP 172
12.1.2 使用UTL_HTTP 173
12.1.3 使用DNS查询和UTL_INADDR 173
12.2 数据加密优先于数据泄露 175
12.3 攻击网络上的其他系统 175
12.4 Java和其他网络 177
12.5 数据库链接 178
12.6 小结 179
附录 默认用户名和密码 181