渗透技巧——利用netsh抓取连接文件服务器的NTLMv2 Hash

在线wifi跑包 金刚包跑包 cap跑包 hccapx ewsa在线 就来 握手包跑包

各位好 又见面了 我是曹操 今天给大家带来一篇新的教程

希望各位细心学习 低调用网

netsh trace start capture=yes persistent=yes traceFile="c:testsnmp1.etl" overwrite=yes correlation=no protocol=tcp ipv4.address=192.168.62.130 keywords=ut:authentication

0x00 引言

在之前的文章中,我们比较了NTLM hash和Net-NTLM hash的区别。本文将继续探讨Net-NTLM hash在内网渗透中的应用,解决一个有趣的问题:如果我们获得了内网一个文件服务器的权限,如何获取更多用户的口令?

0x01 简介

本文将介绍以下内容:

0x02 解决思路

在之前的文章中提到,当客户端连接文件服务器时,默认会将当前登录用户的密码Hash发送至服务器进行验证。如果验证失败,需要重新输入登录用户名和口令。如果我们获得了内网一个文件服务器的权限,那么当内网中的其他主机尝试访问该服务器时,首先会将本机的密码Hash发送至服务器进行验证。通过在服务器端抓取数据包,我们可以获取到NTLM Response。我们可以解析NTLM Response的格式,提取特定信息,并使用Hashcat尝试字典破解或暴力破解,从而有可能还原出用户本机的明文口令。因此,我们需要解决第一个问题:如何在文件服务器上抓取数据包?

0x03 Windows平台下进行网络抓包的方法

最常用的方法是安装Wireshark,但如果我们能找到一种不需要安装任何第三方依赖库的方法,直接使用系统自带工具来抓包,岂不是更好?事实上,我们是可以做到的。通过Windows系统自带的netsh命令中的trace功能,我们可以在命令行下进行抓包。这个功能支持Win7、Server2008R2及以后的系统,但不支持Server2008。具体的使用方法如下:

  1. 开启记录功能
Netsh trace stop
  1. 关闭记录功能
easy_install scapy
easy_install scapy_http

关闭功能后,系统会将捕获到的数据包保存为.etl结尾的文件。我们可以使用Windows Message Analyzer工具将.etl文件转换成.cap格式,以便使用Wireshark打开并读取数据包。从数据包中,我们可以找到SMB2协议,并提取出NTLM v2的关键信息。我们可以拼接固定格式的数据,如username::domain:challenge:HMAC-MD5:blob,并使用Hashcat进行破解。这里不再演示具体的破解方法,详细内容可以参考之前的文章《Windows下的密码hash——NTLM hash和Net-NTLM hash介绍》。

如果我们手动组装多个NTLM v2响应包,会非常费事费力。因此,我们需要编写程序来自动解析数据包,提取出Hashcat可用的NTLM v2内容。这就是第二个问题:如何通过程序实现自动解析数据包,提取NTLM v2的内容?

0x04 通过程序实现自动解析数据包

开发语言:Python

所需模块:Scapy

Scapy是一个Python模块,可以用于解析pcap数据包。在使用之前,我们需要使用Wireshark将.cap包转换成.pcap包。下面是使用Scapy的示例代码:

try:
    import scapy.all as scapy
except ImportError:
    import scapy
try:
    # This import works from the project directory
    import scapy_http.http
except ImportError:
    # If you installed this package via pip, you just need to execute this
    from scapy.layers import http
packets = scapy.rdpcap('test.pcap')
for p in packets:
    print('=' * 78)
    p.show()

使用上述代码,我们可以自动解析出每个数据包的格式,分为Ethernet、IP、TCP和Raw。接下来,我们可以按照以下步骤开发程序:

  1. 对目的端口进行判断,选出SMB协议的数据包。

  2. 筛选出NTLMv2 Response数据包。

  3. 通过当前数据包获得username、domain、HMAC-MD5和blob。

  4. 通过前一个数据包获得Server challenge。

具体的实现代码如上所示。执行程序后,我们可以得到相应的输出结果。然后,我们可以使用Hashcat进行破解。

需要注意的是,解析pcap包的开源工具还有其他选择,但在解析NTLMv2的challenge时可能会出现bug。

0x05 补充

对于文件服务器,如果开启了NetBIOS over TCP/IP,那么禁用445端口后,系统会尝试使用139端口进行连接。我们可以进行如下测试:

服务器禁用445端口,开启139端口。客户端尝试连接,SMB协议使用139端口,抓包结果如上所示。如果禁用了NetBIOS over TCP/IP,那么禁用445端口后,将无法使用文件共享。

0x06 小结

本文解决了在获得内网一个文件服务器的权限后,如何获取更多用户口令的问题。我们通过Windows命令行抓包获取SMB协议内容,并编写程序自动提取NTLMv2 Hash,最后使用Hashcat进行破解,有可能还原出用户本机的明文口令。

赞(0)