发布于2022年11月8日2年前 0x00 前言 在上篇文章《渗透技巧——导出Chrome浏览器中保存的密码》 介绍了导出铬浏览器密码的原理和利用方法,文末留下一个问题:如果只获得了用户的ntlm hash,能否导出Chrome浏览器保存的明文密码呢? 该部分的参考资料较少,而想要解答这个问题,需要了解加解密的原理,所以本文尝试对该部分内容做介绍,得出最终结论 0x01 简介 本文将要介绍以下内容: DPAPI简介及相关概念 DPAPI加解密流程 离线导出原理 离线导出方法 得出最终结论 0x02 DPAPI简介 本节内容参考自如下链接,加入个人理解: https://msdn.microsoft.com/en-us/library/ms995355.aspx https://www.passcape.com/index.php?section=docsyscmd=detailsid=28 DPAPI全称数据保护应用程序编程接口 作为Windows操作系统操作系统系统的一个数据保护接口被广泛使用 主要用于保护加密的数据,常见的应用如: 电场刺激电场刺激文件加密 存储无线连接密码 Windows操作系统凭据管理器 微软公司出品的网浏览器 观点 网络电话 Windows CardSpace Windows操作系统保管库 谷歌浏览器 使用简单,加密使用函数CryptProtectData,解密使用函数CryptUnprotectData即可,系统在后台自动完成其他复杂的加解密操作 CryptProtectData的说明可参考: https://msdn。微软。com/en-us/library/windows/desktop/aa 380261(v=vs . 85).aspx CryptUnprotectData的说明可参考: https://msdn。微软。com/en-us/library/windows/desktop/aa 380882(v=vs . 85).aspx 专有名词 DPAPI blob: 一段密文,可使用万能钥匙对其解密 结构如下图 该图引用自https://www.passcape.com/index.php?section=docsyscmd=detailsid=28 Master Key: 64字节,用于解密DPAPI blob 通过用户登录密码、席德和16字节随机数加密后保存在主密钥文件中 Master Key file: 二进制文件,可使用用户登录密码对其解密,获得万能钥匙 包含以下五个部分: 标题和系统信息 用户的主密钥 本地备份加密密钥 唯一凭证文件标识符 域主密钥备份 位于固定位置:% APPDATA % \ Microsoft \ Protect \ % SID % 例如: c:\ Users \ a \ AppData \ Roaming \ Microsoft \ Protect \ S-1-5-21-3453529135-4164765056-1075703908-1001 包含文件D1 bbd 7(系统文件,隐藏属性) 无法直接查看 可通过米米卡茨对其解析,命令如下: mimikatz.exe日志DP API:主密钥/in:' 329 c 4147-0011-4ad 6-829d-e 32 dcb D1 bbd 7 ' 输出如下: 米米卡茨(命令行)# DP API:主密钥/in:329 c 4147-0011-4ad 6-829d-e 32 dcbd 1 bbd 7 **万能钥匙* * dwVersion : 00000002 - 2 SZ guid:{ 329 c 4147-0011-4ad 6-829d-e 32 dcbd 1 bbd 7 } dwFlags : 00000005 - 5 dwMasterKeyLen : 000000b0 - 176 dwBackupKeyLen : 00000090 - 144 dwCredHistLen : 00000014 - 20 dwDomainKeyLen:0000000-0 [万能钥匙] **万能钥匙* * dwVersion : 00000002 - 2 盐:9917 a47f 1949226 E4 E8 C5 b8 a3 AAF 4808 回合数:00000ce4 - 3300 算法散列:0000800 e-32782(CALG _ SHA _ 512) 密码:00006610-26128(CALG _ AES _ 256) Pb键:cf 2634535384431 da 063 FD 9 a 240 ab 575d 13 DC 1 da ee8 ea 545d 5 c 9 a 0628 fa 5 cc 63 cf 825 B3 b 24642 B3 d 7 Fe 98 a 3703 C1 e 7 CDC 7 e 49132 a 017 e 3 e 45 Fe 34 f 8512 fdb 8 b 224 e 5 c 30 a 754683 [备份键] **万能钥匙* * dwVersion : 00000002 - 2 盐:57 fb6 f 4228 e9 ca 7d 686 C7 f 174 f 1691 b 0 回合数:00000ce4 - 3300 算法散列:0000800 e-32782(CALG _ SHA _ 512) 密码:00006610-26128(CALG _ AES _ 256) Pb键:1 AE 34 b 8395375465871 a 999 c 0d 04365 cc 5089 CAD 4 bea 139344 ECB 8 f 9 cf 0 da 1 Abe 5d 7 b 096 e 9594506 a0d 8 c 772469 B1 f 81118d 608823 e 2 be 33020 a 86 bb 6d 190d 61865d 270 e 299 dfec 9 ACA 011 [credhist] **信用记录信息* * dwVersion : 00000003 - 3 guid:{ 58680 BC 7-055 e-4728-ab96-c 34d 64 c 565 f 2 } 0x03 DPAPI解密思路 1、使用用户登录密码解密Master Key file,获得Master Key 固定位置:% appdata % \ Microsoft \ protect \ % sid %通常有多个主密钥文件。 这是为了安全起见,系统会每90天自动生成一个新的主密钥(旧的不会被删除) % appdata % \ Microsoft \ protect \ % sid %下有一个首选的固定文件,它包含最后一个主密钥文件的名称和创建时间。文件结构如下: typedef struct _ tagPreferredMasterKey { GUID guidMasterKey FILETIME ftCreated } PREFERREDMASTERKEY,* PPREFERREDMASTERKEY 2、使用Master Key解密DPAPI blob,获得明文 0x04 离线导出Chrome浏览器中保存的密码 1、获得DPAPI blob DPAPI blob位于SQLite数据库文件登录数据的密码部分,如下图所示 使用python脚本读取它,并使用以下代码将其保存到文件中: 从操作系统导入getenv 导入sqlite3 导入binascii conn=sqlite3.connect('登录数据') cursor=conn.cursor() cursor.execute('从登录中选择操作url,用户名值,密码值') 对于cursor.fetchall()中的结果: print(binas CII . b2a _ hex(result[2])) f=打开(' test.txt ',' wb ') f.write(结果[2]) f.close() 2、解密Master Key获得明文 使用工具Windows密码恢复,下载地址: https://www.passcape.com/index.php?section=downloadscategory=28 选择utils-DP API解码器和分析师-解密DP API数据blob。 将DPAPI blob文件设置为指向存储DP API blob的文件test.txt,如下图所示 设置主密钥文件指向要破解的主密钥文件,如下图所示 接下来,输入用户登录密码。 获取明文,如下所示 解密成功 使用ChromePass验证结果。 ChromePass下载地址: http://www.nirsoft.net/utils/chromepass.html 参数描述: /外部 该命令如下所示: ChromePass.exe/外部c:\1\2\3\ test123 如下图 0x05 最终结论 1、无法自动定位Master Key file 如果用户sid文件夹包含多个主密钥文件,在尝试用Windows密码恢复解密时需要逐个测试,也可以通过读取文件首选的前16个字节来获取对应的主密钥文件。 使用ChromePass时不存在这个问题,只需填写文件上级目录的路径即可。 2、无法使用用户登录密码的NTLM hash解密Master Key DPAPI的当前版本在设计时就考虑到了这一隐患,并使用SHA1算法(NTLM哈希使用MD4加密)。 因此,用户登录密码的NTLM哈希不能用于解密主密钥。 3、DPAPI很安全,符合密码安全性的要求 以上测试是基于目标系统的访问权限,也就是说目标系统已经变得不安全。 对于没有访问权限的Windows系统,目前使用DPAPI不会造成密码破解的问题。 0x06 小结 通过分析DPAPI的加解密过程,得出Chrome浏览器保存的明文密码不能使用用户的ntlm哈希导出的结论。 0x07 补充 导出离线Chrome浏览器中保存的密码,也可以通过lsass进程提取主密钥进行解密,无需获取用户的明文密码。详情请咨询《渗透技巧——利用Masterkey离线导出Chrome浏览器中保存的密码》。 留下回复
创建帐户或登录后发表意见