要连接远程 Oracle 数据库,需要掌握哪些关键信息?通常包括 SID、用户名、密码,以及最重要的 IP 地址。如果管理员修改了 SID,可以尝试使用 sidguess 工具进行探测——该工具运行速度极快,但能否成功命中,取决于字典的强度。效果参见图 1。
500)this.width=500" title="点击这里用新窗口浏览图片" />
图 1
Oracle 不同版本中藏有大量默认账号与密码,但许多管理员会修改默认密码,此时只能采用暴力破解方式。若成功破解账号,能获取 DBA 权限自然最佳;若无法直接获得,也可利用 Oracle 的某些漏洞将权限提升至 DBA。进入数据库后,常见手段是抓取其他用户的密码哈希值,并在本地使用彩虹表进行破解。如果同一网段内还有其他 Oracle 数据库,还可以通过抓包方式等待他人登录,截获认证信息后再进行破解——这样能进一步扩大战果。下面将介绍这三种破解方法及对应的工具。
有关 Oracle 密码的基础知识
1. 标准 Oracle 密码可由英文字母、数字、#、下划线 (_)、美元符号 ($) 构成,最长 30 个字符;密码不能以 $、#、_ 或任何数字开头;同时不能包含 SELECT、DELETE、CREATE 等 Oracle/SQL 关键字。
2. Oracle 的弱算法加密机制:相同的用户名和密码在两台不同的 Oracle 数据库上会产生相同的哈希值。这些哈希值存放在 SYS.USER$ 表中,可通过 DBA_USERS 等视图来访问。
3. Oracle 默认配置下,每个账号连续 10 次登录失败后会被锁定。但 SYS 账户是个例外——它拥有最高权限,可执行所有操作,包括启动/关闭数据库。即使 SYS 被锁定,仍能正常访问数据库。
一、远程暴力破解
前面第 3 点提到,SYS 账户永远有效,因此远程破解 Oracle 的最佳目标就是 SYS。Oracle 10g 以前的版本在安装时不会提示修改 SYS 默认密码,10g 虽然会提示,但也不会检查密码强度。如图 2 所示。
500)this.width=500" title="点击这里用新窗口浏览图片" />
图 2
这里可以使用 Orabrute 工具进行远程破解。使用前需先安装 Sqlplus,其原理很简单:不断调用 Sqlplus 尝试登录,账号固定为 SYS,密码从 password.txt 中逐条读取。一旦登录成功,它会自动调用 selectpassword.sql 脚本,将 SYS.USER$ 表中其他用户的哈希值抓取出来,然后退出。注意一个小细节:第二次运行 Orabrute 时,需要将同目录下上次生成的 thepasswordsarehere.txt 和 output.txt 删除或移走,否则会报错。
Orabrute 的使用方法:
orabrute
效果见图 3、图 4。
500)this.width=500" title="点击这里用新窗口浏览图片" />
图 3
500)this.width=500" title="点击这里用新窗口浏览图片" />
图 4
Orabrute 运行速度较慢,可以换个思路:如果目标数据库是 Oracle 10g,它默认会开启一个通过 8080 端口远程管理数据库的 Web 接口(图 5)。
500)this.width=500" title="点击这里用新窗口浏览图片" />
图 5
访问 https://ip:8080/oradb/public/global_name 会弹出 HTTP 基本认证,这种认证方式很多工具都能快速破解。著名的 Hydra 当然可以,不过这里推荐图形界面的 wwwhack——设置用户名为 SYS,选择字典,即可开始破解。速度比 Orabrute 快得多,效果见图 6。
500)this.width=500" title="点击这里用新窗口浏览图片" />
图 6
