渗透技巧:导出Chrome浏览器中保存的密码

2018 年 1 月 28 日 计算机与网络安全 3gstudent

信息安全公益宣传,信息安全知识启蒙。

加微信群回复公众号:微信群QQ群16004488

加微信群或QQ群可免费索取:学习教程

教程列表见微信公众号底部菜单




本文将要针对Chrome浏览器,介绍具体的导出原理和利用方法,解决一个实际问题: 如何导出另一系统下Chrome浏览器中保存的密码?


一、Chrome浏览器保存密码的方式


正常用户在访问网站时,可选择使用Chrome浏览器保存登录的用户密码,用于下次登录的时候Chrome自动填写登录密码,如下图:

在Chrome中可以查看保存的登录密码(需要提供用户口令),如下图:

Chrome中保存的密码先被二次加密,然后被保存在SQLite数据库文件中,位置如下:

%LocalAppData%\Google\Chrome\User Data\Default\Login Data

实际测试:

测试系统: Win7x86

Chrome版本: 63.0.3239.132

定位SQLite数据库文件,位于C:\Users\a\AppData\Local\Google\Chrome\User Data\Default\Login Data

使用工具读取数据库文件,测试工具: SQLiteStudio

下载地址:

https://sqlitestudio.pl/index.rvt

注:

SQLiteStudio开源,特点是支持查看十六进制数据(SQLiteSpy不支持查看十六进制数据)

成功读取数据库文件保存的信息,但password段无法显示,如下图:

选择Form view,查看十六进制格式,获得二次加密后的用户密码,如下图:

注:

如果Chrome正在运行,无法使用SQLiteStudio打开数据库文件Login Data,可将该文件复制后再打开。


二、导出Chrome浏览器中保存的密码


首先,编写程序实现读取SQLite数据库文件,这里选择使用python实现

开源代码很多,所以这里只给出一个示例:

from os import getenv

import sqlite3

import binascii

conn = sqlite3.connect(getenv("APPDATA") + "\..\Local\Google\Chrome\User Data\Default\Login Data")

cursor = conn.cursor()

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

for result in cursor.fetchall():

print (binascii.b2a_hex(result[2]))

获得二次加密的用户密码,如下图:

参考Chromium开源代码,找到Chrome做二次加密的方法: 通过Windows API CryptProtectData()实现

参考加密代码:

https://github.com/scheib/chromium/blob/eb7e2441dd8878f733e43799ea77c2bab66816d3/chrome/browser/password_manager/password_store_win_unittest.cc#L107

CryptProtectData()的说明可参考:

https://msdn.microsoft.com/en-us/library/windows/desktop/aa380261(v=vs.85).aspx

获得关键信息:

(1)对应解密函数为CryptUnprotectData

参考地址:

https://msdn.microsoft.com/en-us/library/windows/desktop/aa380882(v=vs.85).aspx

(2)只有与加密数据的用户具有相同登录凭据的用户才能解密数据

也就是说,只能在当前用户的凭据下解密数据,解密的开源代码也有很多,这里给出一个示例:

from os import getenv

import sqlite3

import win32crypt

import binascii

conn = sqlite3.connect(getenv("APPDATA") + "\..\Local\Google\Chrome\User Data\Default\Login Data")

cursor = conn.cursor()

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

for result in cursor.fetchall():

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

print password

注:

调用win32crypt.CryptUnprotectData需要安装pywin32

下载地址:

http://sourceforge.net/projects/pywin32/files/pywin32/Build%20219/pywin32-219.win32-py2.7.exe

执行后,还原用户密码,如下图:

注:

如果Chrome正在运行,无法查询数据库文件Login Data,显示sqlite3.OperationalError: database is locked

综上,在实际导出的过程中,如果Chrome正在运行,需要先复制数据库文件,再尝试解密。


三、如何导出另一系统下Chrome浏览器中保存的密码


参照CryptProtectData()的说明,地址如下:

https://msdn.microsoft.com/en-us/library/windows/desktop/aa380261(v=vs.85).aspx

“Usually, the only user who can decrypt the data is a user with the 

same logon credentials as the user who encrypted the data.In addition, 

the encryption and decryption must be done on the same computer. “

是否可以断定,无法在另一系统下导出Chrome浏览器中保存的密码呢?

答案是否定的!

Chrome密码还原工具chromepass提供了一个特别的功能: Reading ChromePass passwords from external drive

chromepass下载地址:

http://www.nirsoft.net/utils/chromepass.html

说明如下:

“you can also read the passwords stored by Chrome Web browser from an 

external profile in your current operating system or from another 

external drive”

也就是说,使用chromepass能够导出当前系统下另一用户的Chrome密码

操作界面如下图:

既然如此,如果获得了另一系统下的相关配置文件,能否导出Chrome浏览器中保存的密码呢?

当然可以,解密需要获得三部分内容:

1.加密密钥,位于%appdata%\Microsoft\Protect下对应sid文件夹下的文件

2.数据库文件Login Data

3.用户明文的密码,用于解密加密密钥

由于chromepass程序的设计问题,以上文件需要组成特定格式,子目录格式如下:

1.\AppData\Local\Google\Chrome\User Data\Default\Login Data

2.\AppData\Roaming\Microsoft\Protect{sid}}\下保存key文件

注:

{sid}必须同原系统的对应

eg.

\AppData\Local\Google\Chrome\User Data\Default\Login Data

\AppData\Roaming\Microsoft\Protect\S-1-5-21-3453529135-4164765056-1075703908-1001\329c4147-0011-4ad6-829d-e32dcbd1bbd7

如下图:

使用chromepass选择该目录,填入用户明文密码,如下图

成功解密,如下图:

四、开源工具


解密当前系统下Chrome浏览器中保存的密码,可供参考的工具:

1.命令行工具Chrome Password Dump,下载地址:

http://securityxploded.com/chrome-password-dump.php

2.powershell实现的工具:

https://raw.githubusercontent.com/EmpireProject/Empire/master/data/module_source/collection/Get-ChromeDump.ps1

3.python实现代码,可供参考的开源代码:

from os import getenv

import sqlite3

import win32crypt

import binascii

conn = sqlite3.connect(getenv("APPDATA") + "\..\Local\Google\Chrome\User Data\Default\Login Data")

cursor = conn.cursor()

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

for result in cursor.fetchall():

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

if password:

print 'Site: ' + result[0]

print 'Username: ' + result[1]

print 'Password: ' + password

else:

print "no password found"

登录查看更多
0

相关内容

Google Chrome,又称谷歌浏览器,是由谷歌(Google)公司开发的网页浏览器。基于开放源码的Chromium项目。 google.com/chrome/ chromium.org/...
【2020新书】实战R语言4,323页pdf
专知会员服务
100+阅读 · 2020年7月1日
【实用书】学习用Python编写代码进行数据分析,103页pdf
专知会员服务
192+阅读 · 2020年6月29日
还在修改博士论文?这份《博士论文写作技巧》为你指南
【实用书】Python爬虫Web抓取数据,第二版,306页pdf
专知会员服务
116+阅读 · 2020年5月10日
【经典书】Python计算机视觉编程,中文版,363页pdf
专知会员服务
139+阅读 · 2020年2月16日
【电子书】Flutter实战305页PDF免费下载
专知会员服务
22+阅读 · 2019年11月7日
后渗透利用msf关闭防火墙
黑白之道
8+阅读 · 2019年8月24日
msf实现linux shell反弹
黑白之道
49+阅读 · 2019年8月16日
Kali Linux 渗透测试:密码攻击
计算机与网络安全
16+阅读 · 2019年5月13日
PHP使用Redis实现订阅发布与批量发送短信
安全优佳
7+阅读 · 2019年5月5日
I2P - 适用于黑客的Android应用程序
黑白之道
30+阅读 · 2019年3月6日
去哪儿网开源DNS管理系统OpenDnsdb
运维帮
21+阅读 · 2019年1月22日
如何用GitLab本地私有化部署代码库?
Python程序员
9+阅读 · 2018年12月29日
Deep Learning for Deepfakes Creation and Detection
Arxiv
6+阅读 · 2019年9月25日
Arxiv
6+阅读 · 2018年7月29日
Arxiv
3+阅读 · 2018年4月5日
Arxiv
6+阅读 · 2018年1月14日
Arxiv
11+阅读 · 2018年1月11日
Arxiv
3+阅读 · 2012年11月20日
VIP会员
相关VIP内容
【2020新书】实战R语言4,323页pdf
专知会员服务
100+阅读 · 2020年7月1日
【实用书】学习用Python编写代码进行数据分析,103页pdf
专知会员服务
192+阅读 · 2020年6月29日
还在修改博士论文?这份《博士论文写作技巧》为你指南
【实用书】Python爬虫Web抓取数据,第二版,306页pdf
专知会员服务
116+阅读 · 2020年5月10日
【经典书】Python计算机视觉编程,中文版,363页pdf
专知会员服务
139+阅读 · 2020年2月16日
【电子书】Flutter实战305页PDF免费下载
专知会员服务
22+阅读 · 2019年11月7日
相关资讯
后渗透利用msf关闭防火墙
黑白之道
8+阅读 · 2019年8月24日
msf实现linux shell反弹
黑白之道
49+阅读 · 2019年8月16日
Kali Linux 渗透测试:密码攻击
计算机与网络安全
16+阅读 · 2019年5月13日
PHP使用Redis实现订阅发布与批量发送短信
安全优佳
7+阅读 · 2019年5月5日
I2P - 适用于黑客的Android应用程序
黑白之道
30+阅读 · 2019年3月6日
去哪儿网开源DNS管理系统OpenDnsdb
运维帮
21+阅读 · 2019年1月22日
如何用GitLab本地私有化部署代码库?
Python程序员
9+阅读 · 2018年12月29日
相关论文
Deep Learning for Deepfakes Creation and Detection
Arxiv
6+阅读 · 2019年9月25日
Arxiv
6+阅读 · 2018年7月29日
Arxiv
3+阅读 · 2018年4月5日
Arxiv
6+阅读 · 2018年1月14日
Arxiv
11+阅读 · 2018年1月11日
Arxiv
3+阅读 · 2012年11月20日
Top
微信扫码咨询专知VIP会员