Kerberos协议与域用户爆破

Kerberos协议

Kerberos是由MIT大学提出的一种网络身份验证协议,旨在通过使用密钥加密技术为C/S应用程序提供强身份验证。其实现涉及到密钥分发与密钥共享的概念。

Kerberos是基于对称加密体制(Needham-Schroeder认证协议) 的第三方认证机制,其中用户和服务依赖于第三方(Kerberos 服务器)来对彼此进行身份验证,它有两个版本v4和v5。Kerberos认证时可以使用UDP或TCP协议。

Kerberos主要有三个角色组成

1) KDC (服务器本身称为密钥分发中心)

2) AS (Authentication Server)认证服务器

3) TGS (Ticket Granting Server)票据授权服务器

Kerberos认证过程

一共分为6个步骤

  1. KRB_AS_REQ:users->AS 发送Authenticator1(users密码加密TimeStamp)
  2. KRB_AS_REP:AS->users 发送users密码加密的sessionkey-as 和tgt(kdc密码加密的sessionkey-as和TimeStamp)
  3. KRB_TGS_REQ:users->TGS 发送Authenticator2 (sessionkey-as加密TimeStamp) 和tgt(kdc密码HASH加密的sessionkey-as和TimeStamp)
  4. KRB_TGS_REP:TGS->users 发送密文1(sessionkey-as加密sessionkey-tgs) 和ST(Server密码HASH加密sessionkey-tgs)
  5. KRB_AP_REQ:users->server 发送Authenticator3(sessionkey-tgs加密TimeStamp) 和ST(Server密码加密sessionkey-tgs)
  6. KRB_AP_REP:server->users Server通过自己的密码解密ST,sessionkey-tgs,再用sessionkey-tgs解密Authenticator3得到TimeStamp,验证正确返回验证成功的特征

域用户爆破

在进行密码爆破的时候,我们只需利用AS认证过程。

客户端发送AS-REQ

AS响应

在Kerberos 5之前,Kerberos允许不使用密码进行身份认证,而在Kerberos 5中,密码信息不可或缺,这种过程称之为“预认证”。可能出于向前兼容考虑,Kerberos在执行预认证之前,首先会尝试不使用密码进行身份认证,因此在登录期间,发送初始AS-REQ后我们总是能看到一个错误信息。

第一次发送空密码的请求

第二次发送带加密hash的请求

认证失败,error-code:eRR-PREAUTH-FAILED(24)

认证成功,直接响应AS-REP并返回tgt

工具

kerbrute

pyKerbrute