点我

枚举用户原理

Kerberos协议

提供身份信息的数据包是AS-REQ(AS-requests)

发送TGT的数据包是AS-REP(AS-response)

数据包分析

使用kekeo工具申请TGT时,进行抓包分析

AS-REQ数据包中主要包含了一些用户的信息,由客户端发送给AS的数据包,其中由几个字段信息

  • PA-DATA pA-ENC-TIMESTAMP 使用用户的hash,或者AES key加密时间戳 生成value
  • kdc-options 协商字段
  • cname 请求的用户名
  • realm: 域名
  • sname 请求的服务名

枚举原理

在AS-REQ阶段客户端向AS发送用户名,cname字段存放用户名,AS对用户名进行验证,用户存在与不存在返回的数据包信息不同。

分别有四种错误代码:

  • KRB5DC_ERR_PREAUTH_REQUIRED 需要额外的预认证(用户名存在,但没有提供密码)
  • KRB5KDC_ERR_PREAUTH_FAILED 用户名存在,但密码错误
  • KRB5DC_ERR_CLIENT_REVOKED 客户端凭证已被吊销(用户名被禁用)
  • KRB5DC_ERR_C_PRINCIPAL_UNKNOWN 在Kerberos数据库中找不到客户端(用户名不存在)

参考地址:4771 (F) Kerberos 预身份验证失败。 (Windows 10) - Windows security | Microsoft Learn

可以利用返回的KRB5DC_ERR_PREAUTH_REQUIRED或KRB5KDC_ERR_PREAUTH_FAILED 错误代码,进行枚举用户名。

如果提供正确的账户密码,在Kerberos数据包中就会出现msg-type:krb-as-rep字段。

数据包中的PA-DATA字段是由NTLM-HASH或AES KEY加密的,故原理上明文密码、NTLM-HASH、AES256都可以进行喷洒。

参考脚本代码

https://github.com/3gstudent/pyKerbrute/blob/master/EnumADUser.py

关键代码

注意事项

1、域环境中可以使用Kerberos和NTLM协议进行喷洒域内用户

2、工作组中可以使用NTLM协议进行hash碰撞

工具

kerbrute

kerbrute由Go语言开发,github已提供编译好的文件

地址:https://github.com/ropnop/kerbrute/releases

用法

用户名枚举

kerbrute.exe userenum --dc 域控IP -d 域名 用户字典

密码喷洒(单密码,多用户,有锁定策略)

kerbrute.exe passwordspray --dc 域控IP -d 域名 用户字典 密码

密码喷洒(多密码,单用户,无锁定策略)

kerbrute.exe bruteuser --dc 域控IP -d 域名 密码字典 用户名

pykerbute

python2编写,注意运行环境

用法

用户名枚举

EnumADUser.py IP地址 域名 用户名字典 tcp或udp

密码喷洒-明文密码

ADPwdSpray.py IP地址 域名 用户名字典 clearpassword 明文密码 tcp或udp

密码喷洒-hash值

ADPwdSpray.py IP地址 域名 用户名字典 ntlmhash hash值 tcp或udp
ADPwdSpray.py 192.168.110.10 xbxaq.com user.txt ntlmhash DB40247DAB331AC57C207032F198F364 tcp

NTLM哈希 - 工具匠 (toolkk.com)

工作组和域内喷洒区别

工作组中机器

  • 工作组机器-使用NTLM协议
  • 域内机器-使用Kerberos或者NTLM协议

域内机器

  • 域内机器-kerberos协议
  • 工作组机器-NTLM协议
分类: 内网渗透

评论

-- 评论已关闭 --

目录