之前文章分析本地认证NTLM及网络认证Net NTLM,这篇文章来实现不依赖外部工具抓取NTLM哈希,并通过脚本自动还原Hashcat能爆破的密文
1、内网渗透——WINDOWS认证机制之NTLM
问题:
如果获得了内网一个文件服务器的权限,如何获得更多用户的口令?
解决思路:
如果获得了内网一个文件服务器的权限,那么内网中的其他主机在使用界面尝试访问该服务器时,首先会将本机的密码Hash发送至服务器进行验证,在服务器端抓取数据包能够获得NTLM Response,对NTLM Response的格式进行解析,提取特定信息,使用Hashcat尝试字典破解或者暴力破解,就有可能还原出用户本机的明文口令
所以,接下来需要解决第一个问题: 如何在文件服务器上抓取数据包?
Windows平台下进行网络抓包的方法
两台WIN7主机,远程主机关闭防火墙并开启共享
本地主机执行抓包程序:
netsh trace start capture=yes persistent=yes traceFile="c:\\test\\snmp1.etl" overwrite=yes correlation=no protocol=tcp ipv4.address=192.168.217.130 keywords=ut:authentication
参数说明:
capture=yes: 开启抓包功能
persistent=yes: 系统重启不关闭抓包功能,只能通过Netsh trace stop关闭
traceFile: 指定保存记录文件的路径
overwrite=yes: 如果文件存在,那么对其覆盖
correlation=no: 不收集关联事件
protocol=tcp: 抓取TPC协议
ipv4.address=192.168.217.130 : 限定只抓和服务器IP相关的数据包
keywords=ut:authentication: 关键字为ut:authentication
注:win10可使用report=disabled,禁止收集系统的配置文件信息,增加抓包速度
访问远程主机共享
net use \\192.168.217.130 /u:admin 123456
netsh trace stop
老工具微软不维护,使用微软官方推荐的开源项目将etl文件转化为pcapng文件
github:microsoft/etl2pcapng
wireshark查看转化之后的包,另存为pcap形式
下来编写脚本从pcap中需要的字段,再通过hashcat爆破
1、对目的端口进行判断,选出SMB协议的数据包
2、筛选出NTLMv2 Response数据包
3、通过当前数据包获得username、domain、HMAC-MD5和blob
4、通过前一数据包获得Server challenge
具体实现:
1.选出SMB协议的数据包
目的端口为445
packets[p]['TCP'].dport == 445
2.筛选出NTLMv2 Response数据包
TCP payload包含特殊字符串NTLMSSP
packets[p]['Raw'].load.find('NTLMSSP') != -1
3.获得通过当前数据包获得username、domain、HMAC-MD5和blob
HMAC-MD5和blob为固定位置,直接通过固定偏移即可获得
username和domain为固定格式,2字节表示Length,2字节表示Maxlen,4字节表示偏移,值得注意的2字节长度实际上为int型数据,在读取时高低位要互换
例如读取出16进制数据为4601,实际计算的是0146转换成10进制的值,为326
DomainLength1 = int(TCPPayload[Flag+28:Flag+28+1].encode("hex"),16)
DomainLength2 = int(TCPPayload[Flag+28+1:Flag+28+1+1].encode(