SMB共享之SCF文件攻击解析

时间:2022-04-24
本文章向大家介绍SMB共享之SCF文件攻击解析,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

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文件的共享磁盘。但是,我们也可以通过下列方法来防止这种攻击的发生:

1. 使用Kerbeors认证或SMB签名;

2. 禁用共享文件给未认证用户所提供的写入权限;

3. 确保使用的是NTLMv2密码(而非LanMan密码);

参考资料

1. https://github.com/CoreSecurity/impacket

2. https://pen-testing.sans.org/blog/2013/04/25/smb-relay-demystified-and-ntlmv2-pwnage-with-python

3. https://1337red.wordpress.com/using-a-scf-file-to-gather-hashes/

4. http://carnal0wnage.attackresearch.com/2009/04/using-metasploit-smb-sniffer-module.html

5. https://room362.com/post/2016/smb-http-auth-capture-via-scf/

6. https://blog.rapid7.com/2008/11/11/ms08-068-metasploit-and-smb-relay/

7. https://cqureacademy.com/blog/penetration-testing/smb-relay-attack