windows认证机制

哈希处理

Windows系统默认使用两种方法对用户的密码进行哈希处理,它们分别是 LAN Manager(LM)哈希和 NT LAN Manager(NTLM)哈希。hash就是使用一种加密函数对其进行加密。这个加密函数对一个任意长度的字符串数据进行一次数学加密函数运算,然后返回一个固定长度的字符串。Windows加密过的密码口令,我们称之为hash,Windows的系统密码hash默认情况下一般由两部分组成:第一部分是 LM-hash,第二部分是 NTLM-hash。在windows2000以后的系统中,第一部分的LM-hash 都是空值,因为LM-hash可以很容易的破解,所以windows2000之后这个值默认为空,所以第二部分的NTLM-hash才真正是用户密码的哈希值。现在已经有了更新的NTLM v2以及Kerberos验证体系。

LM-hash

LAN Manager(LM)哈希是Windows系统所用的第一种密码哈希算法。它只有唯一一个版本且一直用到NTLAN Manager(NTLM)哈希的出现,NTLM哈希用Windows 2000及其之后系统中。新版操作系统因兼容缘故仍然支持LM哈希算法。但是在Windows Vista和Windows 7 开始,LM-hash是默认关闭的。
LM加密过程
口令大写
转换为HEX(十六进制)
用0补齐14字节(112bit)
两组分组
每组7字节HEX转为二进制,每7bit一组末尾加0,再转换成十六进制组成得到2组8字节的编码
两组8字节编码,分别作为DES加密key为字符串“KGS!@#$% ”进行加密
两组DES加密后的编码拼接

NTLM-hash

New Technology LAN Manager(NTLM)哈希算法是微软认可的另一种算法。Windows2000以后的 windows 系统都是用 NTLM-hash 处理用户的密码。在渗透测试中,通常可从windows系统中的SAM文件和域控的NTDS.dit文件中获得所有用户的hash,通过mimikatz读取lsass.exe进程能获得已登陆用户的NTLM hash。
NTLM加密过程
密码换成HEX
HEX字符串进行ASCII转Unicode
Unicode字符串进行标准MD4单向哈希加密
NTLM认证

客户端发起认证请求
服务端收到认证请求,向客户端发送随机数(chanlleng/挑战)
客户端使用NTLM Hash打乱该随机数,生成Net-NTLM Hash,发送回服务端 (这里会造成pth攻击)

kerberos协议

在域环境中,Kerberos协议被用来作身份认证,下图是详细的认证过程:
在这里插入图片描述

KDC(Key Distribution Center):密钥分发中心里面包含两个服务:AS和TGS
AS(Authentication Server):身份认证服务
TGS(Ticket Granting Server):票据授予服务
TGT(Ticket Granting Ticket):由身份认证服务授予的票据,用于身份认证,存储在内存,默认有效期为10小时
Pass The Ticket:如果我们能够拿到用户的TGT,并将其导入到内存,就可以冒充该用户获得其访问权限

详细认证过程,分为三个步骤:
第一:从AS服务器中获取TGT票据
用户在客户端输入账号和密码之后,会对密码进行hash处理,作为user-secret-key

  1. 客户端将用户名发送给AS服务器申请服务,在AS服务器中会对用户名进行验证,在AS服务器本地数据库中查询到该用户名的密码,并使用hash生成user-secrect-key.
  2. AS服务器向用户发送两样东西:
    1) Client/TGS会话密钥,使用user-secrect-key进行加密
    2) TGT,包含TGS会话密钥,用户信息,时间戳,TGT有效期。使用TGS密钥进行加密
  3. 用户接收到消息之后,会使用本地的user-secret-key对消息1)进行解密,如果解密成功,说明用户提供的凭证是正确的,此时用户得到了加密后的TGT。

第二:从TGS服务器中获取访问权限

  1. 客户端向TGS服务器发送信息:
    1) 第一步骤中的TGT
    2) 认证信息(认证符(Authenticator)),包含用户id以及时间戳,通过TGS会话密钥进行加密。
  2. TGS服务器收到消息之后,会使用TGS密钥对消息1)进行解密,获取到TGS会话密钥,进而对消息2)进行解密,在对用户id以及时间戳进行认证,如果认证成功,向客户端发送消息:
    1) client-server-ticket(包含SS会话密钥,用户名信息以及时间戳),使用ss密钥进行加密
    2) ss会话密钥使用TGS会话密钥进行加密
  3. 客户端收到信息之后会对消息2)进行解密,获得ss会话密钥。

第三:访问服务

  1. 客户端向ss服务器发送以下消息:
    1)第二步骤中的client-server-ticket
    2)新的Authenticator,包含用户信息,时间戳。通过SS会话密钥进行加密
  2. SS服务器收到消息之后,会使用ss密钥对消息1)进行解密,解密之后使用ss会话密钥对消息2)解密,解密成功之后会得到authenticator,认证之后,发送:
    1)新时间戳,Client发送的时间戳加1,通过ss会话密钥进行加密
  3. 客户端收到时间戳之后,解密确认,成功之后发送服务请求
  4. ss服务器收到之后提供服务。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值