前言
兩年前學域滲透的時候,在京東小課堂做的一期小總結,最近重新看域滲透,于是翻出來cp到blog。
1. windows的認證方式主要有哪些?
windows的認證方式主要有NTLM認證、Kerberos認證兩種。同時,Windows Access Token記錄著某用戶的SID、組ID、Session、及權限等信息,也起到了權限認證的作用。
其中,NTLM認證主要有本地認證和網(wǎng)絡認證兩種方式。本地登錄時,用戶的密碼存儲在%SystemRoot%system32configsam這個文件里。當用戶輸入密碼進行本地認證的過程中,所有的操作都是在本地進行的。他其實就是將用戶輸入的密碼轉換為NTLM Hash,然后與SAM中的NTLM Hash進行比較。而網(wǎng)絡認證則是基于一種Challenge/Response認證機制的認證模式。他的認證過程我們下邊會詳細講。
Kerberos認證用于域環(huán)境中,它是一種基于票據(jù)(Ticket)的認證方式。他的整個認證過程涉及到三方:客戶端、服務端和KDC(Key Distribution Center)。在Windows域環(huán)境中,由DC(域控)來作為KDC。
Access Token(訪問令牌)是用來描述進程或線程安全上下文的對象,令牌所包含的信息是與該用戶賬戶相關的進程或線程的身份和權限信息。當用戶登陸時,系統(tǒng)生成一個Access Token,然后以該用戶身份運行的的所有進程都擁有該令牌的一個拷貝。這也就解釋了A用戶創(chuàng)建一個進程而B用戶沒有該進程的權限。
2. NTLM的認證過程是怎樣什么?
首先是本地認證,也就是NTLM Hash的生成方式。
當用戶注銷、重啟、鎖屏后,操作系統(tǒng)會讓winlogon顯示登錄界面,也就是輸入框。當winlogon.exe接收輸入后,將密碼交給LSASS進程,這個進程中會存一份明文密碼,將明文密碼加密成NTLM Hash,對SAM數(shù)據(jù)庫比較認證。(winlogon.exe即Windows Logon Process,是Windows NT用戶登陸程序,用于管理用戶登錄和退出。
LSASS用于微軟Windows系統(tǒng)的安全機制。它用于本地安全和登陸策略。)
比如當用戶輸入密碼123456后,那么操作系統(tǒng)會將123456轉換為十六進制,經(jīng)過Unicode轉換后,再調用MD4加密算法加密,這個加密結果的十六進制就是NTLM Hash
123456 -> hex(16進制編碼) = 313233343536 313233343536 -> Unicode = 610064006d0069006e00 610064006d0069006e00 -> MD4 = 209c6174da490caeb422f3fa5a7ae634
看明白本地認證的過程后,再說一下網(wǎng)絡認證的具體過程。
NTLM協(xié)議的認證共需要三個消息完成:協(xié)商、挑戰(zhàn)、認證。
協(xié)商:主要用于確認雙方協(xié)議版本、加密等級等
挑戰(zhàn):服務器在收到客戶端的協(xié)商消息之后, 會讀取其中的內(nèi)容,并從中選擇出自己所能接受的服務內(nèi)容,加密等級,安全服務等等。并生成一個隨機數(shù)challenge, 然后生成challenge消息返回給客戶端。該消息就是挑戰(zhàn)/響應認證機制的主要功能體現(xiàn)。
認證:驗證主要是在挑戰(zhàn)完成后,驗證結果,是認證的最后一步。
詳細過程如下:
第一步,輸入密碼,然后LSASS會把密碼的NTLM Hash后的值先存儲到本地。
第二步,客戶端把用戶名的明文發(fā)送給服務端
第三步,服務端會生成一個16位的隨機數(shù),即challenge,再傳回給客戶端
第四步,當客戶端收到challenge后,用在第一步中存儲的NTLM Hash對其加密,然后再將加密后的challenge發(fā)送給服務器,也就是response。
第五步,服務端在收到response后,會向DC發(fā)送針對客戶端的驗證請求。該請求主要包含以下三方面的內(nèi)容:客戶端用戶名、客戶端NTLM Hash加密的Challenge、原始的Challenge。
第六步,當DC接到過來的這三個值的以后,會根據(jù)用戶名到DC的賬號數(shù)據(jù)庫(ntds.dit)里面找到該用戶名對應的NTLM Hash,然后把這個hash拿出來和傳過來的challenge值進行比較,相同則認證成功,反之,則失敗。
上邊說的是NTLM v1認證方式,NTLM v2和v1最顯著的區(qū)別就是Challenge與加密算法不同,共同點就是加密的key都是NTLM Hash。
NTLM v1的Challenge有8位,NTLM v2的Challenge為16位。NTLM v1的主要加密算法是DES,NTLM v2的主要加密算法是HMAC-MD5。
3. 針對NTLM的姿勢主要有哪些?
當我們通過dump hash拿到了NTLM Hash后,我通常首先嘗試能不能直接在線破解。常用的破解網(wǎng)站:
https://www.objectif-securite.ch/en/ophcrack.php/
http://www.cmd5.com/
https://www.somd5.com/
如果不能破解,那可以嘗試Pass The Hash(hash傳遞)。
哈希傳遞就是使用用戶名對應的NTLM Hash將服務器給出的Chanllenge加密,生成一個Response,來完成認證。Pass The Hash能夠完成一個不需要輸入密碼的NTLM協(xié)議認證流程,所以不算是一個漏洞,算是一個技巧。
常用的pth的工具主要有:mimikatz(首選)、wmiexec/psexec、exploit/windows/smb/psexec_psh、powershell invoke系列小腳本、impacket/psexec.py。
當然,pth也是有利用條件的。如果目標機器安裝了KB2871997,那我們就不能pth了。那我們還有另一個姿勢:Pass The Key。對于8.1/2012r2,安裝補丁kb2871997的Win 7/2008r2/8/2012,可以使用AES keys代替NTLM Hash。在mimikatz抓hash時,可以一并抓到。其實,mimikatz中的pth本身就是ptk了。
命令:
mimikatz "privilege::debug" "sekurlsa::pth /user:a /domain:test.local /aes256:f74b379b5b422819db694aaf78f49177ed21c98ddad6b0e246a7e17df6d19d5c"
除這些外,還有很多其他姿勢,比如打了補丁有administrator帳號扔可pth、當開啟Restricted Admin Mode后,win8.1和server12 R2默認支持pth、啟用WDigest劫持winlogon仙人跳等。
4. Kerberos認證中主要有哪些知識點需要注意?
首先解釋一些名詞:
KDC: Key Distribution Center,密鑰分發(fā)中心,負責管理票據(jù)、認證票據(jù)、分發(fā)票據(jù),但是KDC不是一個獨立的服務,它由AS和TGS組成。
AS: Authentication Service,驗證服務,為client生成TGT的服務
TGS: Ticket Granting Service,票據(jù)授予服務,為client生成某個服務的ticket
TGT: Ticket Granting Ticket,入場券,通過入場券能夠獲得票據(jù),是一種臨時憑證的存在。
Ticket:票據(jù),是網(wǎng)絡中各對象之間互相訪問的憑證
AD: Account Database,存儲所有client的白名單,只有存在于白名單的client才能順利申請到TGT。
DC: Domain Controller,域控
KRBTGT: 每個域控制器都有一個krbtgt賬戶,是KDC的服務賬戶,用來創(chuàng)建TGS加密的密鑰。
Kerberos提供了一個集中式的認證方式,在整個認證過程中總共要涉及到三方:客戶端,服務端和KDC, 在Windows域環(huán)境中,KDC的角色由DC來擔任,Kerberos是一種基于票據(jù)的認證方式,票據(jù)(Ticket)是用來安全的在認證服務器和用戶請求的服務之間傳遞用戶的身份,同時也會傳遞一些附加信息,用來保證使用Ticket的用戶必須是Ticket中指定的用戶,Ticket一旦生成,在生存時間內(nèi)可以被Client多次使用來申請同一個Server的服務。這里就存在一個票據(jù)竊取問題。
說下kerberos的大致工作流程,域中的客戶端要想訪問同域中的某個服務器資源時,需要首先購買該服務端認可的票據(jù)(Ticket),也就是說,客戶端在訪問服務器之前需要預先買好票,等待服務驗票之后才能入場,但是這張票不能直接購買,還需要一張認購權證(TGT),也就是說客戶端在買票之前需要預先獲得一張認購權證,這張認購權證和進入服務器的入場券均由KDC發(fā)售。引用網(wǎng)絡上一張思路很清晰的圖。
5. 域滲透中針對Kerberos的姿勢主要有哪些?
說完認證過程后,就要說下經(jīng)常用的兩種票據(jù):白銀票據(jù)和黃金票據(jù)了。
銀票
白銀票據(jù)的特點是:不需要與KDC進行交互、需要目標服務的NTLM Hash。因此當擁有Server Hash時,我們就可以偽造一個不經(jīng)過KDC認證的一個Ticket。
利用:
kerberos::golden /domain:<域名> /sid:<域SID> /target:<服務器主機名> /service:<服務類型> /rc4: /user:<用戶名> /ptt
由于白銀票據(jù)需要目標服務器的Hash,所以沒辦法生成對應域內(nèi) 所有服務器的票據(jù),也不能通過TGT申請。因此只能針對服務器 上的某些服務去偽造。如cifs服務用于Windows主機間的文件共享,用其他如LDAP等服務則無法訪問server的文件系統(tǒng)。
這里還有最最重要的各種約束委派沒有說。。待我徹底搞懂在另寫一篇
金票
與白銀票據(jù)相比,黃金票據(jù)的特點是需要與DC通信、需要krbtgt用戶的hash,也就是需要拿下域控。
利用:
lsadump::dcsync /domain:域名 /user:krbtgt
kerberos::golden /domain:<域名> /sid:<域SID> /rc4: /user:<任意用戶名> /ptt
拿到黃金票據(jù)后,就可以偽造黃金票據(jù),然后就能獲取任何Kerberos服務權限,登錄任意域內(nèi)任意一臺主機。mimikatz導出域內(nèi)所有主機的票據(jù),命令是sekurlsa::tickets /export,或者dump NTDS.dit也可以。
那最后就要說下拿域控的姿勢了。
最常用的毫無疑問是ms14068。主要利用工具是goldenPac.py或者kekeo/PyKEK。利用方式網(wǎng)上很多文章,這里不詳細說。
6. Windows Access Token主要知識點淺談
Windows Access Token(訪問令牌)有兩種,一種是Delegation token(授權令牌),主要用于交互會話登錄(例如本地用戶直接登錄、遠程桌面登錄),另一種是Impersonation token(模擬令牌),主要用于非交互登錄(利用net use訪問共享文件夾)。
每個進程創(chuàng)建時都會根據(jù)登錄會話權限由LSA(Local Security Authority)分配一個Token。如果CreaetProcess時自己指定了 Token, LSA會用該Token, 否則就用父進程Token的一份拷貝。
當用戶注銷后,系統(tǒng)將會使授權令牌切換為模擬令牌,不會將令牌清除,只有在重啟機器后才會清除。
一般通過incognito.exe或者msf中的incognito模塊來竊取令牌(Metasploit中的incognito,是從windows平臺下的incognito移植過來的),從而獲得令牌對應的權限,比如已獲得admin權限,然后通過竊取令牌然后令牌假冒來獲得system權限。
除此之外,推薦看一下3gstudent大佬的Windows-Token九種權限的利用一文。個人感覺到了內(nèi)網(wǎng)滲透的后期,想要更好的理解、利用相關漏洞,還是需要對win32有一定的熟悉,否則會一直浮于表面,并不能做的很深入。
最后附上自己總結的Windows認證的思維導圖。
審核編輯:劉清
-
WINDOWS
+關注
關注
3文章
3540瀏覽量
88595 -
SAM
+關注
關注
0文章
112瀏覽量
33519 -
SID
+關注
關注
0文章
14瀏覽量
3026
原文標題:Windows認證及抓密碼總結
文章出處:【微信號:菜鳥學安全,微信公眾號:菜鳥學安全】歡迎添加關注!文章轉載請注明出處。
發(fā)布評論請先 登錄
相關推薦
評論