在windows平台上使用NTLM Hash 收邮件,可以结合EWS接口,并在C++层IAT HOOK ncrypt.dll 导入的 bcrypt.dll.BCryptHashData函数。
这个函数包含了NTLM Hash验证的明文数据,抓到NTLM验证请求的时候,用服务端返回的Challenge 和已知的密码Hash 再把各种HASH重新计算一次填充到数据包中返回给服务端。
为什么要这么做?因为EWS 接口中没有带Hash的接口,只能先用一个错误的密码填充 ,然后在底层再重新用正确的HASH 填充。
还有更简单的办法就是找到底层算密码 md4 hash的地方,在算完hash 之后直接替换就不需要再关注后面的数据了。可惜本人太菜了,暂时没有找到,需要多花点时间去调试分析,如果你找到了,请大神指导一二。
需要的提供的密码HASH其实就是明文密码的UNICODE 的md4 编码。
需要做的功课:
1. 研究清楚NTLM HASH验证协议,尤其是各种HASH的计算,可以参考官方文档[MS-NLMP].PDF
2. 精准HOOK