检索 Google Chrome 密码

信息安全 密码 数据库
2021-08-30 05:40:08

在 macOS 上检索 Google Chrome 密码时,我注意到所有密码都是相同的(类似于以下内容)Vi??M!4NNn:. 我如何通过以下方式检索它们(作为非管理员):

cd "users/user/library/application support/google/chrome/default"
sqlite3 "Login Data"
sqlite3> .output chrome-passwords.txt
sqlite3> select origin_url, username_values, password_value from logins;

即使我以 root 身份运行并提取密码,我也会得到同样的结果,这是什么原因造成的,我该如何正确检索它们?

1个回答

好吧,我想通了,并说我会发布答案。

密码显示出来的原因是因为它们是使用pbkdf2存储在特定钥匙串位置(通常名称为“Chrome”)中的密钥加密的。要找到此密钥,您可以security find-generic-password -wa 'Chrome'以管理员身份执行命令,它应该为您提取密钥。

一旦你有了密钥,为了解密你需要的;

  • 生成 IV (python -c 'import sys;sys.stdout.write("20" * 16)'
  • 拿盐(110% 的几率saltysalt
  • 使用pbkdf2_hmac抓取前 16 个字符加密找到的密钥并将加密的密钥 ( python -c 'import binascii;import hashlib;key=hashlib.pbkdf2_hmac("sha1","<KEY>",b"saltysalt",1003)[:16];print binascii.hexlify(key))
  • Base64 对加密密码进行编码,去掉前三个字符(python -c 'import base64;print base64.b64encode("ENCRYPTED_PASSWORD")[3:]'
  • 使用以下命令解密加密:openssl enc -base64 -d -aes-128-cbc -v <IV> '<HEX KEY>' -K '<BASE64 ENCODED PASSWORD>'.

幸运的是,我创建了一个简单的 python 函数来返回相同的内容:

import base64
import binascii
import subprocess
from hashlib import pbkdf2_hmac


def decrypt(encrypted, key):
    iv = ''.join(('20', ) * 16)
    key = pbkdf2_hmac('sha1', key, b'saltysalt', 1003)[:16]

    hex_key = binascii.hexlify(key)
    hex_enc_password = base64.b64encode(encrypted[3:])
    try:
        decrypted = subprocess.check_output(
            "openssl enc -base64 -d "
            "-aes-128-cbc -iv '{}' -K {} <<< "
            "{} 2>/dev/null".format(iv, hex_key, hex_enc_password),
            shell=True)
    except subprocess.CalledProcessError:
        decrypted = "n/a"

    return decrypted

请注意,为了成功运行,您必须拥有运行它的计算机的管理凭据。