SMB是各类组织中广泛使用的一种文件共享协议,而且在很多内部渗透测试过程中,研究人员可以利用这种协议来发现共享文件中包含的敏感信息(例如明文密码和数据库连接信息等等)。但是,即便是一个共享文件中不包含可以用来连接其他系统的凭证数据,只要这个文件给未认证用户提供了写入权限,那么我们就可以用它来获取域用户或Meterpreter Shell的密码哈希。
收集哈希
在此之前,已经有攻击者使用这种SCF(Shell Command File)文件来执行各种操作了,例如显示Windows桌面或打开Windows资源管理器等等。但是,一个SCF文件还可以用来访问指定UNC路径,而这将允许渗透测试人员组织一次攻击。下面给出的代码可以存储在一个文本文件中,并植入到一个网络共享中。
下图显示的是SCF文件的内容:
将该文件(pentestlab.txt)以SCF文件格式存储后,当用户浏览该文件时,它将会被执行。在文件名(pentestlab.scf)前面添加一个“@”字符后,该文件将会被显示在共享磁盘的文件列表顶部。
为了捕捉到访问共享目录的用户哈希,Responder需要使用以下参数来执行:
当用户访问共享文件时,系统会自动跟SCF文件中包含的UNC路径建立连接。此时,Windows将会尝试使用该用户的用户名跟密码来跟共享磁盘进行身份验证。在认证的过程中,服务器会给客户端发送一个随机的8字节challenge密钥,而NTLM/LANMAN哈希会再次使用这个challenge密钥进行二次加密。Responder将会捕捉到NTLMv2哈希。
除了Responder之外,Metasploit Framework还有一个可以用来捕捉SMB客户端的challenge-response密码哈希的模块:
跟之前一样,当用户访问这个共享磁盘时,他的密码哈希将会被Metasploit捕捉到:
如果组织所采用的密码策略足够有效,那么攻击者破解密码哈希的时间可能需要几天甚至几周的时间。
Meterpreter Shell
这项技术的主要优势就是它不需要任何的用户交互,并且能够自动让用户与共享文件进行连接,整个过程不需要使用NTLMv2哈希进行交互。因此,这项技术可以结合SMB中继攻击一起使用,并通过Payload来获取每一个访问了该共享文件用户的Meterpreter Shell。
MSFVenom可以用来生成需要在目标设备上执行的Payload:
下图即为用于SMB中继攻击中的Payload:
Coresecurity的研究人员此前曾发布过一套名叫Impacket【点我下载】的Python脚本,它们可以用来执行各种针对Windows协议(例如SMB)的攻击。使用其中的smbrelayx脚本,我们将能够搭建一个托管了Payload的SMB服务器,而这台服务器就是目标用户接下来需要尝试进行连接的服务器。由于SCF文件会迫使每一个用户使用自己的凭证与共享服务器进行连接,因此整个过程都是自动进行的。
为了处理目标主机的连接,我们这里还需要使用到Metasploit Framework:
该模块的配置参数必须跟Payload的参数相同:
当用户访问这个SMB服务器的共享目录之后,我们将会收到连接请求,此时用户使用的就是他们的用户名以及密码哈希:
Meterpreter会话建立成功之后,为了避免连接中断的情况出现,我们需要将其转接到一个更加稳定的进程上。
这里需要使用migrate命令以及进程ID:
其中,进程ID 1600对应的是svchost.exe进程,它的运行使用的是SYSTEM权限。
在Meterpreter命令行中运行getuid命令,此时我们将能够得到当前的UID:
当然了,我们还可以使用Metasploit Framework来实现这种攻击。
当目标用户使用自己的用户名以及密码哈希来与SMB服务器建立连接并完成认证之后,服务器将会给目标用户发送一个Payload,并使用用户的权限来在其主机中执行(以服务的形式执行),并与攻击者建立Meterpreter会话。
接下来,攻击者可以使用sessions命令来与已建立的会话进行交互了。
总结
这项技术利用的是很多网络中常见的文件共享功能(SCF文件),它可以用来获取密码哈希或拿到Meterpreter Shell。在使用这项技术时,唯一需要满足的要求就是用户需要访问存储了恶意SCF文件的共享磁盘。
领取专属 10元无门槛券
私享最新 技术干货