发布于2022年11月8日2年前 0x00 前言 在后渗透阶段,需要在获得权限后收集目标系统的信息。信息越全面,越有利于进一步渗透。对于Windows系统,用户的浏览器往往包含有价值的信息。 在之前的文章《本地密码查看工具LaZagne中的自定义脚本开发》中介绍了LaZagne导出多个浏览器密码的方法。 本文将介绍Chrome浏览器的具体导出原理和使用方法,并解决一个实际问题:如何在另一个系统下导出保存在Chrome浏览器中的密码? 0x01 简介 本文将介绍以下内容: Chrome浏览器如何保存密码 如何导出Chrome浏览器中保存的密码 常用方法的局限性 如何在另一个系统下导出Chrome浏览器中保存的密码 0x02 Chrome浏览器保存密码的方式 用户在正常访问网站时,可以选择使用Chrome浏览器保存登录密码,下次登录时Chrome会自动填写,如下图所示。 可以在Chrome中查看保存的登录密码(需要用户密码),如下图所示。 保存在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不支持查看十六进制数据) 成功读取数据库文件中保存的信息,但无法显示密码段,如下图所示 选择表单视图,查看十六进制格式,二次加密后获取用户密码,如下图所示。 注: 如果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])) 获取第二个加密的用户密码,如下图所示 参考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 执行后,恢复用户密码,如下图所示 注: 如果运行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能够导出当前系统下另一用户的铬密码 操作界面如下图 既然如此,如果获得了另一系统下的相关配置文件,能否导出铬浏览器中保存的密码呢? 当然可以 解密需要获得三部分内容: 加密密钥(即万能钥匙文件),位于%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 如下图 使用chromepass选择该目录,填入用户明文密码,如下图 成功解密,如下图 补充: 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哈希,能否导出呢? 留下回复
创建帐户或登录后发表意见