發表文章

目前顯示的是 五月, 2021的文章

[Windows] 惡意利用配置錯誤資訊清單(manifest)達成劫持與特權提升

圖片
 前言 這篇技巧是我在校稿最近剛出版的書 《Windows APT Warfare:惡意程式前線戰術指南》 正好看到  github.com/L3cr0f/DccwBypassUAC  這份 PoC 提及的 WinSxS 配置錯誤允許駭客劫持達成 UAC 特權提升看到比較有意思的事情所以寫一篇作為筆記。 不過這篇技巧目前在 Windows 10 上除非出現了配置錯誤的 DACL 可被寫入、否則新型的作業系統利用的可能性比較小XD 如果對 UAC 特權提升有興趣的讀者可以參考對岸這篇 BypassUAC原理及方法汇总  我覺得寫得還不錯、或者是看看我的書(?)  WinSxS  Windows 為了原生支援 WinSxS 多重系統模組功能——即同一個系統中可能會有 新舊程式使用到同個系統模組但不同版本號 的狀況。因此可以見到 C:\Windows\WinSxS\ 下有很多不同版本的資源包: 開發者能在編譯時期在純文字的資訊清單 *.manifest 記錄特定系統模組要從特定系統路徑、版本來裝載使用。而這邊引自上述對岸文章一段描述,其中提及了在資訊清單中還有一個特性可以使用: 在Windows中有些可执行程序没有内置的manifest,假设这个程序叫test.exe,如果攻击者在该可执行程序目录下新建一个test.exe.manifest并在manifest文件中指定file元素,则test.exe执行时会加载file元素中loadFrom属性指定的DLL(loadFrom的dll不能在KnownDlls中) 這是一個我覺得蠻有趣的特性,可以解釋為什麼系統槽下會有那麼多純文字保存的資訊清單 *.manifest 文件(我以前一直誤以為是開發者編譯完忘記刪掉XD)這描述說明了兩點: 除了開發者相當熟悉的嵌入式資訊清單,還有導出式資訊清單——在 同層資料夾中保存與程式名同名的 *.manifest 文件 即可被程式裝載器正確識別 無論嵌入或導出式資訊清單:使用 loadFrom  標籤可以指示程式裝載器在「裝載特定 DLL 模組」時便會被 redirect 去裝載另一個特定的 DLL 模組 總而言之當程式裝載器正在初始化一支靜態程式文件、發現其不具嵌入式資訊清單時,那麼就會同層目錄確認是否有同名的 *.manifest 清單文件進行解析並初始化,以下做個舉例: 桌面上現在有