SPN简介

SPN是服务器上所运行服务的唯一标识,每个使用Kerberos的服务都需要一个SPN
SPN分为两种

  1. 注册在AD上机器帐户(Computers)下
  2. 注册在域用户帐户(Users)下

当一个服务的权限为Local System或Network Service,则SPN注册在机器帐户(Computers)下
当一个服务的权限为一个域用户,则SPN注册在域用户帐户(Users)下

SPN格式

/:/
必选参数:标识服务类的字符串常常有www,ldap,smtp,dns等:服务所在主机名称:服务端口:服务名称
使用Windows内置的Setspn工具可以读取、修改和删除SPN目录属性。
这里注册了 Setspn.exe -A MSSQLSvc/dc1.ninitom.cn:1433 web MSSQLSvc的spn,将分配给web这个账户
image.png

SPN查询

spn查询实际上是通过ldap协议查询的,那么当前用户必须是域用户或者是机器账户。
setspn -q /
setspn -T test.local -q /
image.png
CN=Users的是域账户注册的SPN,CN=Computers是机器账户。

SPN扫描

在攻击的过程中可以通过spn来获取想要的信息,获取域内主机安装了哪些服务,不需要去扫描大量的端口。相对端口扫描的隐蔽性更高。

powerview.ps1

https://github.com/PowerShellMafia/PowerSploit/blob/dev/Recon/PowerView.ps1
Import-module .\powerview.ps1
Get-NetUser -SPN
image.png

使用powershell模块Active Directory(域控默认安装)

import-module ActiveDirectory
get-aduser -filter {AdminCount -eq 1 -and (servicePrincipalName -ne 0)} -prop * |select name,whencreated,pwdlastset,lastlogon

image.png
域内的主机都是可以查询spn,任何一个域用户都是可以去申请TGS票据,而我们爆破的话应该选择域用户进行爆破,因为机器用户的口令无法远程连接