SMB relay解密使用python进行ntlmv2攻击

原文地址: http://pen-testing.sans.org/blog/pen-testing/2013/04/25/smb-relay-demystified-and-ntlmv2-pwnage-with-python
SMB Relay拥有稳定,可靠,有效的特点。即使组织都及时安装补丁,SMB Relay仍然可以帮助你访问到关键资产。大多数组织都有一些自动化的系统来连接到网络内的所有主机进行各种管理工作。例如软件清查系统,杀毒软件更新,备份,软件更新和补丁管理,桌面备份,event log收集,以及其他进程周期性的连接到网络内的每一个主机,使用管理员口令登录,进行一些管理工作。
一些组织中,当有主机出现在网络中时,主动防御系统会立即尝试登录。这些系统通常会尝试使用一组长长的username和password列表来登录未知主机。SMB Relay攻击允许我们获取这些认证尝试,然后使用它们来访问网络中的系统。在某种程度上,SMB Relay也是一种Pass the Hash攻击。
NTLM NTLM是请求/应答协议。认证发生在类似这种场合:首先,客户端尝试登录,服务器响应一个质疑。事实上,服务器在说:如果你是你所说的那个人,那么使用你的hash把它加密(ChallengeX)。然后客户端加密challenge发送给服务器。接着服务器用客户端密码hash解密。如果解密后的challenge和发送的一样,那么user通过认证。过程如下:

使用SMB Relay攻击,攻击者把自己放到交换中间。攻击者选择它想认证的目标服务器,然后等待网络中的某人连接到他进行认证。这时就可以利用那些自动连接到主机的主动防御系统,漏洞扫描器,管理员脚本。当自动化进程连接到攻击者,他传递认证尝试到他的目标(网络中的另一个系统,也许是一个服务器)。目标产生一个challenge并发挥到攻击者。攻击者把这个challenge发送给最初的扫描系统。扫描系统使用正确的密码hash加密然后发送给攻击者,攻击者把正确的加密响应再发送给目标,这样就可以成功认证。过程如下图所示。蓝色表示最初的通信,红色表示攻击者把这些通信进行轻微的更改并中转到他的目标,所以它可以获得访问权限。

虽然看起来很复杂,但是实施起来很简单。在本例中,攻击者(10.10.12.10)希望访问10.10.12.20的服务器。组织里面有一个10.10.12.19软件清查进行来清查网络中所有系统
场景
攻击者 - 10.10.12.10
目标 - 10.10.12.20
软件清查系统 - 10.10.12.19
使用metasploit的SMB Relay模块,攻击者在10.10.12.10设置参数

本例使用一个简单的Windows FOR循环来模拟管理服务器扫描网络,进行软件清查。在10.10.12.19,运行如下命令:

当扫描器(10.10.12.19)连接到10.10.12.10(攻击者的主机)的时候,认证尝试将中转到目标服务器(10.10.12.20)。认证就这样奇迹的发生了,metasploit自动的使用认证后的session在目标机上创建meterpreter荷载。注意下图,当清查系统视图连接到10.10.12.10时,metasploit发送Access Denied给清查系统。但是,我们已经成功在目标机上获得Meterpreter shell。

如今,Metasploit的SMB Relay只支持NTLMv1,所以组织可以通过更改AD策略来避免这种攻击,从

改为

然后我们再尝试metasploit:

现在当我们运行exploit,出现Failed to authenticate错误。
现在我们使用python IMPACKET模块进行攻击。IMPACKET模块中含有一个SMBRELAYX.PY脚本,它支持NTLMv2。
下载最新版本的IMPACKET,修复模块路径问题。SMBRELAYX需要在通过认证后指定一个在目标服务器上运行的一个可执行文件。还有什么比meterpreter更好的吗?我们使用msfpayload来创建一个Meterpreter可执行文件,然后开始使用SMBRELAYX。Smbrelayx.py需要两个参数:-h表示目标主机,-e表示目标主机上运行的可执行文件,如下:

由于我们使用meterpreter反向shell,我们需要搭建metasploit来接收荷载在目标机运行后创建的连接。这就是multi/handler的用于,如图

现在模拟扫描器来连接我们攻击机(10.10.12.10)的C$

不同于metasploit返回的Access Denied错误,我们这次获得System cannot find the path specified错误,我喜欢这个错误,因为管理员更容易相信这个错误。smbrelayx.py的返回信息相比于metasploit更隐蔽。我们可以在脚本中看到中转发生。它使用10.10.12.19提供的username和password通过了10.10.12.20的认证,然后创建了meterpreter进程。

咋在通过NTLMv2认证后荷载被送到了目标主机,然后在目标主机上创建了meterpreter。为了保护我们的shell,我们需要立即把它迁移到其他更稳定的进程中。

==========================================================================[color=red]
metasploit中“Access Denied”信息可以通过修改/usr/share/metasploit-framework/modules/exploits/windows/smb/smb_relay.rb代码来改变。
528     end
529
530     print_status("Sending Access Denied to #{smb[:name]} #{smb[:domain]}\\#{smb[:username]}")
531
532     pkt = CONST::SMB_BASE_PKT.make_struct

[/color]

猜你喜欢

转载自j4s0nh4ck.iteye.com/blog/2157794
SMB