SPN(Service Principal Names)学习
? Windows ? ? SPN ? ? AD ?    1178    0    0

一、SPN定义

        服务主体名称(Service Principal Names)是Kerberos客户端用于唯一标识给特定Kerberos目标计算机的服务实例名称。Kerberos身份验证使用SPN将服务实例与服务登录帐户相关联。如果在整个林中的计算机上安装多个服务实例,则每个实例都必须具有自己的SPN。SPN分为两种:

        (1)机器账户(Computers)注册:服务权限通常是Local System或者Network Service

        (2)域用户账户(Users)注册:注册在一个域用户权限下


二、SPN格式

    1. 域内常见的SPN实例

    * MSSQLSvc/adsmsSQLAP01.adsecurity.org:1433
    * ExchangeMDB/adsmsEXCAS01.adsecurity.org
    * TERMSERV/adsmsEXCAS01.adsecurity.org
    * WSMAN/adsmsEXCAS01.adsecurity.org

    * ……

    2. 常见的服务主体名称和对应的服务

    * AcronisAgent:针对Acronis备份和数据恢复软件
    * Afpserver:Apple归档协议
    * AgpmServer:Microsoft高级策略管理(AGPM)
    * ExchangeAB:Exchange通讯簿服务
    * ExchangeRFR:交换通讯簿服务
    * ExchangeMDB:RPC客户端访问服务器角色
    * MSSQLSvc:Microsoft SQL Server
    * MSOMHSvc:Microsoft 系统中心运营经理管理服务器
    * MSOMSdkSvc:Microsoft System Center Operations Manager 管理服务器
    * MSServerCluster:Windows集群服务器
    * MSServerClusterMgmtAPI:集群的API需要此SPN才能使用Kerberos向服务器进行验证
    * MSClusterVirtualServer:Windows 集群服务器
    * TERMSRV:Microsoft 远程桌面协议服务
    * WSMAN:Windows远程管理服务

    * ……


三、SPN注册

        使用setspn命令可以注册、查询SPN,该命令在Win 7 和 Win Server 2008以上版本系统自带

setspn -A MSSQLSvc/my.domain.com:1433 accountname


四、SPN查询

    1. setspn.exe

setspn.exe -q */*  # 查询当前域内的所有SPN
setspn.exe -T test -q */* # 查看test域的所有SPN


    2. PowerShell-AD-Recon

Discover-PSInterestingServices  # 默认列出SPN中包含特殊字符串的项目,如,"Dfs","DNS","Exchange","ftp","http",vnc","vpn"等
Discover-PSInterestingServices -GetAllForestSPNs # 列出所有SPN
Discover-PSInterestingServices -OptionalSPNServiceFilter ("Microsoft Virtual Console Service","Dfsr") # 根据关键字进行筛选


其中的Find-PSServiceAccounts 脚本也能查询的SPN:

Find-PSServiceAccounts -Forest
Find-PSServiceAccounts -Domain "ad.domain.com"
Find-PSServiceAccounts -Domain "ad.domain.com" -DumpSPNs


    3. GetUserSPNS

PS:当vbs使用wscript执行时显示结果会弹窗,cscript会显示在命令行中


    4. autokerberoast.ps1

List-UserSPNs
List-UserSPNs -Group "Domain Admins"
List-UserSPNs -Domain "dev.testlab.local"

    5. PowerView.ps1 

        该脚本的功能是搜集域信息,包括了GPO、Domain Trust、User-Hunting等模块,相比上面的工具,该脚本提供更详细的信息:Get-NetUser -SPN

同时该脚本也可以查询指定域的LDAP内容:

Get-NetUser -Domain testing
Get-NetUser -ADSpath "LDAP://OU=secret,DC=testlab,DC=local"

也可以根据关键字进行筛选SPN:

        除了上面的工具,也可以通过dsquery、ldifde、csvde、adfind、Adexplorer等工具从域内机器或者工作组机器上查询|导出LDAP内容筛选serviceprincipalname字段来确定SPN。例如:可以通过搜索ServicePrincipalName= MSSQL* 来快速发现Active Directory域或者林中的SQL服务器


四、渗透利用

    1. SPN扫描可以发现重要的服务器机器,如:终端、交换机、邮服、数据库之类;不需要进行主动扫描相比之下隐蔽性更高

    2. 所有的域用户都可以通过LDAP获取到域内所有SPN,进而通过Kerberoasting攻击完成域内提权等

    3. 在获得SPN修改权限后可以为制定域用户添加SPN,通过随时获取该用户的TGS破解明文密码,作为域内持久化手段


学习参考backlion师傅博客:

https://www.cnblogs.com/backlion/p/8082623.html



觉得不错,点个赞?
Sign in to leave a comment.
No Leanote account ? Sign up now.
0 条评论
文章目录