Saltar al contenido

Recuperar contraseña DB almacenada en mi conexión DBeaver

Presta atención ya que en este post encontrarás la respuesta que buscas.

Solución:

Editar: para DBeaver 6.1.3+

El archivo de credenciales se encuentra en ~/Library/DBeaverData/workspace6/General/.dbeaver/credentials-config.json (estaba en Mac) y sigue una estrategia de cifrado diferente a la de sus predecesores. Consulte la siguiente respuesta para ver cómo descifrar. Funciona a las mil maravillas.

Antes de DBeaver 6.1.3

Siga estos pasos (Mi versión de DBeaver era 3.5.8 y estaba en Mac OsX El Capitan)

  1. Localice el archivo en el que DBeaver almacena los detalles de la conexión. Para mí, fue en este lugar.
    ~/.dbeaver/General/.dbeaver-data-sources.xml. Este archivo está oculto, así que tenlo en cuenta cuando lo busques.
  2. Localice el nodo Definición de fuente de datos interesado en ese archivo.
  3. Descifrar la contraseña: Desafortunadamente, todo está en texto sin formato excepto la contraseña; La contraseña está en algún tipo de forma cifrada. Descifrarlo a texto sin formato con esta herramienta.

O

Preparé un programa Java rápido y sucio copiando el núcleo del método de DBeaver para descifrar la contraseña. Una vez que tenga la contraseña cifrada stringsimplemente ejecute este programa, convertirá la contraseña en texto sin formato y la imprimirá

como ejecutarlo

En la línea número 13, simplemente reemplace OwEKLE4jpQ== con cualquier contraseña cifrada que encuentre en .dbeaver-data-sources.xml archivo para su fuente de datos interesada. Compílelo y ejecútelo, imprimirá la contraseña de texto sin formato.

https://github.com/jaisonpjohn/dbeaver-password-retriever/blob/master/SimpleStringEncrypter.java

Editar

Aparentemente, este es un error “popular”. Entonces, implementé una función AWS lambda con el código mencionado anteriormente. Use esto bajo su propio riesgo, nunca sabrá si estoy registrando su contraseña o no

curl https://lmqm83ysii.execute-api.us-west-2.amazonaws.com/prod/dbeaver-password-decrypter 
-X POST --data "OwEKLE4jpQ=="

Editar 2

Aún mejor, aquí está la interfaz de usuario http://dbeaver-password-decrypter.s3-website-us-west-2.amazonaws.com/. Esto no hace falta decirlo, utilícelo bajo su propio riesgo. ¡No-Https es la menor de tus preocupaciones!

Para DBeaver 6.1.3+, las credenciales se almacenan en un archivo “json” ahora con un cifrado diferente.

Esto pareció hacer el trabajo para mí:

import javax.crypto.*;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.security.*;

public class DecryptDbeaver 

  // from the DBeaver source 8/23/19 https://github.com/dbeaver/dbeaver/blob/57cec8ddfdbbf311261ebd0c7f957fdcd80a085f/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/impl/app/DefaultSecureStorage.java#L31
  private static final byte[] LOCAL_KEY_CACHE = new byte[]  -70, -69, 74, -97, 119, 74, -72, 83, -55, 108, 45, 101, 61, -2, 84, 74 ;

  static String decrypt(byte[] contents) throws InvalidAlgorithmParameterException, InvalidKeyException, IOException, NoSuchPaddingException, NoSuchAlgorithmException 
    try (InputStream byteStream = new ByteArrayInputStream(contents)) 
      byte[] fileIv = new byte[16];
      byteStream.read(fileIv);
      Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
      SecretKey aes = new SecretKeySpec(LOCAL_KEY_CACHE, "AES");
      cipher.init(Cipher.DECRYPT_MODE, aes, new IvParameterSpec(fileIv));
      try (CipherInputStream cipherIn = new CipherInputStream(byteStream, cipher)) 
        return inputStreamToString(cipherIn);
      
    
  

  static String inputStreamToString(java.io.InputStream is) 
    java.util.Scanner s = new java.util.Scanner(is).useDelimiter("\A");
    return s.hasNext() ? s.next() : "";
  

  public static void main(String[] args) throws Exception 
    if (args.length != 1) 
      System.err.println("syntax: param1: full path to your credentials-config.json file");
      System.exit(1);
    
    System.out.println(decrypt(Files.readAllBytes(Paths.get(args[0]))));
  


Pase la ruta de su archivo credentials-config.json en el sistema de archivos local, para mí fue

 compile it
 $ javac DecryptDbeaver.java
 run it [adjusts the paths to target your credentials-config.json file]
 $ java DecryptDbeaver ~/Library/DBeaverData/workspace6/General/.dbeaver/credentials-config.json

Enviará a la consola el usuario+contraseña para las conexiones.

{"postgres-jdbc-some-id":{"#connection":{"user":"your_user_name","password":"your_password"...

Si no reconoce qué contraseña va a qué base de datos según el nombre de usuario, debe vincular los nombres de identificación que también genera inicialmente para el hermano data-sources.json archivo (que ya debería estar presente y sin cifrar y contiene las coordenadas de la base de datos).

Script de descifrado, en Python, para DBeaver versión 6.1.3+, basado en la respuesta de @rogerdpack:

https://gist.github.com/felipou/50b60309f99b70b1e28f6d22da5d8e61

Para versiones anteriores de DBeaver, hay otro script basado en la respuesta de @ so-random-dude:

https://gist.github.com/felipou/f5472ad5f6a414528b44beb102e17fb4

Acuérdate de que te permitimos añadir un enjuiciamiento objetivo si te ayudó.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *