Bypass-UAC(用戶帳戶控制)的那些事
一、初識UAC
1.用戶帳戶控制(UAC)簡介
在本文中,我們將簡要介紹一下用戶帳戶控制,即UAC。我們還將研究它如何潛在地保護免受惡意軟件的攻擊并忽略UAC提示可能給系統帶來的一些問題。
2.什么是用戶帳戶控制(UAC)?
Microsoft的Windows Vista和Windows Server 2008操作系統引入了一種良好的用戶帳戶控制架構,以防止系統范圍內的意外更改,這種更改是可以預見的,并且只需要很少的操作量。
換句話說,它是Windows的一個安全功能,它支持防止對操作系統進行未經授權的修改,UAC確保僅在管理員授權的情況下進行某些更改。如果管理員不允許更改,則不會執行這些更改,并且Windows系統保持不變。
3.UAC如何運行?
UAC通過阻止程序執行任何涉及有關系統更改/特定任務的任務來運行。除非嘗試執行這些操作的進程以管理員權限運行,否則這些操作將無法運行。如果您以管理員身份運行程序,則它將具有更多權限,因為它將被“提升權限”,而不是以管理員身份運行的程序。
一些沒有管理員權限無法完成的操作:
注冊表修改(如果注冊表項在HKEY_LOCAL_MACHINE下(因為它影響多個用戶),它將是只讀的)
加載設備驅動程序
DLL注入
修改系統時間(時鐘)
修改用戶帳戶控制設置(通過注冊表,可以啟用/禁用該設置,但您需要正確的權限才能執行此操作)
修改受保護的目錄(例如Windows文件夾,Program Files)
計劃任務(例如,以管理員權限自動啟動)
UAC不會自動阻止惡意軟件,其目的不是確定程序是否是惡意軟件。這同樣取決于用戶。如果將以管理員權限執行程序,則將提醒用戶并且需要用戶確認。-
在開啟了UAC之后,如果用戶是標準用戶, Windows 會給用戶分配一個標準Access Token.
如果用戶以管理員權限登陸,會生成兩份訪問令牌,一份是完整的管理員訪問令牌(Full Access Token),一份是標準用戶令牌
具體的表現形式是如下圖,當我們需要其他特權的時候,會彈出窗口,詢問你是否要允許以下程序對此計算機更改?如果你有完整的訪問令牌(即,你以設備管理員的身份登錄,或者你屬于管理員組),則可以選擇是,然后繼續進行。但是,如果已為你分配了標準的用戶訪問令牌,則會提示你輸入具有特權的管理員的憑據。
二、Bypass-UAC提示框的方法
1.白名單程序繞過
有些系統程序是直接獲取管理員權限,而不會觸發UAC彈框,這類程序稱為白名單程序,例如:slui.exe、wusa.exe、taskmgr.exe、msra.exe、eudcedit.exe、eventvwr.exe、CompMgmtLauncher.exe,rundll32.exe,explorer.exe等等。
常見的利用方式有:
DLL注入(RDI技術),一般注入到常駐內存的可信進程,如:explorer
DLL劫持,常和注冊表配合使用達到劫持目的
DLL劫持
exe文件運行時會加載許多dll文件,這些dll文件的加載順序是
程序所在目錄
系統目錄即SYSTEM32目錄16位系統目錄即SYSTEM目錄PATH環境變量中列出的目錄
同時,dll加載也遵循著Know DLLs注冊表項的機制:Know DLLs注冊表項指定的DLL是已經被操作系統加載過后的DLL,不會被應用程序搜索并加載。在注冊表Windows目錄程序加載目錄(SetCurrentDirecctory)HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\KnownDLLS處可以看見這些dll

在knowdlls表項中的dll是預先就加載進內存空間的,被諸多應用調用著,改動需要高權限。
如果我們在應用程序找到正確的dll之前,將我們自己創造的dll放入優先級更高的搜索目錄讓應用程序優先加載此dll文件,這就造成了dll劫持。但這只是dll劫持的其中一種途徑,他有這些途徑:
(1) DLL替換:用惡意的DLL替換掉合法的DLL
(2) DLL搜索順序劫持:當應用程序加載DLL的時候,如果沒有帶指定DLL的路徑,那么程序將會以特定的順序依次在指定的路徑下搜索待加載的DLL。通過將惡意DLL放在真實DLL之前的搜索位置,就可以劫持搜索順序,劫持的目錄有時候包括目標應用程序的工作目錄。
(3) 虛擬DLL劫持:釋放一個惡意的DLL來代替合法應用程序加載的丟失/不存在的DLL
(4) DLL重定向:更改DLL搜索的路徑,比如通過編輯%PATH%環境變量或 .exe.manifest/.exe.local文件以將搜索路徑定位到包含惡意DLL的地方。
(5) WinSxS DLL替換:將目標DLL相關的WinSxS文件夾中的惡意DLL替換為合法的DLL。此方法通常也被稱為DLL側加載
(6) 相對路徑DLL劫持:將合法的應用程序復制(并有選擇地重命名)與惡意的DLL一起放入到用戶可寫的文件夾中。在使用方法上,它與(簽名的)二進制代理執行有相似之處。它的一個變體是(有點矛盾地稱為)“自帶LOLbin”,其中合法的應用程序帶有惡意的DLL(而不是從受害者機器上的合法位置復制)。
白名單程序
odbcad32.exe
方法:
打開C:\Windows\system32\odbcad32.exe,然后通過以下方法打開powershell或者cmd

2.偽裝進程PEB繞過UAC
上面在利用COM接口的ShellExec執行命令的時候,因為執行該操作的進程身份是不可信的,所以會觸發UAC彈窗。為了能夠迷惑系統,通過修改PEB結構,讓系統誤認為這是一個可信進程,偽裝的可信進程可以是calc.exe、rundll32.exe、explorer.exe等。
3.無文件技術
“無文件攻擊”是一種攻擊策略,其出發點就是避免將惡意文件放在磁盤上,以逃避安全檢測。無文件四種攻擊形式:
惡意文檔比如:在word中加入惡意的宏代碼實現命令執行,又或者郵件中。
惡意腳本常用的腳本引擎:powershell.exe,cscript.exe,cmd.exe 和 mshta.exe,同樣不生成惡意二進制文件。
惡意本地程序交互例如:rundll32.exe、wmi等,詳細參考這里。
惡意內存代碼直接生成純shellcode,通過其他方式加載到內存執行。
4.UACME項目
利用方式主要可以分為兩大類
各類UAC白名單程序的DLL劫持(Dll Hijack)
各類提升權限的COM接口利用(Elevated COM interface)
項目的主程序為Akagi,其中包含了所有的method,使用vs2019本地編譯后可以使用akagi32 41或者akagi64 41啟動程序,41這個指的是README中描述的方法索引,運行后可以直接得到管理員權限的cmd窗口。
getsystem``getuid項目的Source目錄存儲的是所有子項目的源碼,其中Source/Shared存放的是被所有子項目共同引用的一些函數。# 三、使用Metasploit繞過UAC的一些方法``首先通過explloit獲得目標主機的meterprter。獲得meterpreter會話1后,輸入以下命令以檢查是否是system權限三、windows繞過UAC的一些方式
1.Windows權限升級繞過UAC保護
此模塊將通過進程注入使用可信任發布者證書繞過Windows UAC。它將生成關閉UAC標志的第二個shell。
msf > use exploit/windows/local/bypassuacmsf exploit windows/local/bypassuac) > set session 1msf exploit(windows/local/bypassuac) > exploit
現在以下命令以確定system權限特權.
getsystem getuid
很好, 這里我們獲得了NT AUTHORITY\SYSTEM 權限,現在如果你輸入“ shell ”命令,你將獲得具有管理員權限的命令提示符。

2.Windows權限提升繞過UAC保護(內存注入)
此模塊將通過進程注入使用可信任的發布者證書繞過Windows UAC。它將生成關閉UAC標志的第二個shell。在普通技術中,該模塊使用反射式DLL注入技術并只除去了DLL payload 二進制文件,而不是三個單獨的二進制文件。但是,它需要選擇正確的體系架構(對于SYSWOW64系統也使用x64)。如果指定exe::custom,應在單獨的進程中啟動 payload 后調用ExitProcess()。
msf > use exploit/windows/local/bypassuac_injectionmsf exploit(windows/local/bypassuac_injection) > set session 1msf exploit(windows/local/bypassuac_injection) > exploit
現在輸入以下命令以確定system權限特權。
getsystemgetuid
最終你將獲得NT AUTHORITY\SYSTEM 權限,現在如果你輸入“ shell ”命令,你將獲得具有管理員權限的命令提示符。

3.繞過Windows UAC保護(通過FodHelper注冊表項)
此模塊將通過在當前用戶配置單元下劫持注冊表中的特殊鍵并插入將在啟動Windows fodhelper.exe應用程序時調用的自定義命令來繞過Windows 10 UAC。它將生成關閉UAC標志的第二個shell。此模塊修改注冊表項,但在調用payload后將清除該項。該模塊不需要payload的體系架構和操作系統匹配。如果指定exe:custom,則應在單獨的進程中啟動payload后調用ExitProcess()。
msf > use exploit/windows/local/bypassuac_fodhelpermsf exploit(windows/local/bypassuac_fodhelper) > set session 1msf exploit(windows/local/bypassuac_fodhelper) > exploit
從給定的meterprer中,您可以看到meterpreter會話2已打開,現在輸入以下命令以確定system權限特權。
getsystemgetuid
很好, 這里我們獲得了NT AUTHORITY\SYSTEM 權限,現在如果你輸入“ shell ”命令,你將獲得具有管理員權限的命令提示符。

4.Windows權限升級繞過UAC保護(通過Eventvwr注冊表項)
此模塊將通過在當前用戶配置單元下劫持注冊表中的特殊鍵并插入將在啟動Windows事件查看器時調用的自定義命令來繞過Windows UAC。它將生成關閉UAC標志的第二個shell。此模塊修改注冊表項,但在調用payload后將清除該項。該模塊不需要payload的體系架構和操作系統匹配。如果指定EXE ::Custom,則應在單獨的進程中啟動payload后調用ExitProcess()。
msf > use exploit/windows/local/bypassuac_eventvwrmsf exploit(windows/local/bypassuac_eventvwr) > set session 1msf exploit(windows/local/bypassuac_eventvwr) > exploit
從給定的meterpreter中,您可以看到meterpreter會話2已打開,現在輸入以下命令以確定system權限特權。
getsystemgetuid
您將再次獲得NT AUTHORITY\SYSTEM 權限。

5.Windows權限升級繞過UAC保護(通過COM處理程序劫持)
此模塊將通過在hkcu配置單元中創建COM處理程序注冊表項來繞過Windows UAC。當加載某些較高完整性級別進程時,會引用這些注冊表項,從而導致進程加載用戶控制的DLL。這些DLL包含導致會話權限提升的payload。此模塊修改注冊表項,但在調用payload后將清除該項。這個模塊需要payload的體系架構和操作系統匹配,但是當前的低權限meterpreter會話體系架構中可能不同。如果指定exe::custom,則應在單獨的進程中啟動payloa后調用ExitProcess()。此模塊通過目標上的cmd.exe調用目標二進制文件。因此,如果cmd.exe訪問受到限制,此模塊將無法正常運行。
msf > use exploit/windows/local/bypassuac_comhijackmsf exploit(windows/local/bypassuac_comhijack) > set session 1msf exploit(windows/local/bypassuac_comhijack) > exploit

從給定的meterpreter中,您可以看到meterpreter會話2已打開,現在鍵入以下命令以確定system權限特權。
getsystemgetuid
最后使用shell進行連接。
總結:
繞過UAC的保護有很多種方式,有白名單的、還有注冊表劫持等等。本文僅作研究學習分享。


