前言
对AD域攻击的前期,在没有任何域内据点或域用户凭据时,攻击者往往会使用用户名枚举、密码爆破、密码喷洒、Roasting等手段进行域用户凭据的窃取,本篇文章将针对AD域攻击时无权限环境下对域用户的信息收集及凭据窃取进行分析。
用户名枚举&密码爆破/喷洒
在 Kerberos 协议认证的 AS-REQ 阶段,cname 的值是用户名。当用户不存在时,返回包提示错误。当用户名存在,密码正确和密码错误时,AS-REP的响应内容不一样。所以可以利用这点,对域内进行域用户枚举和密码喷洒等攻击。
用户枚举
正常域用户登录主机,我们可以通过 net user /domain来列举出域内的用户。但是当我们用非域用户进行登录时,是不能使用 net user /domain这条命令的。而当主机不在域内但是能与域控通信时,我们可以通过域内用户枚举来探测域内的用户。
在AS-REQ阶段客户端向KDC发送用户名,KDC对用户名进行验证,用户存在和不存在返回的数据包不一样。
当用户名存在,密码错误:返回KRB5DC_ERR_PREAUTH_REQUIRED,并携带e-data数据。
当用户名不存在:返回KRB5DC_ERR_C_PRINCIPAL_UNKNOWN,不携带e-data数据。
密码喷洒/密码爆破
在大多数域内会使用密码策略,密码错误尝试次数超过指定次数后会导致账号被锁定,因此在实战环境中密码爆破应用较少,我们在此不展开做过多的介绍。
密码喷洒顾名思义是用一个密码去碰撞很多账号,此方法能有效的避免账号被锁定的问题,因此可以通过用户名枚举获取到域内用户后,使用通用密码进行喷洒攻击。
在确认用户存在后,客户端又会发送一个AS-REQ请求,如果密码正确,则返回AS-REP。否则返回 KRB5KDC_ERP_PREAUTH_FAILED
密码正确:
密码错误:
kerberoasting
我们简单回顾服务票据的请求流程,当域内用户去请求域内某个服务资源时,先会通过AS-REQ进行身份认证,通过后会返回TGT给用户,用户使用TGT发起TGS请求,KDC会返回一个用对应服务账户的Hash加密的服务票据。那么如果我们有一个域用户