- 1、本文档共13页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
如何截获 Oracle 数据库连接密码
概述
Oracle 系统是应用最广泛的服务器 / 客户端类型的数据库系统,其密码验证等安全措施也做得比较严格,
但是通过本文所描述的方法,我们还是有机会从应用程序中截获数据库连接的用户名和密码。
原理
大部分的服务器 / 客户端系统的结构可以这样描述:
客户端 (1) 系统 TCP/IP 模块 (2) 网络 系统的 TCP/IP 模块 服务端
对于这些系统,一般的安全问题出在由 (2)所示的地方,比如说当使用 POP3 协议收取邮件,或者用
Telnet 登录到远程主机的时候, 其登录密码都是未经加密的, 只要在网络上安装一个嗅探器 (Sniffer) 来监
听数据包,就可以很容易地截获用户名和密码。
但对于 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 函数中被加密的,而且这个函
数的调用方
文档评论(0)