大部分的服务器/客户端系统的结构可以这样描述:
客户端 <---(1)---> 系统TCP/IP模块 <---(2)---> 网络 <----> 系统的TCP/IP模块 <----> 服务端
对于这些系统,
|
|
|||
但对于 Oracle 系统来说,用户名和密码在网络上传递之前,是经过加密的,而且加密的算法是不可逆的,即使使用嗅探器探听到数据包,开始无法把数据库的连接密码恢复出来,Oracle 系统的结构可以如下描述:
客户端应用程序 <--(1)--> Oracle客户端软件 <---(2)---> 系统TCP/IP模块 <---(3)---> 网络 <--> 系统的TCP/IP模块 <---> Oracle数据库
对于这一类系统,所有在(2)或者(3)处监听到的登录数据包都是已经经过加密的,但是,考虑一下我们编写 Oracle 数据库应用程序的时候,无论是通过 ODBC 还是 Pro C,或者其他的 BDE 环境等,都是将数据库连接的用户名和密码用明文的方式传递给 Oracle 客户端驱动程序的,所以在(1)位置的数据流肯定明文的,密码是在 Oracle 客户端软件中被加密后才经过(2)、(3)等步骤发送出去,如果在(1)的位置进行拦截,就可能拦截到密码。
考虑到步骤(1)发生在应用程序到 Oracle 系统的调用中,也就是发生在 API 调用的层次,所以只要找到密码加密模块的入口,在对相应的 API 进行 Hook,就能截获到密码了。
有人可能存在一个疑问:使用 Sniffer 可以监听到网络上其他计算机的连接数据包,而在 API 层次上进行拦截是针对本机的,但要是自己能够在本机上连接,就表示已经知道密码了,再去截获不是多此一举吗?
非也!
实际上大部分的 Oracle 应用程序都包括一个用户开发的客户端,这个客户端可能是用 C、PowerBuilder 和其他语言开发的,这些软件提供一个界面提示用户输入用户名和密码登录系统,但是这个用户名和密码并不是数据库的连接用户名和密码,而仅仅是一个类似于 users 表中的一条记录而已,而程序内部内置的数据库连接帐号才是我们的目标,一般来说,客户端应用程序是这样工作的:
1. 使用一个内置的数据库连接帐号连接到数据库。
2. 弹出一个对话框提示用户输入用户名 xxx 和密码 yyy
3. 使用类似于 select * from users where username='xxx' and password='yyy' 一类的 SQL 语句查询用户是否有权登录系统。
我们的目标就是步骤1中的连接帐号,这个帐号存在于客户端软件中,虽然可能已经被静态加密(也就是说用16进制软件去搜寻可执行文件时并不能被找到),但它运行后需要连接数据库的时候必然会被解密并用明文传递到 Oracle 客户端软件中。
方法
好了,现在来看看具体的实现方法。
1. 相关的调用
第一步当然要知道在哪里下手,经过了一番跟踪以后(这里省去跟踪的步骤 n 步,大家可以尝试自己跟踪一下),就可以发现用户名和密码是在 OraCore8.dll 模块中的 lncupw 函数中被加密的,而且这个函数的调用方法如下:
|
函数的入口参数包括明文的数据库连接用户名和密码,以及他们的长度,运行的结果是在第一个参数Output指定的缓冲区中返回加密后的数据,以后这个加密后的数据会被发送到服务器端进行认证。
更多内容请看Cisco密码恢复专题 Linux数据库宝典 Oracle 10g基础应用专题,或进入讨论组讨论。
·Cisco密码恢复专题 (2681篇文章)
·数据库专栏 (4477篇文章)
·数据库处理专题 (7248篇文章)
·城域网专题 (6687篇文章)
·数据库安全技术专题 (11040篇文章)
·数据库安装与卸载 (8959篇文章)
·Oracle 10g基础应用 (4060篇文章)
·Linux数据库宝典 (11231篇文章)
·数据库相关文章 (4477篇文章)
·VMware下RedHat安装Oracle 9i RAC全攻略 (5996次浏览)
·简单的Oracle存储过程的创建方法(菜鸟级) (5135次浏览)
·Oracle架构的基础知识(入门级) (4974次浏览)
·ORACLE中的各种数据类型详细的介绍 (4751次浏览)
·ORACLE备份一(ORACLE BACKUP STRATEGY) (1893次浏览)
·双机热备Oracle数据库服务器操作实战 (1792次浏览)
·Oracle的初学者入门心得 (995次浏览)
·Oracle数据库数据操作和控制语言详解 (962次浏览)
·教你如何截获Oracle数据库连接密码 (698次浏览)
·VMware下RedHat安装Oracle 9i RAC全攻略 (5996次浏览)
·简单的Oracle存储过程的创建方法(菜鸟级) (5135次浏览)
·Oracle架构的基础知识(入门级) (4974次浏览)
·ORACLE中的各种数据类型详细的介绍 (4751次浏览)
·ORACLE备份一(ORACLE BACKUP STRATEGY) (1893次浏览)
·双机热备Oracle数据库服务器操作实战 (1792次浏览)
·Oracle的初学者入门心得 (995次浏览)
·Oracle数据库数据操作和控制语言详解 (962次浏览)
·教你如何截获Oracle数据库连接密码 (698次浏览)
·VMware下RedHat安装Oracle 9i RAC全攻略 (5996次浏览)
·简单的Oracle存储过程的创建方法(菜鸟级) (5135次浏览)
·Oracle架构的基础知识(入门级) (4974次浏览)
·ORACLE中的各种数据类型详细的介绍 (4751次浏览)
·ORACLE备份一(ORACLE BACKUP STRATEGY) (1893次浏览)
·双机热备Oracle数据库服务器操作实战 (1792次浏览)
·Oracle的初学者入门心得 (995次浏览)
·Oracle数据库数据操作和控制语言详解 (962次浏览)
·教你如何截获Oracle数据库连接密码 (698次浏览)
·教你如何截获Oracle数据库连接密码 07-20
·Oracle的初学者入门心得 07-19
·Oracle数据库数据操作和控制语言详解 07-19
·双机热备Oracle数据库服务器操作实战 07-18
·ORACLE备份一(ORACLE BACKUP STRATEGY) 07-18
·ORACLE中的各种数据类型详细的介绍 07-17
·Oracle架构的基础知识(入门级) 07-17
·VMware下RedHat安装Oracle 9i RAC全攻略 07-16
·简单的Oracle存储过程的创建方法(菜鸟级) 07-16




