看我如何利用事件查看器繞過UAC(用戶帳戶控制)
寫在前面的話
用戶賬戶控制(UAC)是微軟開發(fā)出的一套安全控制機制,其目的是為了限制未經(jīng)授權的應用程序以管理員等級的權限執(zhí)行,但是當管理員提供了密碼并允許該程序執(zhí)行的話,那么這個非特權應用仍然能夠以管理員權限運行。這也就意味著,由于用戶賬戶控制機制的存在,滲透測試人員就可以通過Meterpreter來阻止這種提權方法。
下圖即為UAC阻止應用程序提權的演示樣例:
Matt Nelson在其發(fā)布的技術博客中解釋稱,通過劫持注冊表鍵,我們是有可能利用類似Event Viewer(事件查看器)這樣的原生Windows服務來繞過用戶賬戶控制(UAC)的。首先,Event Viewer(事件查看器)的進程(eventvwr.exe)是以高級完整權限運行的;其次,Event Viewer(事件查看器)是Microsoft Management Console(微軟管理控制臺)通過注冊表進行加載的,因此我們的這個假設完全是可以實現(xiàn)的。
手動實現(xiàn)
在新版本的Windows(包括Vista及其之后版本)平臺中,進程是以三種不同的權限等級運行的。系統(tǒng)可以通過這三個不同的等級來確定進程最終以哪一種權限來運行:
- -高級:管理員權限
- -中級:標準用戶權限
- -低級:受限制權限
我們可以根據(jù)Process Explorer(進程查看器)來確定一個進程所分配到的權限等級。當事件查看器出于運行過程中時,我們可以通過下面這兩個因素來檢查Windows進程的權限:
1. 系統(tǒng)通過微軟管理控制臺(mmc.exe)加載事件查看器;
2. 事件查看器以高級完整權限運行;
從下圖中可以看到,事件查看器進程是以高級權限運行的:

這里需要注意的是,當eventvwr.exe被執(zhí)行之后,它會嘗試在下面這兩個注冊表地址中搜索mmc.exe:
- -HKCU\Software\Classes\mscfile\shell\open\command
- -HKCR\mscfile\shell\open\command
由于第一個注冊表地址并不存在,因此mmc.exe會以第二個注冊表地址運行,隨后該地址便會加載文件eventvwr.msc并將相關信息顯示給用戶。
下圖即為MMC以及事件查看器的相關信息:
這樣一來,攻擊者就有可能創(chuàng)建一個壓根不存在的注冊表地址來以高級權限運行某個進程了,而這樣就可以允許攻擊者繞過目標系統(tǒng)的用戶賬戶控制(UAC)。
下圖顯示的是攻擊者通過事件查看器來提升命令控制臺(CMD)權限的操作界面:
當eventvwr.exe得到執(zhí)行之后,它將會直接打開命令控制臺窗口,而且在整個過程中系統(tǒng)既不會彈出用戶賬戶控制窗口,也不會請求高級權限。如下圖所示:
這項攻擊技術的隱蔽性非常高,因為整個過程根本無需觸及硬盤,而且也不需要進行任何的進程注入,這樣就可以防止被那些基于進程行為監(jiān)控的反病毒產(chǎn)品或安全解決方案所檢測到。
自動化實現(xiàn)
需要注意的是,我們還可以通過一個不可檢測的惡意Payload來代替之前所彈出的命令控制臺窗口,這樣不僅可以允許我們通過Meterpreter會話來實現(xiàn)自動化提權,而且還可以執(zhí)行很多其他的系統(tǒng)級指令。我們可以在注冊表中加載自定義Payload:
我們可以在進程查看器中看到,進程pentestlab3.exe再一次以高級權限運行了:
Metasploit的handler模塊可以捕獲到提權的Meterpreter會話,而此時我們就可以給目標應用進行提權了,因為我們現(xiàn)在已經(jīng)繞過了目標系統(tǒng)的用戶賬戶控制。
Metasploit
除了上面所描述的技術方法之外,我們也可以使用Metasploit提供的模塊來實現(xiàn)整個攻擊過程的自動化,并自動返回一個高權限的Meterpreter會話。命令如下:
- exploit/windows/local/bypassuac_eventvwr
通過事件查看器繞過用戶賬戶控制(Metasploit版):