Si le service Harbour ne parvient pas à se connecter après le redémarrage, le mot de passe doit être correct, mais il ne peut pas être connecté. Comme il est déployé sur l'intranet et ne peut pas être récupéré à l'aide de boîtes aux lettres, les mesures sont modifiées directement dans la base de données Harbour. Voici le contenu des notes.
Il ne fait aucun doute que nous ne pouvons entrer que le mysql d'arrière-plan du port pour le modifier, mais les données ont révélé que le mot de passe du mysql dans le port est l'algorithme pbkdf2, la fonction de hachage appelée est Sha1, itérée 4096 fois et la longueur de la clé est de 16 bits de type int. Obtenu, vous ne pouvez donc pas mettre à jour avec un mot de passe en texte brut, vous devez calculer la clé via un algorithme, puis la mise à jour peut réussir.
Voici l'algorithme de calcul de clé, le calcul du texte brut est 123QWEqwe, la valeur de sel est gktqer4zml32472wmht9xeuixvg5pvjd, le nombre d'itérations est 4096, la longueur de clé est 16 bits
L'environnement en cours d'exécution est la version python 2. Remarque: Le nom du module de python 3 a été modifié et une erreur sera signalée lors de l'exécution.
import hmac import hashlib from struct import Struct from operator import xor from itertools import izip, starmap _pack_int = Struct ( ' > I ' ) .pack def pbkdf2_hex (data, salt, iterations = 4096 , keylen = 16 , hashfunc = None): return pbkdf2_bin (données, sel, itérations, keylen, hashfunc) .encode ( ' hex ' ) def pbkdf2_bin (données, sel, itérations = 4096 , keylen = 16 , hashfunc = None): hashfunc = hashfunc ou hashlib.sha1 mac= hmac.new (data, None, hashfunc) def _pseudorandom (x, mac = mac): h = mac.copy () h.update (x) return map (ord, h.digest ()) buf = [] for bloc dans xrange ( 1 , - (- keylen // mac.digest_size) + 1): rv = u = _pseudorandom (salt + _pack_int (block)) pour i dans xrange (itérations - 1 ): u = _pseudorandom ( '' . rejoindre (map (chr, u))) rv= starmap (xor, izip (rv, u)) buf.extend (rv) return '' . join (map (chr, buf)) [: keylen] rv = pbkdf2_hex ( ' 123QWEqwe ' , ' gktqer4zml32472wmht9xeuixvg5pvjd ' , 4096 , 16 ) print (rv)
Exécutez le fichier python directement après avoir modifié le mot de passe en texte clair et la valeur salt
# python xx.py
500026b9f02e84d1f41e7546b9b2d524
Commencez à modifier le mot de passe du port maintenant
docker exec -it b07b3206fea5 / bin / bash
psql (9.6.14)
Tapez "help" pour obtenir de l'aide.
postgres = # help
Vous utilisez psql, l'interface de ligne de commande de PostgreSQL.
Tapez: \ copyright pour les conditions de distribution
\ h pour obtenir de l'aide sur les commandes SQL
\? pour obtenir de l'aide sur les commandes psql
\ g ou terminer par un point-virgule pour exécuter la requête
\ q pour quitter
postgres = # psql -U postgres -d postgres -h 127.0.0.1 -p 5432 # Entrez le client psttsql
postgres = # \ c registre # 进入 registre 数据库
Vous êtes maintenant connecté à la base de données "registre" en tant qu'utilisateur "postgres".
postgres = # select * from harbour_user; #Query all users
# Update the user password password will be the encrypted password, salt is the salt value, which is displayed
upon the select query result postgres = # update Harbor_user set password = '500026b9f02e84d1f41e7546b9b2d524', salt = 'oafrcwi1rh83bem3cnfldltaw4cf9pqm' où username = 'admin';
postgres = # \ q #exit base de données postsql