7.内网渗透之windows认证机制

文章参考自三好学生域渗透系列文章html

看了内网渗透第五篇文章,发现若是想要真正了解PTT,PTH攻击流程,还须要了解windows的认证机制,包括域内的kerberos协议。算法

windows认证机制

在域渗透中,横向移动最重要是对windows认证协议的理解数据库

首先介绍一下windows密码的Hash:

早期SMB协议在网络上传输明文口令,后来出现"LAN Manager Challenge/Response"验证机制,简称LM,因为容易被破解,微软提出了windows NT挑战/响应机制,称之为NTLM。如今已经有了更新的NTLM v2以及Kerberos验证体系。windows加密过的密码口令,咱们称之为hash,windows的系统密码hash默认状况下通常有两部分组成:LM-hash,NTLM-hash 。windows

NTML hash:

在windows系统中比较常见的是从系统导出来的NTLM hash,经过Hashcat可以破解出明文密码。NTLM hash一般是指windows系统下Securtiy Account Manager中保存的用户密码hash。在渗透测试中,一般可从windows系统中的SAM文件和域控的NTDS.dit文件中得到全部用户的hash,经过mimikatz读取lsass.exe进程能得到已登录用户的NTLM hash。缓存

NET-NTLM hash:

一般是指网络环境下NTLM认证中的hashsass

NTLM认证采用质询/应答(Challenge/Response)的消息交换模式,流程以下:服务器

  1. 客户端向服务器发送一个请求,请求中包含明文的登陆用户名。服务器会提早存储登陆用户名和对应的密码hash网络

  2. 服务器接收到请求后,生成一个16位的随机数(这个随机数被称为Challenge),明文发送回客户端。使用存储的登陆用户密码hash加密Challenge,得到Challenge1session

  3. 客户端接收到Challenge后,使用登陆用户的密码hash对Challenge加密,得到Challenge2(这个结果被称为response),将response发送给服务器dom

  4. 服务器接收客户端加密后的response,比较Challenge1和response,若是相同,验证成功

在以上流程中,登陆用户的密码hash即NTLM hash,response中包含Net-NTLM hash

更多NTLM认证的资料可参考:

http://davenport.sourceforge.net/ntlm.html

在NTLM认证中,NTLM响应分为NTLM v1,NTLMv2,NTLM session v2三种协议,不一样协议使用不一样格式的Challenge和加密算法

因此也就存在不一样协议的Net-NTLM hash,即Net-NTLM v1 hash,Net-NTLM v2 hash

NTLM认证

在工做组中使用的ntlm认证,若是在域中,则使用Kerberos的认证方式

工做组中:

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

域环境中:

比起工做组,域中多了一个域控的角色

 

  • 首先在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
  • 将上一步混合后的hash值跟传来的response进行比较,相同则认证成功,反之,则失败,固然,若是是本地登陆,全部验证确定也所有都直接在本地进行了

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服务器收到以后提供服务。

到这里,windows基本认证步骤完成了,横向移动的手法请移步个人第五篇文章

相关文章
相关标签/搜索