metasploit、powershell之Windows錯誤系統配置漏洞實戰提權

metasploit、powershell之Windows錯誤系統配置漏洞實戰提權

來自專欄 雜術館

引言

我們在獲得目標機一個普通的許可權時,除了常規提權方法外,還可以通過查找目標主機錯誤的系統配置和漏洞來獲取系統許可權。本節所講的「Trusted Service Paths(可信任服務路徑)漏洞」和「系統服務的錯誤許可權配置漏洞」絕對是你值得嘗試的一個環節。

Trusted Service Paths(可信任服務路徑)漏洞介紹

「Trusted Service Paths」漏洞是由系統中的「CreateProcess」函數引起的,利用了windows文件路徑解析的特性,並涉及了服務路徑的文件/文件夾許可權,存在缺陷的服務程序利用了屬於可執行文件的文件/文件夾許可權。如果許可權合適,我們可以上傳惡意可執行文件。簡單講就是查找系統服務文件中存在非引用路徑。如果一個服務調用可執行文件,沒有正確處理引用的全路徑名,就可以利用這個漏洞。

Trusted Service Paths漏洞產生原因

windows服務通常都是以System許可權運行的,所以系統在解析服務的二進位文件對應的文件路徑中的空格的時候也會以系統許可權進行解析。如果我們能利用這一特性,就有機會進行許可權提升。

例如,有如下的文件路徑:

C:Program FilesSome FolderService.exe

對於上面文件路徑中的每一個空格,windows都會嘗試尋找並執行名字與空格前的名字向匹配的程序。操作系統會對文件路徑中空格的所有可能進行嘗試,直到找到一個匹配的程序。以上面的例子為例,windows會依次嘗試確定和執行下面的程序:

C:Program.exeC:Program FilesSome.exeC:Program FilesSome FolderService.exe

所以如果我們能夠上傳一個適當命名的惡意可執行程序在受影響的目錄,服務一旦重啟,我們的惡意程序就會以system許可權運行(大多數情況下)。

Metasploit下Trusted Service Paths漏洞的實戰利用

此時假設我們通過一系列前期滲透,已經成功獲得了目標機的meterpreter shell(過程略),當前許可權為shuteer,我們想獲取系統的system許可權,但是嘗試了各類提權方法後失敗,如圖1所示。此時我們可以嘗試通過TrustedService Paths漏洞來嘗試實現許可權的提升。

圖1 當前許可權

1.先檢測目標主機是否存在該漏洞。理論上講,如果一個服務的可執行文件的路徑沒有用雙引號封閉,並且包含空格,那麼這個服務就是有漏洞的。

我們在meterpreter shell命令提示符下輸入shell命令進入目標機cmd下,然後使用下列wmi查詢命令來列舉受害者機器上所有的沒有加引號的服務路徑(除去了windows本身的服務)。如圖2所示。

wmic service get name,displayname,pathname,startmode |findstr /i "Auto" |findstr /i /v "C:Windows" |findstr /i /v """

圖2查詢路徑

可以看到,有「Vulnerable Service」、「OmniServ」、「OmniServer」、「OmniServers」四個服務對應的二進位文件路徑沒有引號包含起來,並且路徑中包含空格。是存在該漏洞的,但在上傳可執行文件進去之前,我們需要確定我們對目標文件夾是否有寫入的許可權。

2.檢查對有漏洞目錄是否有寫入的許可權,這個很關鍵。這裡我們使用Windows內建的一個工具,icacls,下面我們用這個工具依次來檢查

「C:Program Files」「C:Program FilesCommon Files」「C:Program FilesCommon Filesmicrosoft shared」

等目錄的許可權,都提示許可權不夠。如圖3所示。

圖3 查看目錄許可權

很幸運,直到我們嘗試到最後一個

「C:Program FilesProgram Folder」

文件夾時成功了,看到Everyone(OI)(CI)(F)沒有。如圖4所示。

圖4 查看目錄許可權

「Everyone」用戶對這個文件有完全控制權,就是說所有用戶都具有全部許可權修改這個文件夾。

參數說明:「M」表示修改,「F」代表完全控制,「CI」代表從屬容器將繼承訪問控制項,「OI」代表從屬文件將繼承訪問控制項。這意味著對該目錄有讀,寫,刪除其下的文件,刪除該目錄下的子目錄的許可權。

3.我們確認了目標主機存在此漏洞後,將便開始正式攻擊,Metasploit中相對應的是Windows Service Trusted Path Privilege Escalation本地利用模塊,該模塊會將惡意的可執行程序放到受影響的文件夾中去,然後將受影響的服務重啟。接著我們輸入命令background,把當前的meterpreter shell轉為後台執行。然後在Metasploit中搜索trusted_service_path模塊。如圖5所示。

圖5搜索相應EXPLOIT

4.使用該exploit程序,並設置相關參數,如圖6所示。

圖6設置相關參數

5.攻擊。輸入run命令,可以看到自動反彈了一個新的meterpreter,我們在此meterpreter shell下輸入getuid 發現是system 許可權,如圖7所示。證明我們已經提權成功了。

圖7提權成功

我們輸入sessions可以看到有2個meterpreter,ID為3的就是新反彈回來的,如圖8所示。

圖8查看sessions

我們瀏覽源代碼發現,這個模塊使用了一些正則表達式來過濾掉那些路徑用引號包含起來的路徑,以及路徑中不含空格的路徑,並創建一個受影響的服務的路徑列表。接著該模塊嘗試利用列表中第一個受影響的服務,將惡意的可執行程序放到相應受影響的文件夾中去。接著受影響的服務被重啟,最後,該模塊會刪除該惡意可執行文件。

6.解決方案:當開發者沒有將文件路徑用引號包含起來的時候,才會發生這種行為。用引號包含起來的路徑解析的時候則不存在這種行為。

「系統服務錯誤許可權配置漏洞」簡介

Windows系統服務文件在操作系統啟動時會載入執行,並且在後台調用可執行文件。比如,JAVA升級程序,每次重啟系統時,JAVA升級程序會檢測Oracle網站,是否有新版JAVA程序。而類似JAVA程序之類的系統服務程序載入時往往都是運行在系統許可權上的。所以如果一個低許可權的用戶對於此類系統服務調用的可執行文件具有可寫的許可權,那麼就可以將其替換成我們的惡意可執行文件,從而隨著系統啟動服務而獲得系統許可權。

PowerUp之」系統服務錯誤許可權配置漏洞」的實戰利用

這裡我們主要利用一個非常實用的Powershell框架-Powerup通過直接替換可執行文件本身來實現許可權的提升。首先檢測目標主機是否存在該漏洞。Powerup可以幫助我們尋找伺服器錯誤的系統配置和漏洞從而實現提權的目的。下載地址:

https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerUp

我們先將工具下載到本地,然後上傳至目標伺服器。見圖9所示。

圖9 上傳工具

上傳好腳本後,輸入shell命令進入CMD提示符下,然後可以使用下列命令在本地隱藏許可權繞過執行該腳本,會自動進行所有的腳本檢查。見圖10所示。

powershell.exe -exec bypass -Command "& {Import-Module .PowerUp.ps1; Invoke-AllChecks}"

圖10 查找有漏洞服務

也可以使用IEX下載在內存中載入此腳本,執行如下命令,同樣會自動進行所有的檢查,如圖11所示。

powershell -nop -exec bypass -c 「IEX (New-Object Net.WebClient).DownloadString(c:/PowerUp.ps1);Invoke-AllChecks」

知識點:

-NoProfile(-NoP):PowerShell控制台不載入當前用戶的配置

-Exec Bypass:繞過執行安全策略

Import-Module:載入腳本

圖11 查找有漏洞服務

可以看出,Powerup列出了可能存在問題的所有服務,並在AbuseFunction中直接給出了利用方式。第一部分通過Get-ServiceUnquoted模塊檢測出了有「Vulnerable Service」、「OmniServ」、「OmniServer」、「OmniServers」四個服務,路徑包含空格且不帶引號,但是都沒有許可權,所以並不能被我們利用來提權。第二部分通過Get-ServiceFilePermission模塊檢測出當前用戶可以在「OmniServers」服務的目錄寫入相關聯的可執行文件,並且通過這些文件來進行提權。

這裡我們還是可以使用icacls來驗證下PowerUp腳本檢測是否正確,我們先來測試

「C:Program FilesExecutable.exe」、「C:Program FilesCommon Filesmicrosoft sharedOmniServ.exe」、「C:Program FilesCommon FilesA SubfolderOmniServer.exe」

這三個文件夾,均提示許可權不夠。如圖12所示。

圖12 查看目錄許可權

再測試

「C:Program FilesProgram FolderA SubfolderOmniServers.exe」

文件,如圖13所示。

圖13 查看目錄許可權

可以看到我們對OmniServers.exe文件是有完全控制權的,這裡我們可以直接將OmniServers.exe替換成我們的MSF反彈木馬,當服務重啟時,就會給我們返回一個system許可權的meterpreter。

在這裡我們使用圖11里AbuseFunction那裡已經給出的具體操作方式,執行如下命令操作,如圖14所示。

powershell -nop -exec bypass IEX (New-Object Net.WebClient).DownloadString(c:/PowerUp.ps1);Install-ServiceBinary -ServiceName OmniServers-UserName shuteer -Password Password123!

知識點:

Install-ServiceBinary模塊,通過Write-ServiceBinary寫一個C#的服務用來添加用戶。

圖14添加用戶

接下來停止並再啟動該服務的時候,就會添加我們的用戶,如圖15所示。

圖15 停止啟動服務

可以看到,提示拒絕訪問,那是因為我們當前的許可權是一個受限的USER許可權,所以只能等待系統重啟。這裡因為是虛擬機機,所以直接使用如下命令強制重啟,如圖16所示。

Shutdown –r –f –t 0

圖16 強制重啟

我們切換到目標機界面可以看到已經關機重啟了,如圖17所示。

圖17關機

重啟以後,系統會自動創建了一個新的用戶shuteer,密碼是Password123!。如圖18所示。

圖18 查看用戶

我們來查看下該用戶許可權,該用戶已經是系統管理員。如圖19所示。

圖19 查看許可權

提權成功以後,我們到目標機

C:Program FilesProgram FolderA Subfolder

目錄下面可以看到多了一個文件,如圖20所示。

圖20 查看文件夾

所以我們需要清除入侵的痕迹,把所有的狀態恢復到最初的狀態,可以使用如下命令恢復。

powershell -nop -exec bypass IEX (New-Object Net.WebClient).DownloadString(c:/PowerUp.ps1);Restore-ServiceBinary -ServiceNameOmniServers

恢復

『C:Program FilesProgram FolderA SubfolderOmniServers.exe.bak』為』C:Program FilesProgram FolderA SubfolderOmniServers.exe』

移除備份二進位文件

『C:Program FilesProgram FolderA SubfolderOmniServers.exe.bak』

TheEnd.

本文為我團隊 shuteer原創稿件,授權雜術館發布,未經許可禁止轉載

喜歡我們就請長按下面的圖片關注我們吧。

aHR0cDovL3dlaXhpbi5xcS5jb20vci9tRG5YenhuRUdFUm5yVjJzOTJ5Sw== (二維碼自動識別)


推薦閱讀:

(總結我的學習之路-新手科普篇)
[漏洞復現] CVE-2017-7494 隱藏7年之久的Linux版"永恆之藍"出現了...
[漏洞復現] CVE-2010-2883 Adobe Reader 打開pdf電腦即刻中招
php菜刀的研究一

TAG:滲透測試 | 白帽黑客WhiteHat | 網站滲透 |