内网渗透|NTLM 身份验证
NTLM是NT LAN Manager的缩写,NTLM是基于挑战/应答的身份验证协议,是 Windows NT 早期版本中的标准安全协议。
基本流程
NTLM验证是一种Challenge/Response 验证机制,由三种消息组成:通常称为type 1(协商),类型type 2(质询)和type 3(身份验证)。
文章图片
文章图片
type1 协商
这一步没有发送用户名!!!
这一步没有发送用户名!!!
这一步没有发送用户名!!!
大部分文章都写了 第一步会发送用户名,实际抓一次包就明白了.
客户端向服务器发送type1(协商)消息主要包含客户端支持和服务器请求的功能列表:
文章图片
实际抓包:
文章图片
type2质询
这个过程是服务器用type 2消息(质询)进行响应,这包含服务器支持和同意的功能列表。但是,最重要的是,它包含服务器产生的Challenge:
文章图片
实际抓包:
文章图片
主要信息是challenge:challenge随机字符串,用于加密验证。
type 3 身份验证
这个过程客户端接收到challenge之后,使用用户hash与challenge进行加密运算得到response,将response,username,challenge发给服务器。消息中的response是最关键的部分,因为它向服务器证明客户端用户已经知道帐户密码。
文章图片
实际抓包:
文章图片
此challenge和type2的不一样;
Net-NTLMv1
Net-NTLMv1协议的基本流程如下:
客户端向服务器发送一个请求
【内网渗透|NTLM 身份验证】服务器接收到请求后,生成一个8位的Challenge,发送回客户端
客户端接收到Challenge后,使用登录用户的密码hash对Challenge加密,作为response发送给服务器
服务器校验response
username::hostname:LM response:NTLM response:challenge
Net-NTLMv1 response的计算方法为:
将用户的NTLM hash补零至21字节分成三组7字节数据
三组数据作为3DES加密算法的三组密钥,加密Server发来的Challenge
这种方式相对脆弱,可以基于抓包工具和彩虹表爆破工具进行破解。
Net-NTLMv2
自Windows Vista起,微软默认使用Net-NTLMv2协议,其基本流程如下:
客户端向服务器发送一个请求
服务器接收到请求后,生成一个16位的Challenge,发送回客户端
客户端接收到Challenge后,使用登录用户的密码hash对Challenge加密,作为response发送给服务器
服务器校验response
username::domain:challenge:HMAC-MD5:blob
v2是的加密算法:
1.将Unicode后的大写用户名与Unicode后的身份验证目标(在Type 3消息的"TargetName"字段中指定的域或服务器名称)拼在一起。请注意,用户名将转换为大写,而身份验证目标区分大小写,并且必须与“TargetName”字段中显示的大小写匹配。使用16字节NTLM哈希作为密钥,得到一个值。
2.构建一个blob信息:
文章图片
1.使用16字节NTLMv2哈希作为密钥,将HMAC-MD5消息认证代码算法加密一个值(来自type 2的Challenge与Blob拼接在一起)。得到一个16字节的NTProofStr。
2.将NTProofStr与Blob拼接起来形成得到response。
至于选择哪个版本的响应由LmCompatibilityLevel决定。
通过组合username,domain,challenge,NTProofStr,NTMLv2 response得到最终的Net-NTML-Hash
challenge为第二步响应中:ntlmssp.ntlmserverchallenge
NTProofStr为:ntlmssp.ntlmv2_response
NTMLv2 response为:这里并非全部的NTMLv2 response,需要去掉NTProofStr部分。
username::domain:challenge:HMAC-MD5:blob
code::DESKTOP-VCBQ663::72f67c1da05d0c77::28f4b5babc7926013180873ccb257f62:01010000000000006d6e916e9698d70191af7bd88a2706b1000000000200040053005400010004005300540004000400530054000300040053005400070008006d6e916e9698d70106000400020000000800300030000000000000000100000000200000e360aa9baa60ce73af7699d4ca493ff52b0e20aefe01ef49706a0623825827180a001000000000000000000000000000000000000900280063006900660073002f003100390032002e003100360038002e003100300033002e003200320030000000000000000000
推荐阅读
- webug3.0渗透基础第九、十关笔记
- 后台|NATAPP内网穿透通过nginx实现一个端口访问多个不同端口服务
- 服务器|用旧手机搭建服务器并实现内网穿透不需要root(本人亲测很多次最简单的一个)
- NATAPP免费实现内网穿透
- 内网渗透|内网渗透-最实用的信息收集
- 铁柱学渗透06——SQL注入合集
- 铁柱学渗透04——后端基础PHP
- 铁柱学渗透03——后端基础SQL。
- 铁柱学渗透02——web前端基础
- 安全渗透|铁柱学渗透01—Web服务器通讯原理