继续学
Net-NTLM Hash 通常是指网络环境下NTLM认证中的Hash,比如在工作组环境中,共享资料通过net use来建立smb共享。早期smb传输明文口令,后来用LM,现在用NTLM。
NTLM使用在Windows NT和Windows 2000 Server(or later)工作组环境中(Kerberos用在域模式下)。在AD域环境中,如果需要认证Windows NT系统,也必须采用NTLM。较之Kerberos,基于NTLM的认证过程要简单很多。NTLM采用一种质询/应答(Challenge/Response)消息交换模式。
NTLM是只能镶嵌在上层协议里面,消息的传输依赖于使用NTLM的上层协议。比如镶嵌在SMB协议。
NTLM认证采用质询/应答(Challenge/Response)的消息交换模式,流程如下:
NTLM协议的认证过程分为三步:
整个流程图如下
使用net use模拟流量请求,因为net use是建立在smb上的,所以会有smb的流量。
13-22请求包为net use的包,其中13-16为smb的包,17-20为NTLM认证的包,一个一个看
客户端向服务器发送smb协商1,请求包中包含客户端支持的smb协议版本
服务端返回smb Response 1,包含它所支持的smb版本
然后客户端根据服务端返回的smb版本选择一个两者通用的发送协商smb Request 2
服务端回应smb Response 2
这里我其实没弄明白为什么要发四个包,按理说前两个包已经拿到了客户端和服务端支持的smb版本,第三个包直接认证就行了,但是还进行了smb Request2,不是脱裤子放屁吗?
然后我对比了两个Request和respons,发现在两个Response中的 Dialect 字段不太一样。
再仔细看Request2中只发送了两个smb版本
大胆猜测
NTLMSSP_NEGOTIATE Request 发送一些版本信息给服务端协商协议版本
NTLMSSP_NEGOTIATE Response 返回 NTLMSSP_Challenge 包含一个16位随机数Challenge。
客户端接收到Challenge之后,使用用户NTLM Hash与Challenge进行加密运算得到Response,将Response,username,Challenge发给服务器。消息中的Response是最关键的部分,因为它向服务器证明客户端用户已经知道帐户密码。
其中,经过NTLM Hash加密Challenge的结果在网络协议中称之为Net NTLM Hash。
继续第三个请求包
客户端发送刚才加密计算的Response,username,Challenge给服务端,这里的Challenge是客户端重新生成的一个随机的nonce,不同于上一个相应包中的Challenge。
MIC是校验和,设计MIC主要是为了防止这个包中途被修改。session_key是在要求进行签名的时候用的,用来进行协商加密密钥。
第四个请求包表示验证通过。当使用错误的用户名密码net use时,会验证失败。如图
在请求包19中的Response根据系统版本被分为六种响应类型
这六种使用的加密流程一样,都是前面我们说的 Challenge/Response 验证机制,区别在Challenge和加密算法不同。
根据LmCompatibilityLevel的安全设置来决定发送哪个响应,默认如下
Net-NTLM Hash v1的格式为:
username::hostname:LM Response:NTLM Response:Challenge
Net-NTLM Hash v2的格式为:
username::domain:Challenge:HMAC-MD5:blob
Challenge为NTLM Server Challenge,domian由数据包内容获得(IP或者机器名),HMAC-MD5对应数据包中的NTProofStr。
blob对应数据包中Response去掉NTProofStr的后半部分,拼接NTLM v2 Hash为
administrator::test:bb7e0cce5b7a719c:40426e2eaa7d7b467855be0881b5d069:01010000000000001111f0f6ae9ed60161e75abd99c8fd2b0000000002000800540045005300540001000400440043000400140074006500730074002e006c006f00630061006c0003001a00440043002e0074006500730074002e006c006f00630061006c000500140074006500730074002e006c006f00630061006c00070008001111f0f6ae9ed601060004000200000008003000300000000000000000000000003000007276a9639bd6e10c91bbc264a284d542e7acb37803ef6a3bf7e3eb9cbf82a2d20a001000000000000000000000000000000000000900200063006900660073002f003100370032002e00310036002e00330033002e003300000000000000000000000000
Hashcat破解就行了。
hashcat -m 5600 administrator::test:bb7e0cce5b7a719c:40426e2eaa7d7b467855be0881b5d069:01010000000000001111f0f6ae9ed60161e75abd99c8fd2b0000000002000800540045005300540001000400440043000400140074006500730074002e006c006f00630061006c0003001a00440043002e0074006500730074002e006c006f00630061006c000500140074006500730074002e006c006f00630061006c00070008001111f0f6ae9ed601060004000200000008003000300000000000000000000000003000007276a9639bd6e10c91bbc264a284d542e7acb37803ef6a3bf7e3eb9cbf82a2d20a001000000000000000000000000000000000000900200063006900660073002f003100370032002e00310036002e00330033002e003300000000000000000000000000 /tmp/password.list --force
文笔垃圾,措辞轻浮,内容浅显,操作生疏。不足之处欢迎大师傅们指点和纠正,感激不尽。