快捷搜索:  网络  后门  CVE  渗透  木马  扫描  黑客  as

SPN服务主体名称发现详解

Kerberos是一种支持票证身份验证的安全协定。要是客户端计算机身份验证要求包含有用的用户凭证以及服务主体名称 (SPN),则 Kerberos 身份验证服务器将授予一个票证以响应该要求。然后,客户端计算机使用该票证来走访收集资源。在内部收集中,SPN扫描通过 查询向域控制器执行服务发现。这对于红队而言,可以帮助他们识别正在运行重要服务的主机,如终端、交换机、微软SQL等,并隐躲他们。此外,SPN的识别也是kerberoasting攻击的第一步。

Tim Medin在他的Kerberos攻击演讲中很好地诠释了SPN。Sean Metcalf还提供了一些有关SPN的资源,其中包括有关Active Directory服务主体名称的列资源,可在本文结尾处找到。

SetSPN

SetSPN是一个内陆windows二进制文件,可用于检索用户帐户以及服务之间的映照。该实用程序可以添加,删除或查看SPN注册。

setspn -T pentestlab -Q */*

1setspn-service-discovery.png

由于用户已经选择了暗码,因此绑定到域用户帐户而不是计算机帐户的服务更可能被设置为弱暗码,而对用户有规范名称的服务应该会成为Kerberoasting攻击的针对目标。下列SPN列表中, PENTESTLAB_001服务与用户帐户相干联。

2setspn-spn-records.png

GetUserSPNs

Tim Medin开发了一个PowerShell脚本,它是kerberoast工具包的一部分,可以帮助我们查询活动目录,以发现仅与用户帐户相干联的服务。

powershell_import /root/Desktop/GetUserSPNs.ps1

3getuserspns-powershell-script.png

还有一个VBS脚本也是该工具的一部分,可觉得我们提供相同的信息。该脚本可以通过使用本机Windows二进制cscript从Windows命令提示符执行。

cscript.exe GetUserSPNs.vbs

4getuserspns-vbs-script-cmd.png

PowerShell AD Recon

除了Tim Medin开发的工具外,Sean Metcalf也开发了种种PowerShell脚原先执行Kerberos侦查。这些脚本是PowerShell AD Recon存储库的一部分,可以在Active Directory中查询服务,例如Exchange,Microsoft SQL,Terminal等。Sean将每一个脚本绑定到一个特定的服务,详细取决于你想要发现的SPN。下列脚本将标识收集上的所有Microsoft SQL实例。

powershell_import /root/Discover-PSMSSQLServers.ps1
powershell_execute Discover-PSMSSQLServers

5powershell-ad-recon-mssql-servers-discovery-via-metasploit.png

还可以使用PSMSExchangeServers脚原先查找Microsoft Exchange服务器。

powershell_import /root/Discover-PSMSExchangeServers.ps1
powershell_execute Discover-PSMSExchangeServers

6powershell-ad-recon-exchange-servers-discovery-via-metasploit.png

枚举服务帐户很重要,因为这些帐户可能设置了弱暗码。PasswordLastSet以及LastLogon属性,可觉得我们提供那些较有可能会配置弱暗码的服务唆使。

powershell_import /root/Find-PSServiceAccounts.ps1
powershell_execute Find-PSServiceAccounts

7powershell-ad-recon-service-accounts-via-metasploit.png

Empire

PowerShell Empire还有一个可显示域帐户的服务主体名称(SPN)的模块。

usemodule situational_awareness/network/get_spn

8empire-spn-module.png

这些服务将以如下格式呈现。

9empire-spn-discovery.png

PowerShellery

Scott Sutherland在将Get-SPN模块完成到Empire之前,已经创建了多个Powershell脚本作为PowerShellery的一部分,可觉得种种服务网络SPN。其中一些需要PowerShell v2.0的环境,还有一些则需要PowerShell v3.0环境。

Get-SPN -type service -search "*"

10powershellery-getspn.png

效果我们也能够将其转换为表格的情势,企业黑客,以便于我们的阅读。

Get-SPN -type service -search "*" -List yes | Format-Table

11powershellery-getspn-table.png

这里我再告诉人人一个脚本,可觉得我们获取UserSID,服务以及实际用户。

Import-Module .\Get-DomainSpn.psm1
Get-DomainSpn

12powershellery-get-domainspn.png

Impacket

服务主体名称(SPN)也能够从未加入域的体中发现,impacket工具包下的python版GetUserSPNs可觉得我们做到这点。然则,没法使用基于token的身份验证,因此与Active Directory进行通讯需要获取有用的域凭据。

./GetUserSPNs.py -dc-ip 10.0.0.1 pentestlab.local/test

13impacket-get-user-spn.png

相干资源

https://adsecurity.org/?p=230

https://adsecurity.org/?p=1508

http://adsecurity.org/?page_id=183

https://github.com/nullbind/Powershellery

https://github.com/PyroTek3/PowerShell-AD-Recon

*参考来源:pentestlab, secist 编译,

您可能还会对下面的文章感兴趣: