Weblogic es una plataforma creada por Oracle en la que se integran varios productos de la misma familia, que tienen por objetivo ayudar a la gestión de procesos de las empresas que lo utilizan. Desde el punto de vista más técnico podemos decir que se trata de una plataforma basada en java EE y compuesta por servidores de aplicaciones, middlewares, servidores web, etc. que permiten gestionar la configuración de cada uno de ellos de una forma totalmente integrada. Para acceder a esta plataforma se requiere un usuario, el cual se crea durante la fase de instalación del producto. Este usuario permite configurar todos los componentes y complementos necesarios para cada caso.
Durante la instalación en modo desarrollo, es decir, previo a paso a producción, el asistente de configuración genera un archivo de identidad de arranque (boot.properties) necesario para la administración inicial del servidor. La cuestión es que este archivo contiene el nombre de usuario y la contraseña del usuario administrador, aunque de forma cifrada.
Una vez establecidos el usuario y la contraseña, se puede ver cómo quedan guardados:
En este fichero, a simple vista, se puede observar que se almacenan las credenciales de forma segura. A pesar de ello, debemos saber que si un usuario malintencionado o intruso accediera al sistema donde reside, podría obtener los credenciales en claro.
Los pasos que se tendrían que realizar desde el propio sistema son los siguientes:
1.- Acceder al directorio [FMW_HOME]/wlserver_XX.Y/server/bin/
2.- Ejecutar el script setWLSEnv.sh para configurar las variables del entorno.
3.- Descargar el script en python (jython) decrypt.py y ejecutarlos de la siguiente manera:
~$ java weblogic.WLST decrypt.py
Ejemplos:
Obtener el password:
~$ java weblogic.WLST decrypt.py /opt/oracle/Middleware/user_projects/ domains/base_domain {AES}TV0pZXXXXXXXXXXXXXXXXXXXXXXXXXXXXXFjI6/zM\= Initializing WebLogic Scripting Tool (WLST) ... Welcome to WebLogic Server Administration Scripting Shell Type help() for help on available commands RESULT: micontrasenyacifrada
Obtener el usuario:
~$ java weblogic.WLST decrypt.py /opt/oracle/Middleware/user_projects/ domains/base_domain {AES}MhcB2XXXXXXXXXXXXXXXXXXXXXXXXXXXXXFGHi5/jI\= Initializing WebLogic Scripting Tool (WLST) ... Welcome to WebLogic Server Administration Scripting Shell Type help() for help on available commands RESULT: miusuariocifrado
En este caso, es importante eliminar el fichero una vez hayamos terminado de parametrizar el servidor en modo desarrollo. De esta forma nos evitaremos que caiga en manos de quien no debe.
decrypt.py
#============================================================================= # Jython Script for displaying de-crypted WebLogic boot.properties files # # To run, change to a WebLogic domain directory and execute: # # # Add parameter '-?' to the end of the command line to display more help #============================================================================= import os from java.io import FileInputStream from java.util import Properties from weblogic.management import EncryptionHelper from weblogic.security.service import SecurityManager from weblogic.security.subject import SubjectManager #============================================================================= # Main #============================================================================= def main(): #for arg in sys.argv: # if arg.count(arg.strip()): # printUsageAndExit() saltFilePath=os.path.join('security', 'SerializedSystemIni.dat') if not os.path.exists(saltFilePath): print "Error: The script must be run from a WebLogic domain direcotry or a directory containing '%s'" % saltFilePath printUsageAndExit() try: open(saltFilePath, 'r').close() except IOError: print "Error: The file '%s' is not readable - check file permissions" % saltFilePath printUsageAndExit() processBootFiles(os.curdir, descryptPropsFile) #============================================================================= # Decrypt (Note, to encrypt just use: EncryptionHelper.encrypt(text)) #============================================================================= def decrypt(text): getKernelIdMethod = SecurityManager.getDeclaredMethod('getKernelIdentity', None) getKernelIdMethod.accessible=1 return EncryptionHelper.decrypt(text, getKernelIdMethod.invoke(SecurityManager, None)) #============================================================================= # Process Boot Files #============================================================================= def processBootFiles(rootPath, processFunc): if not os.path.isdir(rootPath): return fileNames = os.listdir(rootPath) for fileName in fileNames: path = os.path.join(rootPath, fileName) if os.path.isfile(path): if fileName == 'boot.properties': processFunc(path) elif os.path.isdir(path): processBootFiles(path, processFunc) processFunc("./boot.properties") #============================================================================= # Decrypt Props File #============================================================================= def descryptPropsFile(filepath): print print '----- Decrypting %s -----' % filepath try: properties = Properties() file = FileInputStream(filepath) properties.load(file) file.close() for entry in properties.entrySet(): print '%s = %s' % (entry.key.strip(), java.lang.String(decrypt(entry.value.strip()))) except IOError: print "Error: Unable to read file '%s' - check file permissions" % filepath print #============================================================================= # Print Usage And Exit #============================================================================= def printUsageAndExit(): print print 'wlsdecrypt.py' print '-------------' print print "Jython Script for displaying de-crypted boot.properties files from a WebLogic domain. Before running the script, change directory to the directory that contains a WebLogic domain (or a directory containing 'security/ SerializedSystemIni.dat' and one or more associated 'boot.properties' files). Run this script via WLST or directly via the Java/Jython launch command (the latter option requires both 'jython.jar' and 'weblogic.jar' to be added to the classpath)." print print 'Example Usage:' print print '> /opt/weblogic/wlsadm/weblogic92/common/bin/wlst.sh ~/home/chordadm/ wlsdecrypt.py (Unix)' print print '> C:\\bea\\weblogic92\\common\\bin wlst.cmd C: myscripts wlsdecrypt.py (Windows)' print exit() # # Invoke main and end # main()
Gracias por la información. A mi, personalmente, todo lo que tenga que ver con la plataforma Java me da alergia por los problemas de seguridad asociados ^^