SPN简介
SPN是服务器上所运行服务的唯一标识,每个使用Kerberos的服务都需要一个SPN
SPN分为两种
- 注册在AD上机器帐户(Computers)下
- 注册在域用户帐户(Users)下
当一个服务的权限为Local System或Network Service,则SPN注册在机器帐户(Computers)下
当一个服务的权限为一个域用户,则SPN注册在域用户帐户(Users)下
SPN格式
使用Windows内置的Setspn工具可以读取、修改和删除SPN目录属性。
这里注册了 Setspn.exe -A MSSQLSvc/dc1.ninitom.cn:1433 web MSSQLSvc的spn,将分配给web这个账户
SPN查询
spn查询实际上是通过ldap协议查询的,那么当前用户必须是域用户或者是机器账户。
setspn -q /
setspn -T test.local -q /
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
使用powershell模块Active Directory(域控默认安装)
import-module ActiveDirectory
get-aduser -filter {AdminCount -eq 1 -and (servicePrincipalName -ne 0)} -prop * |select name,whencreated,pwdlastset,lastlogon
域内的主机都是可以查询spn,任何一个域用户都是可以去申请TGS票据,而我们爆破的话应该选择域用户进行爆破,因为机器用户的口令无法远程连接