SPN在域环境中的应用
0X01 SPN
服务主体名称(SPN)是Kerberos客户端用于唯一标识给特定Kerberos目标计算机的服务实例名称。Kerberos身份验证使用SPN将服务实例与服务登录帐户相关联。如果在整个林中的计算机上安装多个服务实例,则每个实例都必须具有自己的SPN。如果客户端可能使用多个名称进行身份验证,则给定的服务实例可以具有多个SPN。例如,SPN总是包含运行服务实例的主机名称,所以服务实例可以为其主机的每个名称或别名注册一个SPN。
0x02 SPN格式
SPN = serviceclass “/” hostname [“:”port] [“/” servicename]
serviceclass 服务组件名称
hostname 计算机名和域
0x03 常见的SPN服务
setspn.exe -T kuaile -q */* //查找域kuaile的所有SPN服务
以CN开头的每一行代表一个帐户,其下的信息是与该帐户相关联的SPN
对于上面的输出数据,机器帐户(Computers)为:
- CN=DC1,OU=Domain Controllers,DC=test,DC=com
- CN=COMPUTER01,CN=Computers,DC=test,DC=com
域用户帐户(Users)为:
- CN=krbtgt,CN=Users,DC=test,DC=com
- CN=MSSQL Service Admin,CN=Users,DC=test,DC=com
注册在域用户帐户(Users)下的SPN有两个:kadmin/changepw
和MSSQLSvc/DC1.test.com
MSSQL 服务的示例代码如下:
MSSQLSVC /computer1.sun.com:1433
MSSQLSVC MSSQL服务
computer1.sun.com 主机名是computer1 域名是sun.com
端口是1433
Exchange 服务的实例代码如下:
exchangeMDB/EXCAS01.sun.com
RDP如下
TERMSERV/EXCAS01.sun.com
WSMan/WinRM/PSRemoting
WSMAN/EXCAS01.sun.com
0x04 进行SPN扫描的powershell脚本
Powershell-AD-Recon 提供了一系列的服务与服务登录账号和运行服务之间的对应关系,链接如下:https://github.com/PyroTek3/PowerShell-AD-Recon
利用powerview 进行扫描
Get-NetUser -SPN //获取当前目标域中所有以域用户身份起服务的 SPN