渗透技巧——通过SAM数据库获得本地用户hash

0x00 前言

在渗透测试中,获得了Windows系统的访问权限后,通常会使用mimikatz的sekurlsa::logonpasswords命令尝试读取进程lsass的信息来获取当前登录用户的密码信息,但想要全面获取系统中的密码信息,还要对SAM数据库中保存的信息进行提取,导出当前系统中所有本地用户的hash。

0x01 简介

本文将要介绍以下内容:

·通过SAM数据库获得用户hash的多种方法

·原理分析

0x02 通过SAM数据库获得用户hash的方法

1、在线读取SAM数据库

读取当前系统的SAM数据库文件,获得系统所有本地用户的hash

(1) mimikatz

privilege::debug

token::elevate

lsadump::sam

测试如下图

(2) pwdump7

下载地址:

passwords.openwall.net/

管理员权限执行,如下图

(3) powershell

下载地址:

raw.githubusercontent.com

管理员权限执行,测试如下图

2、离线读取SAM数据库

获取当前系统的SAM数据库文件,在另一系统下进行读取

导出SAM数据库文件有以下两种实现方法:

(1) 保存注册表

管理员权限

reg save HKLM\SYSTEM SystemBkup.hiv
reg save HKLM\SAM SamBkup.hiv

(2) 复制文件

C:\Windows\System32\config\SYSTEM
C:\Windows\System32\config\SAM

默认无法被复制,如下图

需要借助NinjaCopy,作者Joe Bialek,参考下载地址:

github.com/3gstudent/Ni

导出SAM数据库文件后,在另一系统,可通过以下方式导出用户hash:

(1) mimikatz

lsadump::sam /sam:SystemBkup.hiv /system:SamBkup.hiv

如下图

注:

mimikatz的官方说明有问题,地址如下:

github.com/gentilkiwi/m

导出命令:

lsadump::sam SystemBkup.hiv SamBkup.hiv

会报错,如下图

可用的命令由@我爱这个世界提供

补充:

以下工具在读取Win7系统的SAM数据库文件会报错

(1) Pwdump7

如下图

(2) Pwdump5

下载地址:

passwords.openwall.net/

读取结果不正确,如下图

(3) cain

测试如下图

0x03 原理分析

1、读取HKLM\SYSTEM,获得syskey

读取注册表项HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa下的键值JD、Skew1、GBG和Data中的内容,拼接成syskey

代码可参考:

github.com/johannwmeyer

github.com/gentilkiwi/m

完整计算代码可参考:

raw.githubusercontent.com

(Steal from zcgonvh.com/post/ntds_d)

2、使用syskey解密HKLM\SAM

读取注册表项HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users下每个用户中F项和V项的内容,使用syskey进行一系列的解密

详细解密过程可参考如下链接:

xfocus.net/articles/200

综上,想要通过SAM数据库获得用户hash,需要获得两个文件:HKLM\SYSTEM和HKLM\SAM

最直接的导出方式是读取当前系统下的注册表HKLM\SYSTEM和HKLM\SAM,但需要获得system权限

从admin切换到system权限的方法可参考之前的文章:《渗透技巧——从Admin权限切换到System权限

0x04 小节

本文介绍了通过SAM数据库获得所有用户hash的多种方法,关键在于读取HKLM\SYSTEM和HKLM\SAM

本文为 3gstudent 原创稿件, 授权嘶吼独家发布,如若转载,请注明原文地址: 4hou.com/technology/108 更多内容请关注“嘶吼专业版”——Pro4hou
编辑于 2018-03-27

文章被以下专栏收录