解密JBoss和Weblogic数据源连接字符串和控制台密码
0x00 背景现在越来越多的站喜欢用java语言的框架做web应用了，这里应用有很多大型站点经常采用jboss或者weblogic做web服务器。出于安全原因，他们都提供把数据源连接密码以及web服务器后台密码加密的功能，jboss用的是blowfish，weblogic旧版的加密算法一般为3DES，新版的则都是AES。这几种加密算法都是可逆的，因为在web服务器连接到数据库的时候还是要把密码解密成明文之后发过去或者和challenge运算的，所以我们有了两个突破口，第一个就是，解密后的明文密码必然保留在内存中，如果把web服务器的内存空间dump下来分析是肯定可以找到明文密码的，这个方法在前段时间hip发的memory forensic文章里有涉及到。第二个方法就是，调用服务器程序自身的解密函数，让它把明文echo出来。0x01 JBoss解密jboss的数据库连接密码一般存在%JBOSS_HOME%\server\%appname%\deploy下面的各种xml里面，比如oracle的是oracle-ds.xml,mysql是mysql-ds.xml…… 在没有加密的情况下，密码是这么保存的： OracleDS //jndi名字 false jdbc:oracle:thin:@localhost:1521:orcl //URL地址 oracle.jdbc.driver.OracleDriver //驱动 root //用户名 123456 //密码在配置完密码加密后，这个文件里要么没有username和password，要么被comment掉了。下面多了个EncryptDBPassword加密后的密码存在jboss目录的conf/login-config.xml文件里：<application-policyname="EncryptDBPassword"> <login-modulecode="org.jboss.resource.security.SecureIdentityLoginModule"flag="required"><module-optionname="username">admin</module-option><module-optionname="password">5dfc52b51bd35553df8592078de921bc</module-option><module-optionname="managedConnectionFactoryName">jboss.jca:name=PostgresDS,service=LocalTxCM</module-option></login-module> </application-policy>5dfc52b51bd35553df8592078de921bc就是加密后的密文了，有的时候前面还有个符号，也是密文的一部分。jboss用来加密的key是明文硬编码在jboss源码里的，key是jaas is the way解密过程：[...]