唔,上篇是自己找的資料寫的,這篇按大佬的要求整理一下。
SPN
SPN概述
SPN(ServicePrincipal Names
)服務主體名稱,是服務實例(比如:HTTP、SMB、MySQL等服務)的唯一標識符。
Kerberos
認證過程使用SPN將服務實例與服務登錄賬戶相關聯,如果想使用 Kerberos
協議來認證服務,那么必須正確配置SPN。如果在整個林或域中的計算機上安裝多個服務實例,則每個實例都必須具有自己的 SPN。如果客戶端可能使用多個名稱進行身份驗證,則給定服務實例可以具有多個SPN。SPN 始終包含運行服務實例的主機的名稱,因此服務實例可以為其主機的每個名稱或別名注冊SPN。一個用戶賬戶下可以有多個SPN,但一個SPN只能注冊到一個賬戶。在內網中,SPN掃描通過查詢向域控服務器執行服務發現。這對於紅隊而言,可以幫助他們識別正在運行重要服務的主機,如終端,交換機等。SPN的識別是kerberoasting
攻擊的第一步。
下面通過一個例子來說明SPN的作用:
當某用戶需要訪問MySQL服務時,系統會以當前用戶的身份向域控查詢SPN為MySQL的記錄。
當找到該SPN記錄后,用戶會再次與KDC通信,將KDC發放的TGT作為身份憑據發送給KDC,並將需要訪問的SPN發送給KDC。
KDC中的TGS服務對TGT進行解密。確認無誤后,由TGS將一張允許訪問該SPN所對應的服務的ST服務票據和該SPN所對應的服務的地址發送給用戶,用戶使用該票據即可訪問MySQL服務。
SPN的兩種類型:
一種是注冊在活動目錄的機器帳戶(Computers
)下,當一個服務的權限為 Local System
或 Network Service
,則SPN注冊在機器帳戶(Computers
)下。
另一種是注冊在活動目錄的域用戶帳戶(Users
)下,當一個服務的權限為一個域用戶,則SPN注冊在域用戶帳戶(Users
)下。
SQLServer服務注冊:
SQLServer
在每次啟動的時候,都會去嘗試用自己的啟動賬號注冊SPN
。但是在Windows
域里,默認普通機器賬號有權注冊SPN,但是普通域用戶賬號是沒有權注冊SPN的。這就會導致這樣一個現象,SQL Server
如果使用“Local System account
”來啟動,Kerberos
就能夠成功,因為SQL Server
這時可以在DC
上注冊SPN
。如果用一個域用戶來啟動,Kerberos
就不能成功,因為這時SPN
注冊不上去。
解決辦法:
- 可以使用工具SetSPN -S來手動注冊SPN。但是這不是一個最好的方法,畢竟手工注冊不是長久之計。如果SPN下次丟了,又要再次手動注冊。
- 所以比較好的方法,是讓SQL Server當前啟動域賬號有注冊SPN的權力。要在DC上為域賬號賦予 “Read servicePrincipalName” 和 “Write serverPrincipalName” 的權限即可。
SPN的配置
在 SPN 的語法中存在四種元素,兩個必須元素和兩個額外元素,其中
SPN格式:<service class>/<host>:<port>/<service name>
<service class>:標識服務類的字符串,可以理解為服務的名稱,常見的有WWW、MySQL、SMTP、MSSQL等;必須元素
<host>:服務所在主機名,host有兩種形式,FQDN(win7.21r000.com)和NetBIOS(win7)名;必須元素
<port>:服務端口,如果服務運行在默認端口上,則端口號(port)可以省略;額外元素
<service name>:服務名稱,可以省略;額外元素
一些服務的SPN示例:
#Exchange服務
exchangeMDB/ex01.21r000.com
#RDP服務
TERMSERV/te01.21r000.com
#WSMan/WinRM/PSRemoting服務
WSMAN/ws01.21r000.com
使用SetSPN注冊SPN
SetSPN是一個本地Windows二進制文件,可用於檢索用戶帳戶和服務之間的映射。該實用程序可以添加,刪除或查看SPN注冊。
環境描述:
主機:win7.21r000.org
域控:win2012.21r000.org
當前用戶:21r000/test
查看SPN是否已注冊:
setspn -L sccmdb
查詢是否有重復的SPN存在:
setspn -X
在運行sql server的計算機上注冊,setspn.exe工具包含在windows server2003 sp1 support tools中
使用域管理員登陸后,手動注冊默認實例:
setspn -A MSSQLSvc/win7.21r000.com:1433 21r000\win7
注:使用 “-S”參數而不是用“-A”的話則會先驗證其要注冊的SPN是否已存在,如果已存在則提示,並終止操作。
注:注冊SPN需要域管理員權限,普通域成員注冊會提示權限不夠!
以test用戶的身份進行SPN服務的注冊
setspn -S SQLServer/win7.21r000.com:1433 21r000 #21r000必須是當前的用戶或setspn -U -A SQLServer/win7.21r000.com:1433 21r000 #21r000必須是當前的用戶
以WIN7主機的身份在DC(win2012.21r000.org)上進行SPN服務(SQLServer)的注冊
setspn -S SQLServer/win7.21r000.com:1533/MSSQL 21r000 #21r000必須是當前的主機名
如果提示重復,我們可以將端口修改為其他端口,就不是重復的SPN了。
SPN的發現
由於每台服務器都需要注冊用於Kerberos
身份驗證服務的SPN,因此這為在不進行大規模端口掃描的情況下收集有關內網域環境的信息提供了一個更加隱蔽的方法。
使用SetSPN查詢:
windows系統自帶的setspn可以查詢域內的SPN。
查看當前域內所有的SPN:setspn -Q */*
查看指定域xie.com注冊的SPN:setspn -T xie.com -Q */* 如果指定域不存在,則默認切換到查找本域的SPN
查找本域內重復的SPN:setspn -X
刪除指定SPN:setspn -D MySQL/win7.xie.com:1433/MSSQL hack
查找指定用戶/主機名注冊的SPN:setspn -L username/hostname
PowerShell-AD-Recon:
該工具包提供了一些探測指定SPN的腳本,例如Exchange,Microsoft SQLServer,Terminal
等
#Discover-PSMSSQLServers.ps1的使用,掃描MSSQL服務
Import-Module .\Discover-PSMSSQLServers.ps1;Discover-PSMSSQLServers
#Discover-PSMSExchangeServers.ps1的使用,掃描Exchange服務
Import-Module .\Discover-PSMSExchangeServers.ps1;Discover-PSMSExchangeServers
#掃描域中所有的SPN信息
Import-Module .\Discover-PSInterestingServices.ps1;Discover-PSInterestingServices
下面由於靶機文件傳輸問題盜用一下佬的圖,勿怪。
GetUserSPNs.ps1:
GetUserSPNs
是 Kerberoast
工具集中的一個 powershell
腳本,用來查詢域內用戶注冊的 SPN。
Import-Module .\GetUserSPNs.ps1
GetUserSPNs.vbs:
GetUserSPNs
是 Kerberoast
工具集中的一個 vbs
腳本,用來查詢域內用戶注冊的 SPN
。
cscript .\GetUserSPNs.vbs
PowerView.ps1:
PowerView
是 PowerSpolit
中 Recon
目錄下的一個powershell
腳本,PowerView
相對於上面幾種是根據不同用戶的 objectsid
來返回,返回的信息更加詳細。
Import-Module .\PowerView.ps1
Get-NetUser -SPN
PowerShellery:
PowerShellery
下有各種各樣針對服務SPN探測的腳本。其中一些需要PowerShell v2.0
的環境,還有一些則需要PowerShell v3.0
環境。
#Powershellery/Stable-ish/Get-SPN/ 下Get-SPN.psm1腳本的使用,需要powershell3.0及以上版本才能使用
Import-Module .\Get-SPN.psm1
Get-SPN -type service -search "*"
Get-SPN -type service -search "*" -List yes | Format-Table
#Powershellery/Stable-ish/ADS/ 下Get-DomainSpn.psm1腳本的使用
Import-Module .\Get-DomainSpn.psm1
Get-DomainSpn
RiskySPN中的Find-PotentiallyCrackableAccounts.ps1:
該腳本可以幫助我們自動識別弱服務票據,主要作用是對屬於用戶的可用服務票據執行審計,並根據用戶帳戶和密碼過期時限來查找最容易包含弱密碼的票據。
Import-Module .\Find-PotentiallyCrackableAccounts.ps1;Find-PotentiallyCrackableAccounts -FullData -Verbose
該腳本將提供比klist和Mimikatz更詳細的輸出,包括組信息,密碼有效期和破解窗口。
使用domain參數,將返回所有具有關聯服務主體名稱的用戶帳戶,也就是將返回所有SPN注冊在域用戶下的用戶。
Import-Module .\Find-PotentiallyCrackableAccounts.ps1;Find-PotentiallyCrackableAccounts -Domain "xie.com"
CMD命令查看WiFi密碼
CMD命令查看WiFi密碼
使用CMD命令查看WiFi密碼
運行CMD(命令提示符) (確保無線網卡啟用狀態)
輸入命令查看WiFi配置文件:
使用命令:
# 列出所有連接過的WiFi的配置文件
netsh wlan show profiles
# 查看到某個具體WiFi的配置詳情,包括密碼:
netsh wlan show profiles name="XXXXXX" key=clear
# XXXXXX 代替自己的WiFi名稱即可
示例:
netsh wlan show profiles name="21r000" key=clear
即可看到WiFi密碼。
圖形界面查看WiFi密碼
雙擊后點擊“無限屬性”進入“安全”目錄顯示字符即可查看WiFi密碼。
感言:
emmmmm,傑哥不要啊!!!
參考鏈接: