0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Kerberos协议之AS_REQ & AS_REP

Last updated at Posted at 2020-11-09

简述Kerberos

Kerberos是一种由MIT(麻省理工大学)提出的一种网络身份验证协议。它旨在通过使用密钥加密技术为客户端/服务器应用程序提供强身份验证。

在Kerberos协议中主要是有三个角色的存在:

  1. 访问服务的Client(以下表述为Client 或者用户)
  2. 提供服务的Server(以下表述为服务)
  3. KDC(Key Distribution Center)密钥分发中心 kerberos 测试工具介绍

其中KDC服务默认会安装在一个域的域控中,而Client和Server为域内的用户或者是服务,如HTTP服务,SQL服务。在Kerberos中Client是否有权限访问Server端的服务由KDC发放的票据来决定。

kerberos的简化认证认证过程如下图
image.png

  1. AS_REQ: Client向KDC发起AS_REQ,请求凭据是Client hash加密的时间戳
  2. AS_REP: KDC使用Client hash进行解密,如果结果正确就返回用krbtgt hash加密的TGT票据,TGT里面包含PAC,PAC包含Client的sid,Client所在的组。
  3. TGS_REQ: Client凭借TGT票据向KDC发起针对特定服务的TGS_REQ请求
  4. TGS_REP: KDC使用krbtgt hash进行解密,如果结果正确,就返回用服务hash 加密的TGS票据(这一步不管用户有没有访问服务的权限,只要TGT正确,就返回TGS票据)
  5. AP_REQ: Client拿着TGS票据去请求服务
  6. AP_REP: 服务使用自己的hash解密TGS票据。如果解密正确,就拿着PAC去KDC那边问Client有没有访问权限,域控解密PAC。获取Client的sid,以及所在的组,再根据该服务的ACL,判断Client是否有访问服务的权限。

本文注重前两个

AS_REQ

用daiker师傅的工具来发Kerberos包。

配置域账户
image.png

勾上PAPAC_REQUESTENCTIMESTAMPetypes里的rc4hmac加密。发包

image.png

抓包可见两个请求包AS-REQ AS-REP
image.png

AS-REQ中各个字段

  1. pvno Kerberos版本
  2. msg-type Kerberos类型 0x0a对应krb-as-req
  3. padata 存放了PA-ENC-TIMESTAMP和PA-PAC-REQUEST
    3.1 PA-ENC-TIMESTAMP是预认证,使用用户hash加密时间戳,AS存放了用户的hash,AS用用户hash解密获得时间戳。如果时间戳在某一个时间则认证成功。
    3.2 PA-PAC-REQUEST是微软引入的PAC拓展,include-pac=true,KDC会根据include的值来判断返回的票据中是否携带PAC。
  4. req-body
    image.png
    4.1 cname
    PrincipalName 类型。PrincipalName包含type和value。
    KRB_NT_PRINCIPAL = 1 意思是只用用户名就行,比如admin@test.local这个域用户,只需要填admin
    KRB_NT_SRV_INST = 2 service and other unique instance (krbtgt) 这个一般指服务账户名
    KRB_NT_ENTERPRISE_PRINCIPAL = 10 admin@test.local用户全称。
    4.2 sname PrincipalName 类型 在AS_REQ里面sname是krbtgt,类型是KRB_NT_SRV_INST
    4.3 till 到期时间
    4.4 nonce 随机数
    4.5 etype hash加密类型

AS-REP

image.png

KDC使用用户hash解密,如果结果正确返回用krbtgt hash加密的TGT票据。
image.png

各个字段的含义

  1. msg-type krb-as-rep 对应的是0x0b
  2. crealm 域名
  3. cname 用户类型和用户名
  4. ticket tgt票据 这里存在黄金票据的问题,因为返回的tgt是通过krbtgt的hash加密的,如果知道krbtgt的hash,则可以伪造任意用户。
  5. enc-part 这部分可以用daiker师傅的工具解密。key是用户hash,解密后得到Encryptionkey。
    image.png

参考

  1. https://daiker.gitbook.io/windows-protocol/kerberos/1
  2. https://github.com/daikerSec/windows_protocol/tree/master/tools

吹爆daiker师傅

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?