内网安全--AS-REP Roasting攻击

AS-REP Roasting是一种对用户账号进行离线爆破的攻击方式。但是该攻击方式利用比较局限,因为其需要用户账户设置“不要求Kerberos预身份验证”选项,而该选项是默认没有勾选上的。Kerberos预身份验证发送在Kerberos身份验证的第一阶段(AS_REQ&AS-REP),它的主要作用是防止密码离线爆破。默认情况下,预身份验证是开启的,KDC会记录密码错误次数,防止在线爆破。
当关闭了预身份验证后,攻击者可以使用指定用户向域控的88Kerberos端口去请求票据,此时域控不会作任何验证就将TGT认购权证和该用户Hash加密的Login Session Key返回。因此攻击者就可以对获取到的 用户Hash加密的Login Session Key进行离线破解,如果字典足够强大,就能破解得到该指定用户的明文密码。

AS-REP Roasting攻击过程

AS-REP Roasting攻击前提条件:

  • 域用户设置了“不要求kerberos预身份验证”
  • 需要一台可与KDC进行通信的主机/用户

image.png
针对AS-REP Roasting攻击主要分为两步:
1、获取AS-REP响应包中用户Hash加密的Login Session Key。
2、对上一步获得的Login Session Key进行解密。

1、获取Hash

第一步,先获取 AS-REP 响应包中用户 Hash 加密的 Login Session Key, 也就是 AS-REP 响应包中最外层 enc-part 里面的 cipher 部分。获取 AS-REP 响应包中用户 Hash 加密的 Login Session Key 有很多工具,以下演示几个工具的用法。

1)Rubeus

如果当前主机在域内的话,可以通过执行如下命令裕兴Rubeus,该工具会自动搜索域内设置了“不要求kerberos预身份验证的用户”,并以该用户身份发送AS-REQ请求,由于不需要预身份验证,所以KDC会直接返回AS-REP回复包,然后该工具会将AS-REP响应包中返回的用户Hash加密的Login Session Key以John能破解的格式保存为hash.txt。

Rubeus.exe asreproast /format:john /outfile:hash.txt

2)ASREPRoast.ps1脚本

如果当前主机在域内的话,通过执行如下命令导入 ASREPRoast.ps1 脚本并进行操作。该脚本会自动搜索域内设置了不要求 Kerberos 预身份验证的域用户, 并以该用户身份发送 AS-REQ 请求,由于不需要预身份验证,所以域控会直接返回 AS-REP 回复包。然后该工具会打印出不要求 Kerberos 预身份验证的用户名,DN以及用户 Hash 加密的 Login Session Key 也就是 Hash。然后我们使用 select 语句过滤出 Hash。

Import-Module .\ASREPRoast.ps1
Invoke-ASREPRoast | select -ExpandProperty Hash

3)非域内机器

对于非域内的机器,就无法通过上面两种方式来获取Hash了。所以想要获取域内设置了“不需要kerberos预身份验证”的域内账号,可以使用ADFind执行如下命令来进行过滤查询,这个前提也得拥有一个有效的域用户账号和密码。查询出设置了“不需要kerberos预身份验证”的域内账号之后,再使用ASREPRoast.ps1脚本或impacket 下的 GetNPUsers.py 脚本获取针对指定用户的用户 Hash 加密的 Login Session Key 也就是 Hash。

adfind -h 192.168.1.1:389 -u test\hack -up P@ss1234 -f "useraccountcontrol: 1.2.840.113556.1.4.803:=4194304" -dn

然后运行如下命令调用 ASREPRoast.ps1 脚本获取针对指定用户 test 的用户 Hash 加密的 Login Session Key 也就是 Hash,该格式可以被 John 直接爆破。

Import-Module .\ASREPRoast.ps1
Get-ASREPHash -UserName test -Domain test.com -Server 192.168.1.1 | Out-File -Encoding ASCII hash.txt

也可以使用 impacket 下的 GetNPUsers.py 脚本,只需要把上一步过滤出的设置了 “不需要 kerberos 预身份验证” 的域内账号写在 users.txt 文件中即可运行如下命令获取针对指定用户 test 的用户 Hash 加密的 Login Session Key 也就是 Hash,该格式可以被 John 直接爆破。

python3 GetNPUsers.py -dc-ip 192.168.1.1 -usersfile users.txt -format john test.com/

或者可以直接进行盲爆,这就不需要有效的域用户账号密码。适用于攻击者在域外且没有一个有效的域账号密码。通过将大量用户写在 users.txt 文件中,运行如下命令自动获取指定 users.txt 文件中的用户是否设置了 “不需要 kerberos 预身份验证” 属性,并获取设置了 “不需要 kerberos 预身份验证” 账号的用户 Hash 加密的 Login Session Key

python3 GetNPUsers.py -dc-ip 192.168.1.1 -usersfile users.txt -format john test.com/

2、爆破Hash

可以执行如下命令使用 John 对第一步获取到的 Hash 进行爆破,但是爆破 的成功与否也与我们的字典强度有关。

john --wordlist=/opt/pass.txt hash.txt

而如果想用 hashcat 进行爆破的话,由于第一步获取的 hash 格式并不能直接被 hashcat 所爆破,所以我们得手动添加 $23 到如图所示位置。
image.png
然后执行如下命令使用 hashcat 爆破。

hashcat -m 18200 hash.txt pass.txt --force

AS-REP Roasting攻击防御

  • 检测域中是否存在设置了“不要求kerberos预身份验证”属性的用户。如果存在,将该属性取消勾选
  • 在日志方面进行查看的话,重点关注事件ID为4768(请求Kerberos身份验证服务)的日志。如果有过多的4768日志,可以对该事件ID为4768的日志进行筛选,主要筛选出预身份验证类型为0的日志

image.png

相关推荐

  1. 横向渗透一般攻击技巧

    2024-04-11 13:38:01       41 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-11 13:38:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-11 13:38:01       101 阅读
  3. 在Django里面运行非项目文件

    2024-04-11 13:38:01       82 阅读
  4. Python语言-面向对象

    2024-04-11 13:38:01       91 阅读

热门阅读

  1. jvm堆知识

    2024-04-11 13:38:01       35 阅读
  2. vue 配置 postcss-px2rem

    2024-04-11 13:38:01       36 阅读
  3. 数据分析 -- pandas

    2024-04-11 13:38:01       37 阅读
  4. 题目 3033: 放苹果

    2024-04-11 13:38:01       33 阅读
  5. 智能成绩表---重点 覆写comparator排序的compare函数

    2024-04-11 13:38:01       40 阅读
  6. TCP的四次挥手

    2024-04-11 13:38:01       34 阅读
  7. uniapp 打包为APP scss 层级嵌套不生效

    2024-04-11 13:38:01       34 阅读
  8. Mybatis中sqlSession.getMapper背后的原理

    2024-04-11 13:38:01       40 阅读
  9. 编程:不只是工作,是我生活的一部分

    2024-04-11 13:38:01       30 阅读
  10. vue 加载动态组件

    2024-04-11 13:38:01       32 阅读