滲透基礎——Windows下計劃任務的使用

滲透基礎——Windows下計劃任務的使用

來自專欄安全脈搏2 人贊了文章

0x00 前言

在滲透測試中,尤其是域滲透,常常會用到Windows系統的計劃任務,一是用於遠程啟動程序,二是用於程序的自啟動

那麼,計劃任務具體有哪些使用技巧呢?是否對許可權有要求?一定需要管理員許可權才能運行嗎?

0x01 簡介

本文將要介紹以下內容:

  • 命令行實現
  • c++實現
  • 不同許可權下創建計劃任務的區別
  • COM組件ITaskService能否提權運行
  • 命令行開啟和關閉計劃任務
  • 日誌位置

0x02 簡介

官方說明文檔:

msdn.microsoft.com/en-u

需要開啟服務Task Scheduler

可在以下情況觸發:

  • When a specific system event occurs.
  • At a specific time.
  • At a specific time on a daily schedule.
  • At a specific time on a weekly schedule.
  • At a specific time on a monthly schedule.
  • At a specific time on a monthly day-of-week schedule.
  • When the computer enters an idle state.
  • When the task is registered.
  • When the system is booted.
  • When a user logs on.
  • When a Terminal Server session changes state.

計劃任務創建後,會在C:WindowsSystem32Tasks保存XML格式的配置文件

0x03 計劃任務的配置方式

1、界面操作

執行taskschd.msc,如下圖

選中Task Scheduler Library ,右鍵 -> Create Task...

彈出界面,逐個配置即可,如下圖

2、命令行配置

(1) at 命令

(管理員許可權)

eg:

at 23:53 notepad.exe

默認以system許可權啟動,適用於Win7

從Win8開始不再支持at命令,所以不過多介紹

(2) schtasks命令

支持Win7-Win10

1.每天固定時間,以普通許可權啟動notepad.exe

命令如下:

schtasks /Create /TN TestService1 /SC DAILY /ST 01:02 /TR notepad.exe

C:WindowsSystem32Tasks產生新文件TestService1,內容如下:

值得注意的是<RunLevel>LeastPrivilege</RunLevel>,代表許可權為普通用戶

2.每天固定時間,以system許可權啟動notepad.exe

命令如下(管理員許可權):

schtasks /Create /TN TestService2 /SC DAILY /ST 01:02 /TR notepad.exe /RL HIGHEST

C:WindowsSystem32Tasks產生新文件TestService2,內容如下:

值得注意的是<RunLevel>HighestAvailable</RunLevel>,代表許可權為最高,一般為System許可權

3.每天固定時間,以system許可權啟動notepad.exe,通過導入xml文件的方式

以文件TestService2作為模板,修改啟動時間,保存為1.xml,內容如下:

通過xml文件導入配置,建立計劃任務,以system許可權啟動,命令如下(管理員許可權):

schtasks /create /xml c: est1.xml /tn TestService3

註:

如果是一個新的系統,修改<Author>、<Date>、<StartBoundary>、<UserId>和<Command>即可

4.每天固定時間,以普通許可權啟動notepad.exe,通過導入xml文件的方式

修改1.xml:

<RunLevel>HighestAvailable</RunLevel>改為<RunLevel>LeastPrivilege</RunLevel>即可

導入配置的命令如下:

schtasks /create /xml c: est1.xml /tn TestService4

補充:schtasks的其他命令用法

查看服務狀態:

schtasks /Query /TN TestService1

刪除服務:

schtasks /Delete /TN TestService1 /F

註:

服務執行成功後不會自動刪除

0x04 編寫程序實現

官方文檔:

msdn.microsoft.com/en-u

c++定時啟動程序的實現實例:

msdn.microsoft.com/en-u

程序實現了在特定時間啟動notepad.exe

通過分析源碼,發現是調用了COM組件ITaskService

於是產生了一個新問題,能否通過COM組件ITaskService越權執行?

答案是不能,原因如下:

首先,在c代碼中能夠找到CLSID_TaskScheduler對應的GUID,位於taskschd.h文件中

如下圖

GUID為"0f87369f-a4e5-4cfc-bd3e-73e6154572dd"

查看註冊表信息,路徑為HKEY_LOCAL_MACHINESOFTWAREClassesCLSID{0f87369f-a4e5-4cfc-bd3e-73e6154572dd}

信息如下圖

未發現註冊表項Elevation,也就是說這個COM組件ITaskService不支持使用COM Elevation Moniker提升許可權

那麼,能否通過添加註冊表項Elevation實現COM組件提升許可權呢?

答案也是不可以,測試如下:

修改註冊表HKEY_LOCAL_MACHINESOFTWAREClassesCLSID{0f87369f-a4e5-4cfc-bd3e-73e6154572dd},需要TrustedInstaller許可權

關於如何獲得TrustedInstaller許可權可參考文章《滲透技巧——Token竊取與利用》

接下來添加註冊表項Elevation,值為1

測試1:

添加LocalizedString,值為C:Windowssystem32 askschd.dll

如下圖

修改官方的實例代碼,添加使用COM Elevation Moniker提升許可權的代碼,關鍵代碼如下:

HWND hwnd = GetConsoleWindow(); BIND_OPTS3 bo; WCHAR wszCLSID[50]; WCHAR wszMonikerName[300]; StringFromGUID2( CLSID_TaskScheduler,wszCLSID,sizeof(wszCLSID)/sizeof(wszCLSID[0])); hr = StringCchPrintf(wszMonikerName,sizeof(wszMonikerName)/sizeof(wszMonikerName[0]),L"Elevation:Administrator!new:%s", wszCLSID); memset(&bo, 0, sizeof(bo)); bo.cbStruct = sizeof(bo); bo.hwnd = hwnd; bo.dwClassContext = CLSCTX_LOCAL_SERVER; hr = CoGetObject(wszMonikerName, &bo, IID_PPV_ARGS(&pService));

程序報錯,而且沒有彈出需要提升許可權的UAC對話框,對其跟蹤調試,如下圖

提示(ERROR_INVALID_DATA) : 數據無效

通過IDA靜態分析taskschd.dll,查看Function

沒有發現提升許可權的函數(關鍵詞Elevated、Admin)

測試2:

接下來嘗試將LocalizedString修改為其他可用的路徑

LocalizedString設置為@%SystemRoot%system32shell32.dll,-50176(COM組件IFileOperation的值)

執行過程彈出需要提升許可權的UAC對話框,接下來報錯,如下圖

示REGDB_E_CLASSNOTREG Class not registered

表示這個組件不支持ITaskService::Connect

和預期的一樣,shell32.dll不包含函數ITaskService::Connect

綜上,不能簡單的通過修改註冊表就能使一個普通的COM組件支持許可權提升

接下來介紹一下C++代碼在實現上的細節

1、添加計劃任務,定時以普通許可權執行程序

直接參考示例代碼即可,地址如下:

msdn.microsoft.com/en-u

修改源代碼的啟動時間,去掉結束時間

2、添加計劃任務,定時以system許可權執行程序

需要管理員許可權

上面的代碼直接以管理員許可權運行是不可以的,這是因為並沒有指定以最高許可權啟動

如下圖

需要修改源代碼,添加指定以HIGHEST許可權啟動

關鍵代碼如下:

當然,以普通許可權啟動會提示許可權不夠,如下圖

0x05 TaskScheduler日誌

日誌類別: Microsoft-Windows-TaskScheduler

保存位置: C:WindowsSystem32winevtLogs

TaskScheduler日誌功能默認關閉

開啟方法:

註冊表位置:HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionWINEVTChannelsMicrosoft-Windows-TaskScheduler/Operational

鍵Enabled設為1(默認為0)

cmd命令如下:

REG ADD "HKLMSOFTWAREMicrosoftWindowsCurrentVersionWINEVTChannelsMicrosoft-Windows-TaskScheduler/Operational" /v Enabled /t REG_DWORD /d 1 /f

統計日誌列表,查詢所有日誌信息,包含時間,數目:

wevtutil gli Microsoft-Windows-TaskScheduler/Operational

查看日誌內容:

wevtutil qe Microsoft-Windows-TaskScheduler/Operational

刪除該類日誌所有內容:

wevtutil cl Microsoft-Windows-TaskScheduler/Operational

刪除單條日誌:

該部分放在之後的文章進行詳細介紹

0x06 小結

本文介紹了計劃任務的常用內容,包括多種創建計劃任務的方法,不同許可權創建計劃任務的區別,經測試得出了一個結論,COM組件ITaskService無法提權運行

歡迎來安全脈搏查看更多的乾貨文章和我們一起交流互動哦!

脈搏地址:安全脈搏 | 分享技術,悅享品質

微博地址:Sina Visitor System


推薦閱讀:

(總結我的學習之路-新手科普篇)
mysql注入學習2(資料庫信息收集)
安全開發:說一說Python的作用域與名稱空間
由SQL注入(或資料庫許可權)滲透WordPress站點的一些手法
域滲透初探(二):域環境搭建

TAG:滲透測試 | 科技 | 計算機科學 |