Metasploit許可權提升全劇終

FLy_鵬程萬里發表於2018-07-06

0×01 引言

通常,我們在滲透過程中很有可能只獲得了一個系統的Guest或User許可權。低的許可權級別將會使我們受到很多的限制,所以必須將訪問許可權從Guset提升到User,再到Administrator,最後到SYSTEM級別。
滲透的最終目的是獲取伺服器的最高許可權,即Windows作業系統中管理員賬號的許可權,或LINUX作業系統中root賬戶許可權。

提升許可權的方式分為兩類。

縱向提權:低許可權角色獲得高許可權角色的許可權。比如,一個webshell許可權通過提權之後擁有了管理員的許可權,那麼這種提權就是縱向提權。

橫向提權:獲取同級別角色的許可權。比如,通過已經攻破的系統A獲取了系統B的許可權,那麼這種提權就屬於橫向提權。
所以在成功獲取目標機meterpreter shell後,我們要知道現在已經擁有了什麼許可權。

1、在meterpreter shell下輸入命令shell進入目標機CMD命令列


2、輸入whoami /groups 命令


3、可以看到這個表是Mandatory Label\Medium MandatoryLevel,說明我們是一個標準使用者,需要將使用者許可權從標準使用者提升到管理員許可權,也就是Mandatory Label\High MandatoryLevel。
提權大體有以下幾種方法:

使用getsystem提升許可權
利用本地漏洞
假冒令牌
繞過Windows賬戶控制(UAC)
HASH

0×02 getsystem

利用meterpreter中的getsystem命令,該命令自動尋找各種可能的適應技術,以便將使用者許可權提升到更高階別。我們輸入getsystem –h 來看下它使用的3種技術,如下圖。

預設值0會嘗試所有列出技術來嘗試提權,直至成功。提權方式採用命令管道模擬提升的方法和令牌複製的方法。輸入getsystem命令即完成操作。具體效果見下圖。


該命令使用方便,並且簡單高效,在滲透測試中會頻繁使用到,建議所有提權過程中先行嘗試此方法。

0×03利用本地漏洞

本地漏洞提權,即使用本地漏洞的利用程式(loca>exploit)提升許可權。就是說通過執行一些現成的造成溢位漏洞的exploit,把使用者從users組或其它系統使用者中提升到administrators組(或root)。

溢位漏洞就像杯子裡裝水,水多了杯子裝不進去,就會把裡面的水溢位來。而相對計算機來說計算機有個地方叫快取區,程式的快取區長度是被事先設定好的,如果使用者輸入的資料超過了這個快取區的長度,那麼這個程式就會溢位了。

1、利用getuid命令檢視已經獲得的許可權,可以看到現在的許可權很低,是個user許可權。嘗試利用getsystem提權,失敗。見下圖:


2.輸入命令shell進入目標機CMD命令列,再利用systeminfo命令或者通過查詢 c:\windows\ 裡留下的補丁號.log來看看目標機大概打了哪些補丁。

可以看到目標機基本上沒有打任何補丁,我們可以嘗試利用Windows下已有的漏洞提權,如ms13_053,ms14_058,ms16_016,ms16_032等等。

相關漏洞的具體資訊分析和共享可以參考下面2個網站:

安全焦點,其BugTraq是一個出色的漏洞和exploit資料來源,可以通過CVE編號,或者產品資訊漏洞直接搜尋。網址:http://www.securityfocus.com/bid。
Exploit-DB,取代了老牌安全網站milw0rm。不斷更新大量的Exploit程式和報告,它的搜尋功能可以搜尋整個網站內容。網址:http://www.exploit-db.com。

*附上收集的部分系統對應補丁號 Win2003 Win2008
Win2012

KB2360937|MS10-084
KB2478960|MS11-014
KB2507938|MS11-056
KB2566454|MS11-062
KB2646524|MS12-003
KB2645640|MS12-009
KB2641653|MS12-018
KB944653|MS07-067
KB952004|MS09-012 PR
KB971657|MS09-041
KB2620712|MS11-097
KB2393802|MS11-011
KB942831|MS08-005
KB2503665|MS11-046
KB2592799|MS11-080
KB956572|MS09-012烤肉
KB2621440|MS12-020
KB977165|MS10-015Ms Viru
KB3139914|MS16-032
KB3124280|MS16-016
KB3134228|MS16-014
KB3079904|MS15-097
KB3077657|MS15-077
KB3045171|MS15-051
KB3000061|MS14-058
KB2829361|MS13-046
KB2850851|MS13-053EPATHOBJ 0day 限32位
KB2707511|MS12-042 sysret -pid
KB2124261|KB2271195 MS10-065 IIS7
KB970483|MS09-020IIS6
KB3139914|MS16-032
KB3124280|MS16-016
KB3134228|MS16-014
KB3079904|MS15-097
KB3077657|MS15-077
KB3045171|MS15-051
KB3000061|MS14-058
KB2829361|MS13-046
KB2850851|MS13-053EPATHOBJ 0day 限32位
KB2707511|MS12-042 sysret -pid
KB2124261|KB2271195 MS10-065 IIS7
KB970483|MS09-020IIS6
KB3139914|MS16-032
KB3124280|MS16-016
KB3134228|MS16-014
KB3079904|MS15-097
KB3077657|MS15-077
KB3045171|MS15-051
KB3000061|MS14-058
KB2829361|MS13-046
KB2850851|MS13-053EPATHOBJ 0day 限32位
KB2707511|MS12-042 sysret -pid
KB2124261|KB2271195 MS10-065 IIS7
KB970483|MS09-020IIS6

3、接著我們輸入命令background,就是把你當前的metasploit shell轉為後臺執行


4.然後搜尋Metasploit中是否有相應的exploit程式,下面以ms16_016(該模組在windows 32位和64位下都有效)為例。


5.通過這個exploit進行提權,具體命令如下圖:


我們可以看到成功利用了notepad漏洞,啟動了一個PID為708的程式。接著輸入PS命令檢視目標機程式,找到PID 708這個程式,並且利用migrate命令遷移到該程式中。最後執行getsystem,再次檢視許可權,看到沒有,已經是系統許可權了。


0×04假冒令牌

令牌是系統臨時金鑰,它允許你在不提供密碼或其他憑證的前提下,訪問網路和系統資源。這些令牌將持續存在於系統中,除非系統重新啟動。我們輸入use incognito命令,然後輸入list_tokens –u,列出可用token,見下圖:


我們可以看到有二種型別的令牌,一種是Delegation Tokens,也就是授權令牌,它支援互動式登入(比如可以通過遠端桌面登陸訪問)。還有一種是Impersonation Tokens,也就是模擬令牌,它是非互動的會話。可看到令牌的數量,取決於我們meterpreter shell的訪問級別。我們可以看到已經獲得一個系統管理員的授權令牌,現在我們就是要假冒這個令牌,成功後我們就可以擁有它的許可權。接下來我們在incognito中呼叫impersonate_token命令,具體命令見下圖

執行成功,我們在meterpreter shell下執行shell命令並輸入whoami,可以看到我現在就是我們假冒的那個win-57tj4b561mt\administrator系統管理員了。

0×05 繞過Windows使用者賬戶控制(UAC)

在Windows Vista 以及更高的版本中,微軟引進了安全控制策略,分為高、中、低三個等級。高等級的程式具有管理員許可權,中等級程式擁有一個基本使用者的許可權,低階別的程式的許可權是受各種限制的,用來保證當系統受到威脅時,帶來的損害能保持到最小。
UAC有4種設定要求:

始終通知:這是最嚴格的設定,任何時候,當有程式要使用高階別許可權時,都會提示本地使用者。
僅在程式試圖更改我的計算機時通知我:這是UAC的預設設定。本地Windows程式要使用高階別許可權時,不通知使用者。但當第三方程式要求使用高階別許可權時,它會提示本地使用者。
僅在程式試圖更改我的計算機時通知我(不降低桌面的亮度):與上一條設定要求相同,但提示使用者時不降低桌面的亮度。
從不提示:當使用者為系統管理員時,所有程式都會以最高許可權執行。
一.使用Bypassuac提權

Bypassuac主要有以下4個模組


1、我們先看下現在已經獲得的許可權?該許可權能否直接通過getsystem來直接提權?

可以看到是shuteer使用者許可權,通過getsystem提權提示許可權不夠,拒絕訪問。

2.下面利用bypassuac模組來提權,這裡使用exploit/windows/local/bypassuac模組(該模組在windows 32位和64位下都有效),本模組執行成功後將會返回一個新的meterpreter shell,設定如下圖:


已經攻擊成功,返回了一個session 5的meterpreter shell,此時我們通過sessions 命令可以看到已經有了2個meterpreter shell。


3.執行getuid檢視許可權,如果發現還是普通許可權,不要失望,繼續執行getsystem,再次檢視許可權,已經成功繞過UAC,且已經是系統許可權了。


其他幾個模組用法和上面一樣,原理有所不同,執行成功後都會返回一個新的meterpreter shell,且都需要執行getsystem才能獲取系統許可權。

使用bypassuac模組時一些注意事項:

使用bypassuac模組進行提權時,系統當前使用者必須在管理員組,而且使用者賬戶控制程式UAC設定為預設,即“僅在程式試圖更改我的計算機時通知我”。
Bypassuac模組執行時會在目標機上建立多個檔案,會被防毒軟體識別。exploit/windows/local/bypassuac_injection模組直接執行在記憶體中的反射DLL中,所以它不觸碰硬碟,可以最大限度地降低被防毒軟體檢測到的概率。
Metasploit框架攻擊目前沒有針對Windows 8的模組

二.使用RunAs提權
這種方法可以利用exploit/windows/local/ask模組(該模組在windows 32位和64位下都有效),建立一個可執行檔案,目標機會執行一個發起提升許可權請求的程式,提示使用者是否要繼續執行,如果使用者選擇“是”,就會觸發返回一個高許可權的meterpreter shell。設定如下圖:


輸入run命令後會在目標機上會彈出UAC,提示使用者是否執行


選擇“是”就會成功返回一個新的meterpreter shell。


同樣執行getuid檢視許可權,發現是普通許可權時,繼續執行getsystem,再次檢視許可權,已經是系統許可權了。


使用RunAs模組時一些注意事項:

使用RunAs模組進行提權時,系統當前使用者須在管理員組或者知道管理員的密碼,使用者賬戶控制程式UAC設定則沒有要求。
使用RunAs模組進行提權時,會建立一個可執行檔案,為了避免給防毒軟體查殺,該可執行檔案(需進行免殺處理)的建立要使用EXE::Custom選項。
RunAs攻擊的缺點是,程式企圖修改計算機設定時,系統會對使用者發出提醒。此警報可能會被管理人員認定為攻擊。建議多次執行,系統多次對使用者發出提醒後,對於缺乏安全意識或不厭其煩的管理人員會點選“是”,從而完成許可權提升。

0×06 HASH攻擊

1.使用hashdump命令
Hashdump meterpreter指令碼可以從目標機器中提取hash值,破解hash值即可獲得登陸密碼。計算機中的每個賬號(如果是域伺服器,則為域內的每個賬號)的使用者名稱和密碼都儲存在SAM檔案中,當計算機執行時,該檔案對所有賬號進行鎖定,要想訪問就必須要有“系統級”賬號。所以要使用該命令就必須要進行許可權的提升。
在meterpreter shell提示符下輸入hashdump命令,將匯出目標機SAM資料庫中HASH,見下圖:

抓取到的HASH可以使用暴力破解或者使用彩虹列表進行破解,個人建議可以直接到http://www.cmd5.com/或者http://www.xmd5.com/進行破解。
還有一個命令smart_hashdump,可以匯出域所有使用者的HASH。

2.WindowsCredentials Editor (WCE)或者MIMIKATZ
Windows Credentials Editor (WCE)是一款功能強大的windows平臺內網滲透工具,它可以列舉登陸會話,並且可以新增、改變和刪除相關憑據(例如:LM/NT hashes)。這些功能在內網滲透中能夠被利用,例如,在windows平臺上執行繞過hash或者從記憶體中獲取NT/LM hashes(也可以從互動式登陸、服務、遠端桌面連線中獲取)以用於進一步的攻擊,而且體積也非常小,是內網滲透手必備工具。
先使用upload命令將wce.exe上傳到目標主機C盤中,然後在目標機shell下輸入 wce –w命令,便會成功提取到系統明文管理員密碼。如下圖。


MIMIKATZ的使用比較簡單,就不演示了!
這2個工具必須要在管理員許可權下使用,還要注意工具的免殺。

相關文章