oracle 10g的password 的hash值是由用户名和密码组成的hash值,这就意味着,同一版本的数据库在所生成的hash值是一样的。(这个可能是一个安全漏洞)
1、测试环境中用户sys原先的密码是system,对应的password的hash值是
75800913E1B66343, 修改后的密码test,对应的password的hash值是
D3CE9AB10E42F19D。
SQL>select username, password from dba_users
where username='SYS';
2、进入BBED,查找对应的“75800913E1B66343”,10g密码存放在block_id 90的位置。
BBED>set blocksize 8192
BBED>set dba 2,90
BBED> find /c 75800913E1B66343 top
File: /home/oracle/app/oradata/orcl/system02.dbf (2)
Block: 90 Offsets: 6646 to 7157 Dba:0x0080005a
------------------------------------------------------------------------
....................................
.....................................
BBED>dump /v dba 2, 90 offset 6646 count 32
file: /home/oracle/app/oradata/orcl/system02.dbf (2)
Block: 90 Offsets: 6646 to 6677 Dba:0x0080005a
-------------------------------------------------------
37353830 30393133 45314236 36333433 l 75800913E1B66343
018002c1 0407786d 031a1208 3607786d l ......xm....6.xm
我们看到在file_id=2, block#=90, ffset=6646的后面16字节中与我们要查
的password hash值匹配。
3、将所查到的hash值修改成 D3CE9AB10E42F19D,其对应的密码是test
BBED>set mode edit
BBED>modify /c D3CE9AB10E42F19D dba 2, 90 offset 6646
4、检查是否修改正确
BBED>dump /v dba 2, 90 offset 6646 count 32
5、提交,并测试
BBED> sum dba 2,90 apply
BBED>exit
$sqlplus sys/test as sysdba
更新:
在oracle 11g中已经将dba_users.password的值不显示,需要查找user$才能获得具体的值。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/354732/viewspace-604833/
,如需转载,请注明出处,否则将追究法律责任。