如何破解PL/SQL本地保存的密码

背景:最近公司生产环境通过堡垒机对数据库进行接管。通过堡垒机配置PL/SQL工具,启动后会自动进行用户名密码填充。这样数据库密码就不需要暴露给运维人员,而且可以通过堡垒机进行日志审计。·
为了验证堡垒机是通过认证模式进行连接还是通过填充密码的模式进行连接,先将PL/SQL的密码保存打开,然后通过堡垒机进行连接。连接成功后关闭PL/SQL并退出堡垒机。下次直接通过选择记住的用户进行登录,发现可以直接登录成功。说明,我司使用的堡垒机只是对用户密码,进行填充,并非采用认证转发的模式。

如何设置PL/SQL密码保存?

打开PL/SQL,依次进入目录:工具->首选项->登录历史;

保存密码设置界面

勾选存储历史及带密码存储,点击已确认,退出PL/SQL重新登录。

登录界面

成功登录后会自动保存密码,下次登录时可以点击用户名右边...按钮,通过下拉的用户列表进行选择,选择后PL/SQL会自动登录,不需要再输入密码。PL/SQL默认存储登录信息,不存储密码。

如何解密PL/SQL保存的密码?

数据

要想解密PL/SQL保存的密码,首先,我们需要知道密码存储位置。PL/SQL将登录信息及密码存储在user.prefs下。该文件一般存储在如下位置。其中<username>是你的用户名。

C:\Users<username>\AppData\Roaming\PLSQL Developer\Preferences<username>\
C:\Program Files\PLSQL Developer\Preferences<username>\
C:\Program Files (x86)\PLSQL Developer\Preferences<username>\

本人使用绿色版的PLSQL,存储位置为:C:\Users\Administrator\AppData\Roaming\PLSQL Developer\Preferences\Administrator 打开user.prefs文件,其中标题[LogonHistory]下面存在多行数字字符串,每一行即为一个登录信息,这些信息是加密的,其明文格式如下:

<username>/<password>@<server>

算法

加密算法非常简单,主要由位移和xor组成 。生成的密文看起来像这样:

273645624572423045763066456443024120413041724566408044424900419043284194407643904160

第一组四位数(2736)是密钥值-他是有系统运行时随机生成的四位数(大于2000,小于3000),后面每一位字符根据下面算法进行运算得到4位数字,直至加密完毕。

下面是JAVA实现的加密代码:

public static void cryptPassword() {
        int key = 2736;
        String plaintext = "user/password@server";
        String result = Integer.toString(key);
        for (int i = 0; i < plaintext.length(); i++) {
            int mask = Integer.valueOf(plaintext.charAt(i)) << 4;
            int n = (mask ^ (key + (i + 1) * 10)) + 1000;
            result += Integer.toString(n);
        }
        System.out.println(result);
    }

user/password@server加密结果为:

273645624572423045763066456443024120413041724566408044424900419043284194407643904160

下面是JAVA实现的解密代码:

public static void decryptPassword(){
        String cryptText = "273645624572423045763066456443024120413041724566408044424900419043284194407643904160";
        String plainText = "";
        ArrayList<Integer> values = new ArrayList<Integer>();
        for (int i = 0; i < cryptText.length(); i+= 4){
            values.add(Integer.parseInt((cryptText.substring(i, i + 4))));
        }
        int key = values.get(0);
        values.remove(0);
        for (int i = 0; i < values.size(); i++) {
            int val = values.get(i) - 1000;
            int mask = key + (10 * (i + 1));
            int res = (val ^ mask) >> 4;
            plainText += Character.toString((char)(res));
        }
        System.out.println("plainText:"+plainText);
    }

注意:生产环境切记不要开启保存密码的选项,否则本地环境一旦被人获取,生产密码将直接暴露,窃取者甚至不需要进行解密,直接将密文拷贝至PLSQL对应位置即可直接登录。
通过上面的破解过程,说明这种模式的数据库接管没有实际意义,并不能规避密码在内部泄露的问题。

参考资料:https://adamcaudill.com/2016/02/02/plsql-developer-nonexistent-encryption/

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,711评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,932评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,770评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,799评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,697评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,069评论 1 276
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,535评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,200评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,353评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,290评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,331评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,020评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,610评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,694评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,927评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,330评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,904评论 2 341