14

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

 3 years ago
source link: https://3gstudent.github.io/3gstudent.github.io/%E6%B8%97%E9%80%8F%E6%8A%80%E5%B7%A7-%E9%80%9A%E8%BF%87SAM%E6%95%B0%E6%8D%AE%E5%BA%93%E8%8E%B7%E5%BE%97%E6%9C%AC%E5%9C%B0%E7%94%A8%E6%88%B7hash/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

渗透技巧——通过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

测试如下图

Alt text

(2) pwdump7

下载地址:

http://passwords.openwall.net/b/pwdump/pwdump7.zip

管理员权限执行,如下图

Alt text

(3) powershell

下载地址:

https://raw.githubusercontent.com/EmpireProject/Empire/master/data/module_source/credentials/Invoke-PowerDump.ps1

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

Alt text

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

默认无法被复制,如下图

Alt text

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

https://github.com/3gstudent/NinjaCopy

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

(1) mimikatz

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

注:

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

https://github.com/gentilkiwi/mimikatz/wiki/module-~-lsadump

导出命令:

lsadump::sam SystemBkup.hiv SamBkup.hiv

会报错,如下图

Alt text

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

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

(1) Pwdump7

Alt text

(2) Pwdump5

下载地址:

http://passwords.openwall.net/b/pwdump/pwdump5.zip

读取结果不正确,如下图

Alt text

(3) cain

测试如下图

Alt text

0x03 原理分析


1、读取HKLM\SYSTEM,获得syskey

读取注册表项HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa下的键值JDSkew1GBGData中的内容,拼接成syskey

代码可参考:

https://github.com/johannwmeyer/quarkspwdump/blob/a68aa6330f37eb8d00055c73e6a4e3cb52bcdd6d/src/crypt.cpp#L222

https://github.com/gentilkiwi/mimikatz/blob/master/mimikatz/modules/kuhl_m_lsadump.c#L219

完整计算代码可参考:

https://raw.githubusercontent.com/3gstudent/Writeup/master/getsyskey.cpp

(Steal from http://www.zcgonvh.com/post/ntds_dit_pwd_dumper.html)

2、使用syskey解密HKLM\SAM

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

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

http://www.xfocus.net/articles/200306/550.html

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

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

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

0x04 小节


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


LEAVE A REPLY

Written on February 8, 2018

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK