您好,登錄后才能下訂單哦!
如何理解Windows認證及抓密碼,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
1. windows的認證方式主要有哪些?
windows的認證方式主要有NTLM認證、Kerberos認證兩種。同時,Windows Access Token記錄著某用戶的SID、組ID、Session、及權限等信息,也起到了權限認證的作用。
其中,NTLM認證主要有本地認證和網絡認證兩種方式。本地登錄時,用戶的密碼存儲在%SystemRoot%\system32\config\sam這個文件里。當用戶輸入密碼進行本地認證的過程中,所有的操作都是在本地進行的。他其實就是將用戶輸入的密碼轉換為NTLM Hash,然后與SAM中的NTLM Hash進行比較。而網絡認證則是基于一種Challenge/Response認證機制的認證模式。他的認證過程我們下邊會詳細講。
Kerberos認證用于域環境中,它是一種基于票據(Ticket)的認證方式。他的整個認證過程涉及到三方:客戶端、服務端和KDC(Key Distribution Center)。在Windows域環境中,由DC(域控)來作為KDC。
Access Token(訪問令牌)是用來描述進程或線程安全上下文的對象,令牌所包含的信息是與該用戶賬戶相關的進程或線程的身份和權限信息。當用戶登陸時,系統生成一個Access Token,然后以該用戶身份運行的的所有進程都擁有該令牌的一個拷貝。這也就解釋了A用戶創建一個進程而B用戶沒有該進程的權限。
2. NTLM的認證過程是怎樣什么?
首先是本地認證,也就是NTLM Hash的生成方式。
當用戶注銷、重啟、鎖屏后,操作系統會讓winlogon顯示登錄界面,也就是輸入框。當winlogon.exe接收輸入后,將密碼交給LSASS進程,這個進程中會存一份明文密碼,將明文密碼加密成NTLM Hash,對SAM數據庫比較認證。(winlogon.exe即Windows Logon Process,是Windows NT用戶登陸程序,用于管理用戶登錄和退出。
LSASS用于微軟Windows系統的安全機制。它用于本地安全和登陸策略。)
比如當用戶輸入密碼123456后,那么操作系統會將123456轉換為十六進制,經過Unicode轉換后,再調用MD4加密算法加密,這個加密結果的十六進制就是NTLM Hash
123456 -> hex(16進制編碼) = 313233343536 313233343536 -> Unicode = 610064006d0069006e00 610064006d0069006e00 -> MD4 = 209c6174da490caeb422f3fa5a7ae634
看明白本地認證的過程后,再說一下網絡認證的具體過程。
NTLM協議的認證共需要三個消息完成:協商、挑戰、認證。
協商:主要用于確認雙方協議版本、加密等級等
挑戰:服務器在收到客戶端的協商消息之后, 會讀取其中的內容,并從中選擇出自己所能接受的服務內容,加密等級,安全服務等等。 并生成一個隨機數challenge, 然后生成challenge消息返回給客戶端。該消息就是挑戰/響應認證機制的主要功能體現。
認證:驗證主要是在挑戰完成后,驗證結果,是認證的***一步。
詳細過程如下:
***步,輸入密碼,然后LSASS會把密碼的NTLM Hash后的值先存儲到本地。
第二步,客戶端把用戶名的明文發送給服務端
第三步,服務端會生成一個16位的隨機數,即challenge,再傳回給客戶端
第四步,當客戶端收到challenge后,用在***步中存儲的NTLM Hash對其加密,然后再將加密后的challenge發送給服務器,也就是response。
第五步,服務端在收到response后,會向DC發送針對客戶端的驗證請求。該請求主要包含以下三方面的內容:客戶端用戶名、客戶端NTLM Hash加密的Challenge、原始的Challenge。
第六步,當DC接到過來的這三個值的以后,會根據用戶名到DC的賬號數據庫(ntds.dit)里面找到該用戶名對應的NTLM Hash,然后把這個hash拿出來和傳過來的challenge值進行比較,相同則認證成功,反之,則失敗。
上邊說的是NTLM v1認證方式,NTLM v2和v1最顯著的區別就是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后,我通常首先嘗試能不能直接在線破解。常用的破解網站:
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協議認證流程,所以不算是一個漏洞,算是一個技巧。
常用的pth的工具主要有:mimikatz(***)、wmiexec/psexec、exploit/windows/smb/psexec_psh、powershell invoke系列小腳本。
當然,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,密鑰分發中心,負責管理票據、認證票據、分發票據,但是KDC不是一個獨立的服務,它由AS和TGS組成。
AS: Authentication Service,驗證服務,為client生成TGT的服務
TGS: Ticket Granting Service,票據授予服務,為client生成某個服務的ticket
TGT: Ticket Granting Ticket,入場券,通過入場券能夠獲得票據,是一種臨時憑證的存在。
Ticket:票據,是網絡中各對象之間互相訪問的憑證
AD: Account Database,存儲所有client的白名單,只有存在于白名單的client才能順利申請到TGT。
DC: Domain Controller,域控
KRBTGT: 每個域控制器都有一個krbtgt賬戶,是KDC的服務賬戶,用來創建TGS加密的密鑰。
Kerberos提供了一個集中式的認證方式,在整個認證過程中總共要涉及到三方:客戶端,服務端和KDC, 在Windows域環境中,KDC的角色由DC來擔任,Kerberos是一種基于票據的認證方式,票據(Ticket)是用來安全的在認證服務器和用戶請求的服務之間傳遞用戶的身份,同時也會傳遞一些附加信息,用來保證使用Ticket的用戶必須是Ticket中指定的用戶,Ticket一旦生成,在生存時間內可以被Client多次使用來申請同一個Server的服務。這里就存在一個票據竊取問題。
說下kerberos的大致工作流程,域中的客戶端要想訪問同域中的某個服務器資源時,需要首先購買該服務端認可的票據(Ticket),也就是說,客戶端在訪問服務器之前需要預先買好票,等待服務驗票之后才能入場,但是這張票不能直接購買,還需要一張認購權證(TGT),也就是說客戶端在買票之前需要預先獲得一張認購權證,這張認購權證和進入服務器的入場券均由KDC發售。引用網絡上一張思路很清晰的圖。
5. 域滲透中針對Kerberos的姿勢主要有哪些?
說完認證過程后,就要說下經常用的兩種票據:白銀票據和黃金票據了。
白銀票據的特點是:不需要與KDC進行交互、需要目標服務的NTLM Hash。因此當擁有Server Hash時,我們就可以偽造一個不經過KDC認證的一個Ticket。
利用:
kerberos::golden /domain:<域名> /sid:<域SID> /target:<服務器主機名> /service:<服務類型> /rc4: /user:<用戶名> /ptt
由于白銀票據需要目標服務器的Hash,所以沒辦法生成對應域內 所有服務器的票據,也不能通過TGT申請。因此只能針對服務器 上的某些服務去偽造。如cifs服務用于Windows主機間的文件共享,用其他如LDAP等服務則無法訪問server的文件系統。
與白銀票據相比,黃金票據的特點是需要與DC通信、需要krbtgt用戶的hash,也就是需要拿下域控。
利用:
lsadump::dcsync /domain:域名 /user:krbtgt
kerberos::golden /domain:<域名> /sid:<域SID> /rc4: /user:<任意用戶名> /ptt
拿到黃金票據后,就可以偽造黃金票據,然后就能獲取任何Kerberos服務權限,登錄任意域內任意一臺主機。mimikatz導出域內所有主機的票據,命令是sekurlsa::tickets /export,或者dump NTDS.dit也可以。
那***就要說下拿域控的姿勢了。
最常用的毫無疑問是ms14068。主要利用工具是goldenPac.py或者kekeo/PyKEK。利用方式網上很多文章,這里不詳細說。
6. Windows Access Token主要知識點淺談
Windows Access Token(訪問令牌)有兩種,一種是Delegation token(授權令牌),主要用于交互會話登錄(例如本地用戶直接登錄、遠程桌面登錄),另一種是Impersonation token(模擬令牌),主要用于非交互登錄(利用net use訪問共享文件夾)。
每個進程創建時都會根據登錄會話權限由LSA(Local Security Authority)分配一個Token。如果CreaetProcess時自己指定了 Token, LSA會用該Token, 否則就用父進程Token的一份拷貝。當用戶注銷后,系統將會使授權令牌切換為模擬令牌,不會將令牌清除,只有在重啟機器后才會清除。
一般通過incognito.exe或者msf中的incognito模塊來竊取令牌(Metasploit中的incognito,是從windows平臺下的incognito移植過來的),從而獲得令牌對應的權限,比如已獲得admin權限,然后通過竊取令牌然后令牌假冒來獲得system權限。
除此之外,推薦看一下3gstudent大佬的Windows-Token九種權限的利用一文。個人感覺到了內網滲透的后期,想要更好的理解、利用相關漏洞,還是需要對win32有一定的熟悉,否則會一直浮于表面,并不能做的很深入。
***附上自己總結的Windows認證的思維導圖。
關于如何理解Windows認證及抓密碼問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。