在寫下一個大塊之前,補充一些小知識點,也沒啥新東西
0x01簡介
如果常規掃描服務,結果不理想,非常GG,可以考慮使用SPN進行服務掃描,這是為了借助Kerberos的正常查詢行為(向域控發起LDAP查詢)作掩護進行設備難以探測的掃描
SPN(服務主體名service principal name)是微軟為了在域環境中方便管理資源而為每種資源分配設計的一種表示方法(或者說SPN是使用Kerberos身份驗證的網絡中唯一的標識
符),凡是使用Kerberos身份驗證的網絡中,都必須在機器賬號或用戶賬號下為服務注冊SPN(每個使用Kerberos的服務都需要一個SPN)
如果一個服務的權限是local system或者是network service,則SPN注冊到機器賬號下;
如果一個服務的權限是域用戶,則SPN注冊到用戶賬號下
如果是在域用戶賬號下運行服務必須要手動注冊SPN,而Kerberos身份驗證機制就是使用SPN將服務實例域服務登錄賬號關聯起來的,即一個域中的計算機上安裝了多個服務實例,則每個實例都有自己的SPN
格式如下:
serviceclass / host:port servicename
其中serviceclass為服務組件名
host 為計算機FQDN
port 為該服務監聽的端口號
servicename 服務的專有名(distinguished name--DN)或者objectGUID或者Internet 主機名或者FQDN
其中serviceclass和host是必選參數,剩下的是可選可不選的
不同服務的這個服務組件名不一樣,具體可以查查(列到下面了)
SetSPN是一個本地的windows二進制文件,用於檢索用戶賬戶與服務之間的映射,可用於添加刪除查看SPN(win2003沒有此功能)
在域用戶下
setspn -q */* (命令不要寫錯)
查看某指定域內SPN信息
setspn -T 域名 -q */*
(同理,要打的碼太多不截圖了)
從活動目錄中發現服務可以通過SPN掃描,原因還是最先說的,和那些網絡掃描相比,SPN服務掃描不會通過連接IP實現判斷(這樣可能會觸發報警),而是通過Kerberos原理來向域控查詢服務,域內任何用戶都可以使用此方法
比如 setspn -q */* | findstr "MSSQL"
會查找域中所有服務名帶"MSSQL"的SPN
或者找FQDN或者別的什么也行,改一下findstr"這里的內容"
https://www.cnblogs.com/wuxinmengyi/p/11601351.html
這篇文章中列舉了一些SPN服務名
AcronisAgent:針對Acronis備份和數據恢復軟件
AdtServer:帶有ACS的Microsoft System Center Operations Manager(2007/2012)管理服務器
afpserver:Apple歸檔協議
AgpmServer:Microsoft高級組策略管理(AGPM)
aradminsvc - 任務主角色服務器
arssvc - 任務主角色服務器
bocms:商業化CMS
BOSSO:商業對象
CESREMOTE:與VMWare上的Citrix VDI解決方案有關,許多VDI工作站都有這個SPN。
cifs:通用Internet文件系統
CmRcService:Microsoft系統中心配置管理器(SCCM)遠程控制
CUSESSIONKEYSVR:CiscoUnity VOIP系統
cvs:CVS庫
Dfsr *:分布式文件系統
DNS:域名服務器
E3514235-4B06-11D1-AB04-00C04FC2DCD2:NTDS DC RPC復制
E3514235-4B06-11D1-AB04-00C04FC2DCD2-ADAM:ADAM實例
EDVR:ExacqVision服務
exchangeAB:Exchange通訊簿服務(通常是支持NSPI的域控制器,也通常是所有的GC)
exchangeMDB:RPC客戶端訪問服務器角色
exchangeRFR:交換通訊簿服務
fcsvr:Apple FinalCut Server
FileRepService:WSFileRepService.exe
FIMService:MicrosoftForefront標識管理器(FIM)
ftp:文件傳輸協議
GC:域控制器全局編錄服務
HDFS:Hadoop(Ambari)
host:主機服務代表主機。HOSTSPN用於在創建服務票據時訪問由Kerberos協議使用長期密鑰的主機帳戶。
http:支持Kerberos身份驗證的http網絡服務的SPN
Hyper-V副本服務:MicrosoftHyper-V的副本服務
IMAP:Internet消息訪問協議
IMAP4:Internet消息訪問協議版本4
ipp:Internet打印協議
iSCSITarget:iSCSI 配置
kadmin:Kerberos
ldap:LDAP服務,如域控制器或ADAM實例。
Magfs:MaginaticsMagFS
mapred:Cloudera
Microsoft虛擬控制台服務:HyperV主機
Microsoft虛擬系統遷移服務:P2V支持(Hyper-V)
mongod:MongoDBEnterprise
mongos:MongoDBEnterprise
MSClusterVirtualServer:Windows群集服務器
MSOLAPSvc:SQLServer分析服務
MSOLAPSvc.3:SQLServer分析服務
MSOLAPDisco.3:SQLServer分析服務
MSOMHSvc:Microsoft系統中心運營經理(2007/2012)管理服務器
MSOMSdkSvc:MicrosoftSystem Center Operations Manager(2007/2012)管理服務器
MSServerCluster:Windows群集服務器
MSServerClusterMgmtAPI:此群集API需要此SPN才能通過使用Kerberos向服務器進行身份驗證
MSSQL:Microsoft SQLServer
MSSQLSvc:MicrosoftSQL Server
MSSQL $ ADOBECONNECT:支持Adobe Connect的Microsoft SQL Server
MSSQL $ BIZTALK:MicrosoftSQL Server支持Microsoft Biztalk服務器
MSSQL $ BUSINESSOBJECTS:支持Business Objects的Microsoft SQL Server
MSSQL $ DB01NETIQ:支持NetIQ的Microsoft SQL Server
nfs:網絡文件系統
NPPolicyEvaluator:戴爾Quest審計員
NPRepository 4(CHANGEAUDITOR):戴爾Quest Change Auditor
NPRepository4(CAAD):戴爾Quest審核員
NPRepository4(默認):戴爾任務審計員
NtFrs *:NT文件復制服務
oracle:OracleKerberos身份驗證
pcast:蘋果播客制作人
PCNSCLNT:自動密碼同步解決方案(MIIS 2003&FIM)
POP:郵箱協議
POP3:郵箱協議版本3
PVSSoap:Citrix ProvisioningServices(7.1)
RestrictedKrbHost:使用服務類字符串等於“RestrictedKrbHost”的 SPN的服務類,其服務憑單使用計算機帳戶密鑰並共享會話密鑰。
RPC:遠程過程調用服務
SAP:SAP /SAPService
SAS:SAS服務器
SCVMM:System Center虛擬機管理器
secshd:IBMInfoSphere
sip:會話啟動協議
SMTP:簡單郵件傳輸協議
SMTPSVC:簡單郵件傳輸協議
SoftGrid: Microsoft應用程序虛擬化(App-V)以前的“SoftGrid”
STS:VMWare SSO服務
SQLAgent $ DB01NETIQ:NetIQ的SQL服務
tapinego:與路由應用程序相關聯,例如Microsoft防火牆(ISA,TMG等)
TERMSRV:Microsoft遠程桌面協議服務,又名終端服務。
tnetd:JuniperKerberos身份驗證 “Tnetd是一個守護進程,用於路由引擎和數據包轉發引擎等不同組件之間的內部通信”
vmrc:Microsoft VirtualServer 2005
vnc:VNC服務器
VPN:虛擬專用網絡
VProRecovery Backup Exec系統恢復代理7.0
VProRecovery Backup Exec系統恢復代理8.0
VProRecovery Backup Exec系統恢復代理9.0
VProRecovery諾頓克隆代理12.0
VProRecovery諾頓
克隆代理14.0 VProRecovery諾頓克隆代理15.0
VProRecovery Symantec系統恢復代理10.0
VProRecovery Symantec系統恢復代理11.0
VProRecovery Symantec系統恢復代理14.0
vssrvc:微軟虛擬服務器(2005)
WSMAN:Windows遠程管理(基於WS-Management標准)服務
xmpp / XMPP:可擴展消息和呈現協議(Jabber)
xgrid:蘋果的分布式(網格)計算/ Mac OS X 10.6服務器管理
等等
供參考
0x02 SPN服務掃描工具
1.PowerShell-AD-Recon工具包
鏈接奉上:https://github.com/PyroTek3/PowerShell-AD-Recon
后綴有問題的,自己加上.ps1即可
這個腳本可以查詢域內所有SPN信息
看看哪些用戶的計算機上有哪些SPNServices
這個腳本可以查域內的MSSQL服務
2.其他腳本(以下不演示了,具體使用方法請移步 https://www.freebuf.com/articles/system/174229.html 這篇文章)
(1)GetUserSPNs:屬於Kerberos工具包的一部分
下載鏈接:https://github.com/nidem/kerberoast
(2)PowerShellery
下載鏈接:https://github.com/nullbind/Powershellery/blob/master/Stable-ish/Get-SPN/Get-SPN.psm1
(3)PowerView
老熟人了
里面也有類似功能的腳本powerview.ps1
下載鏈接:https://github.com/PowerShellEmpire/PowerTools
執行以下命令
Import-module .\powerview.ps1
Get-NetUser -SPN
即可
(4)Impacket
又一個老熟人
下載鏈接:https://github.com/SecureAuthCorp/impacket/tree/62162e0a1e0b55186ad0517e5b37532a06d9b70c
(5)Empire
嗯,里面也有內置模塊
usemodule situational_awareness/network/get_spn
0x03 Kerberoast攻擊
既然講到SPN,那就離不開利用它的Kerberoast攻擊,即破解Kerberos服務票據並重寫,從而獲得目標服務的訪問權限(過程中是合法訪問、離線破解服務票據,而完全不需要與服務目標有任何交互行為)
問:Kerberoast攻擊總共分幾步?
答:五步
SPN發現
請求服務票據
導出服務票據
破解服務票據
重寫服務票據
妥了,按照步驟來(SPN在上一點講過了),這里只是舉個例子
1.請求服務票據
事先說明:域內任意主機都可以查詢SPN,但是真正攻擊可利用的只有域用戶下注冊的SPN
比如我findstr搜一下我的機器名(我是域用戶登錄的)
找一條現有的SPN服務(正常來說是,域用戶賬號下,要用setspn - A 為某個原本不存在SPN服務的服務賬號手動注冊SPN,然后利用的時候選這個手動注冊的SPN )
在powershell中執行
Add-Type -AssemblyName System.IdentityModel
然后 New-Object System.IdentityModel.Tokens.KerberosRequestorSecurityToken -ArgumentList "SPN服務名"
為我選擇的SPN服務請求服務票據
klist查看一下結果
可用的緩存票據中存在我剛剛請求的票證
但是,這里存在一個問題,可以看到我這里的會話秘鑰的類型是AES-256,這是一個不可利用破解的加密方式,需要改成RC4才能利用腳本破解
gpedit.msc組策略中修改
修改后再重新來一遍以上操作
2.導出服務票據
然后用mimikatz導出票據,mimikatz路徑下 cmd窗口執行
mimikatz.exe "kerberos::list /export" "exit"
誒,這個就是剛剛的票據
3.破解服務票據
上面那個Kerberoast工具包中,有tgsrepcrack.py這個腳本,可用來破解
python tgsrepcrack.py dictionary.txt 選中的票據文件
不過需要python相關庫和字典......
4.重寫服務票據
這個密碼破解出來了,可以利用上面的Kerberoast工具包中的kerberoast.py腳本進行票據重寫
實現訪問服務時的身份偽造,甚至提權
最后把新票據注入內存
詳細內容請參考 : https://www.freebuf.com/articles/system/174967.html
參考文章:
https://www.freebuf.com/articles/system/174967.html
https://www.cnblogs.com/wuxinmengyi/p/11601357.html
這兩篇文章寫得比較全面,具體操作可以學習一下
隨便轉載,請標明作者出處