SPN

域渗透-SPN

SPN:服务主体名称

SPN是使用kerberos协议的网络的服务的唯一标识符,每一个使用kerberos的服务都要有一个SPN。

当用户要访问某个服务:

首先向域控查询服务的SPN,得到SPN后与KDC进行通信,将TGT给KDC,KDC的TGS验证TGT的合法性,验证无误后TGS就发一个可以访问对应服务SPN的ST票据给用户,并返回服务的地址。用户可以使用ST票据去访问对应服务。

从上诉流程可见,通过向域控查询SPN(ldap查询)有助于渗透人员发现服务的主机。SPN识别是kerberoasting 攻击的第一步。

查看当前域内SPN命令:

setspn.exe -q */*

查看xx域内SPN命令

setspn.exe -T xx -q */*

SPN类型

1.注册在AD的机器账户下(Computers)

当服务的权限是Local System、Network Service时,SPN注册在AD的机器账户(Computer)下。域中的每个机器都会注册两个SPN:HOST/主机名、HOST/主机名.qsdomain.test

2。注册在AD的域账户下(Users),当一个服务权限为一个域用户,则SPN注册在Users下

SPN的格式:serviceclass/host:port/servicename

serviceclass:必需,服务名称

host:必需,主机名,两种表示hostname.qsdomain.test和hostname

port、servicename:非必需

注册SPN

在windows域内,普通的机器账号有权注册SPN,但是普通的域账号没有权限注册SPN

解决:在DC上给指定的域用户授予注册SPN的权限(“Read servicePrincipalName” 和 “Write serverPrincipalName” )、setspn手动注册

setspn是windows的一个二进制文件,可以查看、添加、删除SPN

setspn的命令

setspn -s <SPN> <account>#注册SPN
setspn -d <SPN> <account>#删除SPN
setspn -a <SPN> <account>#添加SPN
setSPN -L username/hostname#查看指定用户/主机注册的SPN
setspn.exe -q */*#查看当前域内SPN
setspn.exe -T xx -q */*#查看xx域内SPN
setspn -X#查找重复的SPN

普通的域账户没有注册SPN的权限:

image-20231229202613233

一样的SPN不能注册到不同的账户上,需更改SPN格式(如改端口)

posted @ 2023-12-29 21:15  qingshanboy  阅读(183)  评论(0)    收藏  举报