相关概念
keberos协议进行身份验证的网络中,内置账号或者用户账号下为服务器注册SPN.对于内置账号,SPN进行自动注册
域环境中的每台服务器都需要在kerberos身份验证服务中注册SPN,攻击者可以直接向域控制器发送查询请求,从而知道需要使用的服务资源在哪台机器上。
例子
当用户访问mssql服务,系统以当前身份向域控查询SPN=mssql的记录.找到SPN后,再次与KDC通信,将KDC发放的TGT作为身份平局发送给DKC,并将访问的SPN发送给KDC.KDC中的身份验证服务AS对TGT进行解密.再用TGS将一张允许访问该SPN对应的服务票据和该SPN所对应的服务地址发送给用户.用户根据此票据访问相应的mssql服务
SPN命令格式
serviceclass 服务组件名称 必选参数
port :冒号分隔,该服务监听的端口号
MSSQLSVC/computer1.pentest.com:1433
RDP --- TERMSERV/EXCAS01.tentest.com
用于SPN扫描的powershell脚本
Powershell-AD-Re工具提供了服务与服务登录账号,运行服务的主机之间的对应,包括但不限于mssql,exchange,rdp,winrm。
1.利用SPN发现域内所有mssql服务 import-module .\Discover-SMSSQLServers.ps1 Discover-SMSSQLServers 2.扫描域中的所有SPN信息 import-module .\discover-psinterrestingServices Discover-PSInterestingServices
不使用脚本列出windows存在的spn信息
kerberoast攻击
需要使用某个特定资源向TGS发送kerveros服务票据请求,用户首先得具有有效身份权限的TGT向TGS请求相应服务的票据.当TGT被验证有效并且具有该服务权限时,会向用户发送一张票据。
成因:大多数是因为域环境策略不够严格(没有给计算机服务账号设置密码过期时间服务账号的权限过高;计算机账号的密码与普通域用户账号密码相同,因此计算机服务账号的密码很容易收到keberoast的攻击
1.手动配置spn服务
setspn -A TermService/computer1.hacktb.com:7778(选填 hacktb(运行账户的名称
#查看用户运行了什么服务
setspn -L hacktb.com/hacktb
#列出所有spn服务
setspn -T domain -q */*
2.配置指定服务的登录权限
windows-安全选项/本地策略 安全选项 --服务选项 网络安全
add-type -assemblyName system.identitymodel
#解析
使用add-type -assemblyName system.identitymodel可以将IdentityModel程序集引入当前脚本或会话中,以便在脚本中使用其中的类和方法。这通常用于开发需要身份验证、身份验证和授权的应用程序。
- add-type:PowerShell命令,用于将指定程序集添加到当前会话的运行时中。
- -assemblyName system.identitymodel:指定需要添加的程序集名称,这里是IdentityModel程序集。通过此参数,PowerShell可以找到并加载程序集。
new-object system.identitymodel.tokens.kerberosRequestor securitytoken -argumentlist "TermService/computer1.hacktb.com"
#解析
new-object system.identitymodel.tokens.kerberosRequestor securitytoken -argumentlist "TermService/computer1.hacktb.com" 是一个PowerShell命令,用于创建一个kerberosRequestor对象,该对象可用于在Windows身份验证确认协议中请求Kerberos令牌。此命令的参数解释如下:
- system.identitymodel.tokens.kerberosRequestor:KerberosRequestor类的完整名称,表示我们要创建的对象的类型。
- securitytoken:构造函数的参数名称,用于传递从安全性令牌中获得的令牌数据。这个参数是自定义的
- -argumentlist:用于将参数值传递给新对象构造函数的参数名称。
5.mimikatz导出票据
导出保存到当前目录下的一个kirbi文件,加密方式为RC6_HMAC_MD5
python tgsrepcrack.py 离线破解票据的ntlm hash