点我
用户枚举与喷洒
枚举用户原理
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协议
- 域内机器-使用Kerberos或者NTLM协议
域内机器
- 域内机器-kerberos协议
- 工作组机器-NTLM协议
分类:
内网渗透
版权申明
本文系作者 @小白学安全 原创发布在 xbxaq.com 站点,未经许可,禁止转载!
评论