對濫用Windows特權檔案操作的研究(上)

2021-09-24 01:35:50 字數 4109 閱讀 8203

本文介紹了如何濫用windows上的特權程序執行檔案,來實現本地許可權公升級(從使用者公升級到管理員/系統許可權)。除此之外,我還介紹了利用這類漏洞的可用技術、工具和具體過程。

特權檔案操作漏洞

以高許可權執行的程序會對所有程序中執行的檔案執行操作,這意味著,當高許可權程序在沒有足夠預防措施的情況下,可以訪問使用者控制的所有檔案或目錄。因此,從理論上說,這就是乙個安全漏洞,因為惡意攻擊者有可能會濫用該特權程序執行的操作,使特權檔案做一些不應該做的事情。對於許多特權訪問使用者控制的資源的情況都是如此,檔案只是乙個簡單的目標。

在滲透測試中,大家熟知的示例包括使用者可寫的服務可執行檔案和dll劫持漏洞,如果你對特權服務將執行的檔案具有寫入許可權,或者對它將在其中查詢dll的目錄具有寫入許可權,那麼你可以在這個特權程序中執行有效載荷。不過,以上舉例的這個漏洞已經眾所周知了,除了偶爾的配置漏洞發生之外,一般的防護軟體都可以對它進行預防了。

然而,其他檔案系統操作的潛在濫用似乎不那麼為人所知了,但同樣和以上所說的漏洞一樣危險。如果你可以讓乙個特權程序為你建立、複製、移動或刪除任意檔案,那麼使用system函式來呼叫shell指令碼的漏洞就離你不遠了。

此外,由於這些都是邏輯漏洞,它們通常非常穩定(不涉及記憶體損壞),通常能夠在**重構中存活(只要檔案操作邏輯不變),並且無論處理器體系結構如何,它們都以完全相同的方式被濫用。對攻擊者來說,這些功能非常有價值。中國菜刀

漏洞的尋找過程

使用者可寫的位置

2.公眾使用者的檔案和目錄:idem;

3.在c:\中建立的目錄具有預設acl(訪問控制列表):預設情況下,在分割槽根目錄中建立的目錄具有允許使用者寫入的許可acl;

4.具有預設acl的c:\ programdata子目錄:預設情況下,使用者可以建立檔案和目錄,但不能修改現有檔案和目錄,這通常是第乙個看的位置;

5. c:\ windows \ temp的子目錄:預設情況下,使用者可以建立檔案和目錄,但不能修改現有檔案和目錄,也不能讀取其他使用者建立的檔案/訪問目錄。有意檢視安裝程式和準時執行的其他特權軟體和指令碼,而不檢查預先存在的檔案和目錄;

你可以使用特定的工具和命令(例如sysinternals的accesschk,icacls或powershell的get-acl)檢查檔案許可權,也就可以使用瀏覽器的「安全」選項卡來檢查檔案許可權,「高階」表單具有「有效訪問」選項卡,允許列出特定帳戶或組對其的訪問許可權該檔案/目錄(如accesschk在命令列上執行)。下面的螢幕截圖顯示了在c:\programdata目錄上授予使用者組的(預設)訪問許可權:天空彩

尋找特權檔案操作

要查詢特權程序執行的檔案操作的示例,我們可以簡單地使用sysinternals的procmon,procmon是微軟出品用於監視windows系統裡程式的運**況,監視內容包括該程式對登錄檔的寫入、對檔案的寫入、網路的連線、程序和執行緒的呼叫情況,procmon是一款超強的系統監視軟體。procmon為感興趣的程序過濾檔案事件,當我們看到它訪問使用者可控制的檔案和目錄時,就可以檢查該程序是否使用模擬客戶端來實現這一點。

漏洞利用技術與工具

一旦我們發現在使用者/使用者可控制的檔案和目錄上,可以執行對一些檔案的操作,我們就需要一種方法來劫持這些操作,進而實施攻擊。

值得慶幸的是,james forshaw (@tiraniddo )通過他在ntfs檔案系統和windows內部的開創性工作完成了所有繁重工作,他在眾多文章中發表了其中的技術細節。他提出了幾種濫用windows檔案系統和路徑解析功能的技術(以下我會詳細介紹),並在開源的symboliclink-test -tools toolkit和ntapidotnet庫中實現了這些技術。他的技術和工具包為許多測試人員(包括我自己)開啟了一扇尋找這種型別的漏洞的門,讓這些漏洞的利用成為可能。

ntfs 交叉

交叉是乙個ntfs功能,它允許將目錄設定為檔案系統的安裝點(mount point),就像unix中的安裝點一樣,但是也可以設定為解析到另乙個目錄(在同乙個或另乙個檔案系統上)。在本文在,我們可以把它們看作是一種只包含目錄的符號交叉。

有趣的是,在大多數情況下,路徑解析將遵循 交叉規則(除非明確設定引數以防止這種情況),因此在上面的設定中,嘗試開啟c:\ dir \ file.txt的程式實際上將開啟c:\ other \ file.txt。

連線可以由非特權使用者建立,由於它們可以跨卷工作,因此你也可以將c:\dir「重定向」到d:\otherdir。如果你具有對現有目錄的寫入權,則可以將其轉換為 交叉,但必須為空。

ntfs交叉是用重解析點(reparse points)實現的,雖然內建工具不允許這樣做,但是可以通過設定自定義重解析點的實現將它們解析為任意路徑。createmountpoint工具允許你完成重解析點實現,對於常規 交叉,你還可以將mklink和powershell的new-item與-type junction引數一起使用。

ntfs重解析點(reparse points)

隨windows 2000發布的ntfs版本5裡最有趣的乙個屬性是引入了一些特殊的檔案系統功能,並應用於特定的檔案或目錄上。這些特殊功能使ntfs檔案系統更加強大和有擴充套件性。這個特性的實現基礎叫做重解析點(reparse points)。

現在我們假設使用者打算訪問乙個有標記的重解析點檔案。當檔案系統開啟檔案時,發現有重解析點關聯到這個檔案,於是「重解析」這個開啟檔案請求,發現與應用程式相關聯的可用過濾器,並與這個重解析點進行匹配,通過後就可以把重解析點的資料傳送給這個過濾器了。過濾器於是可以把這些資料用於任何途徑,依賴於應用程式最初的定義。這是乙個非常靈活的系統:應用程式不需關心重解析點是如何工作的,重解析點的實現細節對於使用者是完全透明的。你只需簡單的放入和拿出資料,其餘的事情都是自動完成,這使檔案系統的功能大大增強了。

微軟使用重解析點在windows 2000裡實現了如下的功能:

1. 符號鏈結(symbolic links):符號鏈結允許你建立乙個指向其他地方某個檔案的指標。ntfs並沒有像unix檔案系統那樣實現「真正」的檔案符號鏈結,但是從功能上重解析點完全可以模擬得一模一樣。本質上,ntfs的符號鏈結就是乙個重解析點,把對乙個檔案的訪問轉移到另乙個檔案身上。

3.卷裝載點(volume mount points):卷裝載點和前2者類似,只是更進一層:它能建立對整個卷的鏈結。比如,你可以為可行動硬碟或其他儲存介質建立卷裝載點,或者讓本地的不同分割槽(c:,d:,e:等等)看起來就像在乙個捲裡一樣。這對於那些大型的cd-rom伺服器非常有用,如果沒有卷裝載點,它們就只能為每張磁碟人工維護乙個分割槽字母。

4.遠端儲存伺服器(rss:remote storage server):windows 2000的這個特性能利用一些規則來移除ntfs卷上不常用的檔案,放到存檔介質裡(比如cd-rw或磁帶)。當它把檔案移出到「下線」或「半下線」的儲存介質上時,rss自動建立指向這個存檔檔案的重解析點,以備日後使用。

硬鏈結 (hard link)

我們都知道檔案都有檔名與資料,這在 linux 上被分成兩個部分:使用者資料 (user data) 與元資料 (metadata)。使用者資料,即檔案資料塊 (data block),資料塊是記錄檔案真實內容的地方;而元資料則是檔案的附加屬性,如檔案大小、建立時間、所有者等資訊。在 linux 中,元資料中的 inode 號(inode 是檔案元資料的一部分但其並不包含檔名,inode 號即索引節點號)才是檔案的唯一標識而非檔名。檔名僅是為了方便人們的記憶和使用,系統或程式通過 inode 號尋找正確的檔案資料塊。

·檔案有相同的 inode 及 data block;

·只能對已存在的檔案進行建立;

·不能交叉檔案系統進行硬鏈結的建立;

·不能對目錄進行建立,只可對檔案建立;

刪除乙個硬鏈結檔案並不影響其他有相同 inode 號的檔案。

此外,內建工具不允許你建立到沒有寫入許可權的檔案的硬鏈結,但是實際的系統呼叫允許你使用開啟供讀取的檔案來建立硬鏈結。使用symboliclink-test -tools中的createhardlink工具(或ruben boonen編寫的這個powershell指令碼)建立指向你沒有寫入許可權的檔案的硬鏈結。

注意,如果沒有對檔案的寫入許可權,就不能刪除建立的鏈結。另外,這項技術在即將發布的windows 10中得到了緩解。

Windows對python檔案加密

最近專案需要對部分python檔案加密,調研了部分方法都覺得不可行,最後採用了將python轉換成so檔案 pyd檔案的方法。so檔案,為liunx下的動態鏈結庫檔案,在windows下為dll檔案,pyd檔案是python的動態模組,實質是dll檔案,反編譯難度較大,應該可以達到加密的效果。安裝c...

C 對Windows檔案的操作

c 允許您使用各種目錄和檔案相關的類來操作目錄和檔案,比如directoryinfo類和fileinfo類。directoryinfo類派生自filesysteminfo類。它提供了各種用於建立 移動 瀏覽目錄和子目錄的方法。該類不能被繼承。下表列出了directoryinfo類中一些常用的屬性 序...

ASP對FoxPro自由表 DBF檔案 的操作

tag aspfoxpro dbf資料庫 一 問題的提出 經常看到網上有朋友問asp對foxpro庫表 dbf 的操作問題,現實中確有許多應用軟體使用dbf表,如何在網路環境中使用這些資料,使很多朋友一籌莫展。本人在乙個小專案中也遇到這個問題,通過查閱資料,多次試驗,初步解決了這個問題,寫出來與大家...