标签:
0x01 为什么要理解windows 安适认证机制:加深对后续各类缝隙操作的理解深度,还是那句话,要知其然,更要知其所以然,不空话,咱们直接开始
0x02 windows认证协议主要有以下两种:基于ntlm的认证方法,主要用在早期的windows事情组环境中,认证的过程也相比拟较简单
另一种是基于Kerberos的认证方法,主要用在域环境中,下面就这两种差此外认证方法做些简要的通信流程说明
0x03 关于ntlm认证流程简要说明,如下: 0x04 从图中我们可以清晰的看到,ntlm在域中的认证过程主要分为以下几步:第一步,首先在client输入username,password和domain,然后client会把password hash后的值先缓存到本地 第二步,之后,client把username的明文发送给server(DC) 第三步,DC会生成一个16字节的随机数,即challenge(挑战码),再传回给client 第四步,当client收到challenge以后,会先复制一份出来,然后和缓存中的暗码hash再一同混合hash一次,混合后的值称为response,之后client再将challenge,response及username一并都传给server 第五步,server端在收到client传过来的这三个值以后会把它们都转发给DC 第六步,当DC接到过来的这三个值的以后,会按照username到域控的账号数据库(ntds.dit)里面找到该username对应的hash,然后把这个hash拿出来和传过来的challenge值再混合hash 第七步,将(6)中混合后的hash值跟传来的response进行对照,不异则认证告成,反之,则掉败,固然,如果是本地登录,所有验证必定也全部都直接在本地进行了
0x05 关于ntlm的一点小结:
它是一种基于挑战(challenge)/响应(response)动静交互模式的认证过程,从整个认证过程来看,安适确实不怎么到位,也就是说入侵者只需要拿到一个系统打点员的hash,直接给dc认证就好了,横竖账户名和域名都知道,早期的pass the hash (psexec)确实就是通过这种方法来进行的,如果本地打点员的账号暗码不异,其实不用暗码一样可以被认证,我们所要做的就是不停通过这种方法来测验考试拓展内网的其他机器,直到控制整个域,但后来的kb2871997,似乎转变了一些现状,但也可能只是似乎
相对付ntlm而言,kerberos的认证方法就要庞大的多,因为它供给了一个集中式的认证方法,在整个认证过程中总共要涉及到三方:客户端,处事端和KDC [Key
Distribution Center 密钥分发中心], 在Windows域环境中,KDC的角色由DC(Domain Controller[域控])来负担卖力,Kerberos是一种基于单据的认证方法,单据(Ticket)是用来安适的在认证处事器和用户请求的处事之间通报用户的身份,同时也会通报一些附加信息,用来保证使用Ticket的用户必需是Ticket中指定的用户,Ticket一旦生成,在保留时间内可以被Client多次使用来申请同一个Server的处事(单据窃取问题)
说到这里,我们概略也能大白,域中的客户端要想访谒同域中的某个处事器资源时,需要首先采办该处事端承认的单据,也就是说,客户端在访谒处事器之前需要预先买好票,期待处事验票之后才华入场,但是这张票不能直接采办,还需要一张认购权证,也就是说客户端在买票之前需要预先获得一张认购权证,这张认购权证和进入处事器的入场券均有KDC发售,下面就以下图来做简要说明:
1)首先,客户端(client)将域用户的暗码hash一次并生存,然后,以此hash来作为客户端和KDC之间的恒久共享密钥[kc](固然,在DC上也生存着同样的一条hash) 2)之后,客户端(client)开始操作(1)中的域用户暗码hash再把时间戳,clientid,TGS id等信息混合hash一次,然后向as(认证处事器 [Authentication Server])处事器进行请求 3)as接到该请求后,操作恒久共享密钥(kc)进行解密,解告密成后,会返回给客户端两个单据 (1)加密的K(c,tgs)(用于客户端后续向KDC倡议请求),TGS Name/ID,时间戳等,该单据由Kc加密 (2)单据授予单据(Ticket Granting Ticket,简称TGT),该单据是给TGS的,单据的内容包孕K(c,tgs),Client身份信息,域名,时间戳等,该单据由TGS的秘钥加密,只有TGS能够解密 4)然后,客户端会操作恒久共享密钥解密k(c,tgs),并操作该秘钥加密生成一个Authenticator,内容包孕:lifetime,时间戳,Client身份信息等,连同从AS获取的TGT一并发送给TGS 5)TGS操作自身的秘钥解密TGT,获取K(c,tgs),并用K(c,tgs)解密客户端发送的Authenticator,对Client进行认证,如果Client通过了认证,TGS随机生成一个Session Key K(c,s),并孕育产生两个单据 (1)处事单据(Ts):这是给处事器的处事单据,由Server秘钥Ks加密,内容包孕:K(c,s),Client身份信息,Service ID,时间戳,lifetime等 (2)客户端单据(Tc):该单据由K(c,tgs)加密,内容包孕:K(c,s),Server身份信息等 6)客户端收到tgs的回应后,操作K(c,tgs)解密Tc,获取K(c,s),Server身份信息等,并操作K(c,s)加密生成一个Authenticator发送给Server,内容包孕:时间戳,Client ID等信息,连同Ts一并发送给Server 7)Server端在收到Client的请求后,操作自身秘钥Ks解密Ts,得到K(c,s),再操作K(c,s)解密Authenticator,对Client进行认证,如果认证通过,则暗示KDC已经允许了这次通信,此时Sever无需与KDC通信,因为Ks为KDC和Sever之间的恒久共享秘钥,如果在有效时间内,则这次请求有效
0x08 关于kerberos操作要领: