跳转到帖子

游客您好,欢迎来到黑客世界论坛!您可以在这里进行注册。

赤队小组-代号1949(原CHT攻防小组)在这个瞬息万变的网络时代,我们保持初心,创造最好的社区来共同交流网络技术。您可以在论坛获取黑客攻防技巧与知识,您也可以加入我们的Telegram交流群 共同实时探讨交流。论坛禁止各种广告,请注册用户查看我们的使用与隐私策略,谢谢您的配合。小组成员可以获取论坛隐藏内容!

TheHackerWorld官方

渗透提示——导出保存在浏览器中的密码

精选回复

发布于

0x00 前言

在后渗透阶段,需要在获得权限后收集目标系统的信息。信息越全面,越有利于进一步渗透。对于Windows系统,用户的浏览器往往包含有价值的信息。

在之前的文章《本地密码查看工具LaZagne中的自定义脚本开发》中介绍了LaZagne导出多个浏览器密码的方法。

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

0x01 简介

本文将介绍以下内容:

Chrome浏览器如何保存密码

如何导出Chrome浏览器中保存的密码

常用方法的局限性

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

0x02 Chrome浏览器保存密码的方式

用户在正常访问网站时,可以选择使用Chrome浏览器保存登录密码,下次登录时Chrome会自动填写,如下图所示。

2-0.png

可以在Chrome中查看保存的登录密码(需要用户密码),如下图所示。

2-1.png

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

% local appdata % \ Google \ Chrome \ User Data \ Default \ log in Data

实际测试:

测试系统:Win7x86

铬合金

在C:\ users \ a \ appdata \ local \ Google \ chrome \ userdata \ default \ log in data中找到SQLite数据库文件

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

下载地址:

https://sqlitestudio.pl/index.rvt

注:

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

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

2-2.png

选择表单视图,查看十六进制格式,二次加密后获取用户密码,如下图所示。

2-3.png

注:

如果Chrome正在运行,就不能使用SQLiteStudio打开数据库文件登录数据。您可以复制文件,然后打开它。

0x03 导出Chrome浏览器中保存的密码

首先写一个读取SQLite数据库文件的程序,这里用的是python。

开源代码有很多,这里只举一个例子。

从操作系统导入getenv

导入sqlite3

导入binascii

conn=sqlite3 . connect(getenv(' APPDATA ')' \.\ Local \ Google \ Chrome \ User Data \ Default \ log in Data’)

cursor=conn.cursor()

cursor.execute('从登录中选择操作url,用户名值,密码值')

对于cursor.fetchall()中的结果:

print(binas CII . b2a _ hex(result[2]))

获取第二个加密的用户密码,如下图所示

3-1.png

参考Chrome开源代码,想办法让Chrome做二次加密:通过Windows API CryptProtectData()实现

参考加密代码:

https://github . com/scheib/chromium/blob/eb7e 2441 DD 8878 f 733 e 43799 ea 77 C2 Bab 66816d 3/chrome/browser/password _ manager/password _ store _ win _ unittest . cc # L107

有关CryptProtectData()的描述,请参考:

https://msdn . Microsoft . com/en-us/library/windows/desktop/aa 380261(v=vs . 85)。aspx

获取关键信息:

(1)对应解密函数为CryptUnprotectData

参考地址:

https://msdn . Microsoft . com/en-us/library/windows/desktop/aa 380882(v=vs . 85)。aspx

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

也就是说,数据只能在当前用户的凭证下解密。

还有大量解密的开源代码。这里有一个例子:

从操作系统导入getenv

导入sqlite3

导入win32加密

导入binascii

conn=sqlite3 . connect(getenv(' APPDATA ')' \.\ Local \ Google \ Chrome \ User Data \ Default \ log in Data’)

cursor=conn.cursor()

cursor.execute('从登录中选择操作url,用户名值,密码值')

对于cursor.fetchall()中的结果:

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

打印密码

注:

调用win32crypt。CryptUnprotectData需要安装pywin32。

下载地址:

http://sourceforge.net/projects/pywin32/files/pywin32/Build 219/py win32-219 . win32-py 2.7 . exe

执行后,恢复用户密码,如下图所示

3-2.png

注:

如果运行Chrome,数据库文件登录数据无法查询,SQLite3。操作错误:显示数据库被锁定。

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

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

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

https://msdn。微软。com/en-us/library/windows/desktop/aa 380261(v=vs . 85).aspx

"通常,唯一可以解密数据的用户是拥有

与加密数据的用户使用相同的登录凭据。此外,

加密和解密必须在同一台计算机上完成。"

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

答案是否定的

铬密码还原工具chromepass提供了一个特别的功能:从外部驱动器读取ChromePass密码

chromepass下载地址:

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

说明如下:

"您也可以从读取铬网络浏览器存储的密码

当前操作系统或其他操作系统中的外部配置文件

外部驱动器"

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

操作界面如下图

4-1.png

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

当然可以

解密需要获得三部分内容:

加密密钥(即万能钥匙文件),位于%appdata%\Microsoft\Protect下对应(同突发球形扰动)电离层的突然骚扰文件夹下的文件

数据库文件登录数据

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

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

\ AppData \ Local \ Google \ Chrome \ User Data \ Default \ log in Data

\ AppData \ Roaming \ Microsoft \ Protect { sid } } \下保存键文件

注:

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

例如。

\ AppData \ Local \ Google \ Chrome \ User Data \ Default \ log in Data

\ AppData \ Roaming \ Microsoft \ Protect \ S-1-5-21-3453529135-4164765056-1075703908-1001 \ 329 c 4147-0011-4ad 6-829d-e 32 dcb D1 bbd 7

如下图

4-2.png

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

4-3.png

成功解密,如下图

4-4.png

补充:

chromepass也可在命令行下使用

0x05 开源工具

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

命令行工具铬密码转储,下载地址:

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

powershell实现的工具:

https://生的。githubusercontent。com/帝国项目/帝国/master/data/module _ source/collection/Get-chrome dump。PS1

大蟒实现代码,可供参考的开源代码:

从操作系统导入getenv

导入sqlite3

导入win32加密

导入binascii

conn=sqlite3。connect(getenv(' APPDATA ')' \.\ Local \ Google \ Chrome \ User Data \ Default \ log in Data’)

cursor=conn.cursor()

cursor.execute('从登录中选择操作url,用户名值,密码值)

对于cursor.fetchall()中的结果:

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

如果密码:

打印"网站:"结果[0]

打印"用户名:"结果[1]

打印"密码:"密码

否则:

打印"未找到密码"

0x06 小结

本文介绍了导出铬浏览器密码的原理和利用方法,成功解决一个实际问题:通过加密密钥文件和用户明文密码,能够导出另一系统下铬浏览器中保存的密码

如果只获得了用户密码ntlm哈希,能否导出呢?

留下回复

创建帐户或登录后发表意见

最近浏览 0

  • 没有会员查看此页面。