从0到1认识内网渗透4-Windows网络认证

Windows操作系统中进行网络通信和资源访问时,验证用户身份和授权权限的过程,确保只有经过验证的用户才能访问网络资源,并根据其权限级别进行授权操作,Windows中的网络认证大致分为

  • 用户名密码认证:提供用户名和密码进行认证(常见本地计算机或域账户)
  • Kerberos认证:通过使用票据和票据授予票据来验证用户身份,并生成会话密钥用于加密通信(Windows域环境广泛使用)
  • NTLM认证:早期的Windows网络认证协议,使用基于挑战-响应的方式进行身份认证(常用于旧版Windows系统或非Windows系统进行互操作时)
  • 密钥身份认证:使用预先共享的密钥对用户进行身份验证(常用于特定场景和应用)
  • 远程桌面认证:远程访问Windows计算机的功能,用户需要提供目标机器的凭据进行认证

NTLM认证

一种早期的Windows网络身份验证协议,在Windows系统中用于验证用户的身份,并提供对网络资源的访问控制

NTLM协议

一种基于挑战(Challenge)-响应(Response)的认证机制,分为NTLM V1协议和NTLM V2协议

image-20250803040936529

认证流程

协商

客户端会向服务端发起请求连接用于协商

image-20250803041014868

解决兼容性问题(不同版本之间的向下兼容)双方先确定一下传输协议的版本等各种信息

质询

关键流程,在本地生成一个(16位或8位)随机字符即challenge值保存,并将该challenge值发给客户端

image-20250803041111896

当客户端接收到Challenge值时,将需认证服务端的username所对应的NTLM-Hash对Challenge进行加密合并上本地用户名、域名、机器名等相关信息生成Response,并Response发送给服务端(客户端发给服务端,用于校验身份)

image-20250803041137632

Response生成

由NTProofStr+blob两部分拼接而成,可通过工具(Inveigh)进行攻击抓取Net-NTLM Hash,进而推导出Response

1
2
3
导入powershell模块,建立监听
Import-Module .\Inveigh.ps1
Invoke-Inveigh -ConsoleOutput Y -FileOutput y

image-20250803041515863

建立IPC连接,用于生成对应challenge和response(IPC连接利用NTLM认证)

1
net use \\192.168.108.159 /u:administrator Admin@123

image-20250803041615507

成功抓取Net-NTLM Hash

image-20250803041702681

  • username:administrator
  • 机器名:WIN-DEK1MT75VM9
  • challenge:01F04B08FC3C0172

image-20250803041754094

  • NTProofStr:1A0BDAA3BAC238BF206B4C0E5FA75F13
  • blob:0101000000000000F973F5E98EF9D9013E77AC0A7EFF1ED80000000002001E00570049004E002D004A00510049005000320043004D004A0031005600340001001E00570049004E002D004A00510049005000320043004D004A0031005600340004001E00570049004E002D004A00510049005000320043004D004A0031005600340003001E00570049004E002D004A00510049005000320043004D004A0031005600340007000800F973F5E98EF9D901060004000200000008003000300000000000000000000000003000008A6C6F94B53B5DD8EDF2E065DF724837C65998C524C615CD42F724BCF043B3610A001000000000000000000000000000000000000900280063006900660073002F003100390032002E003100360038002E003100300038002E00310035003900000000000000000000000000

通过NTProofStr+blob两部分拼接,得到最终结果

1
1a0bdaa3bac238bf206b4c0e5fa75f130101000000000000F973F5E98EF9D9013E77AC0A7EFF1ED80000000002001E00570049004E002D004A00510049005000320043004D004A0031005600340001001E00570049004E002D004A00510049005000320043004D004A0031005600340004001E00570049004E002D004A00510049005000320043004D004A0031005600340003001E00570049004E002D004A00510049005000320043004D004A0031005600340007000800F973F5E98EF9D901060004000200000008003000300000000000000000000000003000008A6C6F94B53B5DD8EDF2E065DF724837C65998C524C615CD42F724BCF043B3610A001000000000000000000000000000000000000900280063006900660073002F003100390032002E003100360038002E003100300038002E00310035003900000000000000000000000000
NTLM-v2-Hash

大写的用户名+域名(若处于工作组则为机器名)先转为16进制后编码成Unicode格式,然后和密码的NTLM-Hash值进行HMAC-MD5加密,首先服务端用户名转化为大写

1
administrator-->ADMINISTRATOR

将其和客户端的域名或机器名进行拼接

1
ADMINISTRATOR-->ADMINISTRATORWIN-DEK1MT75VM9

转换为16进制格式(在线转换:https://tool.hiofd.com/hex-convert-string-online)

1
ADMINISTRATORWIN-DEK1MT75VM9-->41444D494E4953545241544F5257494E2D44454B314D543735564D39

image-20250803042313720

转换成Unicode格式(即在每个字节之后添加0x00)

1
41444D494E4953545241544F5257494E2D44454B314D543735564D39-->410044004D0049004E004900530054005200410054004F005200570049004E002D00440045004B0031004D0054003700350056004D003900

使用服务端密码的NTLM-Hash值作为key和Unicode进行HMAC-MD5加密

image-20250803042439044

NTProofStr

由NTLM-v2-Hash和challenge+blob进行HMAC-MD5加密,首先challenge和blob进行拼接

1
01F04B08FC3C01720101000000000000F973F5E98EF9D9013E77AC0A7EFF1ED80000000002001E00570049004E002D004A00510049005000320043004D004A0031005600340001001E00570049004E002D004A00510049005000320043004D004A0031005600340004001E00570049004E002D004A00510049005000320043004D004A0031005600340003001E00570049004E002D004A00510049005000320043004D004A0031005600340007000800F973F5E98EF9D901060004000200000008003000300000000000000000000000003000008A6C6F94B53B5DD8EDF2E065DF724837C65998C524C615CD42F724BCF043B3610A001000000000000000000000000000000000000900280063006900660073002F003100390032002E003100360038002E003100300038002E00310035003900000000000000000000000000

NTLM-v2-Hash作为key和拼接值进行HMAC-MD5加密

image-20250803042107489

结果与抓取的NTProofStr:1A0BDAA3BAC238BF206B4C0E5FA75F13一致

blob

由时间、目标信息、随机填充字符等组成(同challenge值无法预估)

Net-NTLM Hash

Net-NTLM Hash 是基于用户密码的NTLM Hash计算出来的,用于在网络环境下 NTLM 认证的 Hash,其组成格式为

1
username::domain:challenge:NTProofStr:blob(若处于工作组domain则为机器名)

验证

服务端在收到Response后,将其和相同的方式进行加密生成的另一个Response进行对比,如果相同则验证成功,否则验证失败

image-20250803042946705

认证流量

通过wireshark进行抓包,其中实验环境包括Windows server 2019(客户端192.168.108.164)和Windows server 2008(服务端192.168.108.159),Windows server 2019(客户端)向服务端建立IPC连接

1
net use \\192.168.108.159 /u:administrator Admin@123

协商过程

筛选smb2流量分析,前四个数据包,用于协商传输协议的版本等各种信息

image-20250803043207502

第五个数据包,用于用户启动身份的验证包和一些规则

image-20250803043222551

其中规则内容在negotiate flag中

image-20250803043244379

质询过程

第六个数据包,用于发送challenge值还包含一些同意的列表

image-20250803043309597

image-20250803043332728

challenge值

第七个数据包,用于发送Response还包含账户名的相关信息

image-20250803043400357

image-20250803043527567

Response

image-20250803043541072

账户名的相关信息

验证过程

第八个数据包,用于返回验证结果

image-20250803043628914

image-20250803043644202

验证成功

image-20250803043705287

验证失败

认证缺陷

  • NTLM认证过程中使用到用户的NTLM-Hash(非明文密码),可以直接通过NTLM-Hash进行PTH攻击(哈希传递攻击)
  • NTLM中继攻击,获得Net-NTLM可以进行重放,直接认证
  • Net-NTLM破解,v1使用DES加密容易破解,v2使用MD5可以使用碰撞或暴力破解方式

kerberos认证

网络认证协议,kerberos作为一种可信任的第三方认证服务,其设计目标是通过密钥系统为客户机/服务器应用程序提供强大的认证服务,其中正常程序kerberos请求由lsass.exe发出,恶意程序则直接发出kerberos请求

image-20250803044112043

kerberos协议组成

  • 客户端(client):发送请求方
  • 服务端(Server):接收请求方(机器名后面加一个$)
  • 密钥分发中心(key distribution center/KDC):整个认证过程的票据生成管理服务(域环境中代表域控)

AS服务(Authentication Service):认证服务器,专门用来认证客户端的身份并发放客户用于访问TGS的TGT

TGS服务(Ticket Granting Service):票据授予服务器,用来发放整个认证过程以及客户端访问服务端时所需的服务授予票据

  • AD( Account Database):存储所有client的白名单,只有存在于白名单的client才能顺利申请到TGT(Ticket Granting Ticket,票据授予票据)
  • DC(Domain Controller):域控 KRBTGT,每个域控制器都有一个krbtgt账户,是KDC的服务账户,用来创建TGS加密的密钥

认证流程

客户端利用身份信息(用户名、 ip、当前时间),去AS认证(客户端向AS发送AS-REQ),AS认证通过返回TGT(AS向客户端发送AS-REP),利用TGT才可以访问TGS,才可进行下一步

image-20250803045422992

客户端收到AS的TGT,对TGT进行解密并重新封装

image-20250803045212359

客户端利用封装后的新TGT去访问TGS(客户端向TGS发送TGS-REQ),TGS收到后解密新TGT两部分检查是否存在伪造,无伪造,TGS为客户端提供服务授予票据(ST)(TGS向客户端发送TGS-REP)

image-20250803045555170

客户端收到TGS的ST,对ST进行解密并重新封装

image-20250803045609323

客户端利用封装后的新ST去访问服务端,服务端收到后解密新ST

  1. 使用服务端本地的机器用户Hash值解密新ST的第二部分,获得CS_SK
  2. 利用解密的CS_SK继续解密第一部分得到相关信息
  3. 进行对比验证,选择是否建立信任

认证流量

AS-requests

客户端提供身份信息,向AS发送AS-REQ数据包(AS-requests)

image-20250803045808221

数据包中包含一些客户端的身份信息

PA-DATA pA-ENC-TIMESTAMP

使用客户端的Hash(PTH、密码喷洒)或者AES key(PTK)加密时间戳,生成value,这里是唯一的使用加密处

image-20250803045914399

PA-DATA pA-PAC-REQUEST

用于表示是否包含了PACimage-20250803045937576

kdc-options

用于协商的字段

image-20250803045957852

cname

请求的用户名(可导致用户枚举攻击,通过返回包判断用户是否存在)

image-20250803050017715

realm

记录了域名信息

image-20250803050045450

sname

请求的服务名(第一步由于是访问AS服务即krbtgt)

image-20250803050105162

AS-response

当AS收到AS-REQ后,解密PA-DATA pA-ENC-TIMESTAMP,如果成功则发送AS-REP数据包(AS-response)

image-20250803050128579

数据包包含TGT的加密内容

ticket/enc-part

由krbtgt的Hash值加密,可破解(获得krbtgt密码可伪造成黄金票据)可能存在的攻击:黄金票据、Roasting

image-20250803050344451

enc-part

由客户端的Hash值加密

image-20250803050514185

TGS-requests

客户端利用封装后的新TGT去访问TGS,客户端向TGS发送TGS-REQ数据包(TGS-requests)

image-20250803050615519

数据包包含新TGT的加密内容

authenticator

使用CT_SK加密的内容

image-20250803050647339

ticket

原始TGT的第二部分(原封不动)

image-20250803050711384

cname

请求的用户名

image-20250803050728039

sname

请求的服务名

image-20250803050756230

TGS-response

TGS为客户端提供ST,TGS向客户端发送TGS-REP数据包(TGS-response)

image-20250803050824461

数据包包含ST的加密内容

ticket/enc-part

由server的Hash值(目标机器用户的Hash值)加密(可能存在的攻击:白银票据、kerberoasting)

image-20250803050913768

enc-part

由CT_SK进行加密

image-20250803050953656

AP-requests

客户端提供ST到服务端,客户端向服务端发送AP-REQ数据包(AP-requests)

image-20250803051015981

访问目录服务走的是SMB协议(前四个数据包用于协商)

数据包包含ST加密内容

Kerberos/enc-part

原始ST的第二部分(原封不动)

image-20250803051124270

authenticator

由CS_SK进行加密

image-20250803051152424

AP-response

服务端向客户端发送AP-REP数据包(AP-response)(可选,不一定存在的回包)

image-20250803051220918

数据包包含客户端验证服务端的相关内容

enc-part

由服务端加密

image-20250803051240504

声明:本文仅限于技术讨论与分享,严禁用于非法途径。若读者因此作出任何危害网络安全行为后果自负,与本号及原作者无关。