Service Principal Name (SPN)


Service Principal Name (SPN)

 

服務類實際上是服務的某種通用名稱。例如,所有Web服務器都分組在“ www”類中,而SQL服務則在“ SqlServer”類中。 如果服務在自定義端口后面運行,或者您要指定它以避免任何歧義,則可以將其附加到主機名:

 

 

 

 1.UPN很好理解那什么叫SPN在域里面?

筆者現在對SPN的理解是在域里面的服務主體的名稱叫做SPN
tips:
我們處於Active Directory環境中。要了解什么是SPN,我們必須了解Active Directory中的服務概念是什么。

服務實際上是一種功能,一種軟件,可以由AD(Active Directory)的其他成員使用。例如,您可以擁有Web服務器,網絡共享,DNS服務,打印服務等。要識別服務,我們至少需要兩件事。相同的服務可以在不同的主機上運行,​​因此,我們需要指定主機,而計算機可以承載多個服務,因此,顯然,我們需要指定服務。

通過結合這些信息,我們可以准確地指定服務。此組合表示其服務主體名稱或SPN。看起來像這樣:
smtpSvc/Exc.7dap.club
比如有人在7dap.club域中的的Exc機器上面請求了host服務,創建了此票證

 

服務類實際上是服務的某種通用名稱。例如,所有Web服務器都分組在“ www”類中,而SQL服務則在“ SqlServer”類中。

如果服務在自定義端口后面運行,或者您要指定它以避免任何歧義,則可以將其附加到主機名:
SqlServer/mssql.7dap.club:1433

 當然服務類肯定不止mssql和smtpSvc這里是微軟文檔的介紹。

 

 

 這里有我們認識的http服務 cifs文件共享服務,dns域名解析服務,以及命令執行用到的rpc等很多,但是此列表並不詳細,比如LDAP和SqlServer

在域中有一個很特殊的SPN服務屬性叫做HOST

 

 

 

HOST SPN並不是真正的服務類。這是一組服務類,一種別名,將大量SPN組合在一起。它組合在一起的元素在Active Directory的“ SPN映射”屬性中定義。可以使用以下命令列出這些類:

 

Get-ADObject -Identity "CN=Directory Service,CN=Windows NT,CN=Services,CN=Configuration,DC=7dap,DC=club" -properties sPNMappings

 

因此,如果用戶曾經在WEB-SERVER-01上尋找www SPN,則Active Directory將尋找wwww / WEB-SERVER-01,但也會尋找HOST / WEB-SERVER-01。如果主機具有HOST SPN,則意味着它具有www SPN(以及許多其他主機)

 這是一個獲取當前域內的所有spn的小ps腳本

$search = New-Object DirectoryServices.DirectorySearcher([ADSI]"")
$search.filter = "(servicePrincipalName=*)"
$results = $search.Findall()
foreach($result in $results) {
	$userEntry = $result.GetDirectoryEntry()
	Write-host "Object : " $userEntry.name "(" $userEntry.distinguishedName ")"
	Write-host "List SPN :"        
	foreach($SPN in $userEntry.servicePrincipalName)
	{
		Write-Host $SPN       
	}
	Write-host ""
}

 

 

 

 

如果我們只想看那些user啟動(或者使用)了那些服務可以用以下ps1腳本

$search = New-Object DirectoryServices.DirectorySearcher([ADSI]"")
$search.filter = "(&(objectCategory=person)(objectClass=user)(servicePrincipalName=*))"
$results = $search.Findall()
foreach($result in $results)
{
	$userEntry = $result.GetDirectoryEntry()
	Write-host "User : " $userEntry.name "(" $userEntry.distinguishedName ")"
	Write-host "SPNs"        
	foreach($SPN in $userEntry.servicePrincipalName)
	{
		$SPN       
	}
	Write-host ""
}

參考

https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2003/cc772815(v=ws.10)#service-principal-names
https://dirkjanm.io/krbrelayx-unconstrained-delegation-abuse-toolkit/
https://en.hackndo.com/service-principal-name-spn/

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM