msfvenom 简介
信很多人升级最新的msf后找不到自己曾经熟悉的msfpayload了(所以说喜欢收集shellcode是一件好事),没错我特么的也找不到了。其实可以use到自己要使用的payload,然后制作。但是也有人喜欢直接在终端里生产自己的shellcode。另外我想也找不到msfencode了,msfencode是shellcode的编码器,准确的来讲如果你自己编写一个shellcode并不怎么需要一个编码器,杀软杀掉的概率不大,即使是msf生成的shellcode也很大概率不被杀掉(也许我没用啥杀软)所以以前我也觉得编码器并不一定用得到。
我经常理论的思考问题,而不会实际的搞破坏,所以直到后来我才直到编码器的重要,因为msf生成的shellcode经常是无法使用的!!需要编码器进行处理,这个处理包括加壳,过滤坏字符,迭代编译,甚至是控制字符串大小。当然编码器也有其他的功能。
先说说payload和encode的关系,不然我想有些人会感到困惑,msf中payload模块是用来制作shellcode,也即是大家理解的用来搞破坏的机器码,对于没有汇编基础的人,几乎很难写出一个实用的shellcode,以前我也无奈,感觉被拒绝在安全大门之外了,好在有msfpayload,成全了一颗爱捣蛋的心。当然我也在一直学习着呢!我相信非常多的人甚至都不知道shellcode在栈中是怎么工作的,但是却已经可以利用shellcode搞破坏了。我希望不要这样。我不喜欢这种容易获得又有巨大危险性的技术掌握在一个不能自控的人手里。比如前一阵子的Hacking team泄露事件中的flash0day,直接装一个msf产生的shellcode就可以使用了,而根本不需要对漏洞原理或者shellcode原理懂太多。
有点说多了,encode 是编码器,也是为payload设计的,因为杀软会根据shellcode的特征进行杀毒,因此我们需要encode给payload加壳,这里的理论知识和软件免杀原理相同,不过现在杀软有沙箱功能了,在内存阶段从行为判定进行查杀,所以有些shellcode 可能用编码器怎么编码也完蛋了,当然我胡乱吹的,因为我没有尝试过,有那时间我还不如去做饭。
总的来说msfvenom 结合了payload 和encode的功能。经过这两个模块生成的shellcode,要装在的exp中来使用才行,就像弹头安装在×××上。下面说说具体的使用方式
中文翻译大概是这样(我从网上找的):
Options:
-p, --payload <payload> 指定需要使用的payload(***荷载)。如果需要使用自定义的payload,请使用'-'或者stdin指定
-l, --list [module_type] 列出指定模块的所有可用资源. 模块类型包括: payloads, encoders, nops, all
-n, --nopsled <length> 为payload预先指定一个NOP滑动长度
-f, --format <format> 指定输出格式 (使用 --help-formats 来获取msf支持的输出格式列表)
-e, --encoder [encoder] 指定需要使用的encoder(编码器)
-a, --arch <architecture> 指定payload的目标架构
--platform <platform> 指定payload的目标平台
-s, --space <length> 设定有效***荷载的最大长度
-b, --bad-chars <list> 设定规避字符集,比如: '\x00\xff'
-i, --iterations <count> 指定payload的编码次数
-c, --add-code <path> 指定一个附加的win32 shellcode文件
-x, --template <path> 指定一个自定义的可执行文件作为模板
-k, --keep 保护模板程序的动作,注入的payload作为一个新的进程运行
--payload-options 列举payload的标准选项
-o, --out <path> 保存payload
-v, --var-name <name> 指定一个自定义的变量,以确定输出格式
--shellest 最小化生成payload
-h, --help 查看帮助选项
--help-formats 查看msf支持的输出格式列表
让我先列一个和Linux有关的payload表
Ok,随便找一个Linux下的payoad用吧,一个最简单的 shellcode的生成至少需要2个选项 -p -f
这里我指定了上面截图中显示的payload模块,可以看到有一些警告,因为没有指定cpu架构也没指定编码器,至于这个shellcode能否用就拜托各位自己验证了,我就为了讲解方便,不过文章结束我会给一个简单的装载shellcode的装载器,evil0x.com的其他文章有更多的装载器,各位可以自行查看。还有部分人疑惑,我是怎么知道红框里的选项的,不好意思其实我也不知道,我只是use进去然后show options 看了下= =!其实我鼓励去看下源码,ruby是一门很简单的语言的。
下面来看一个win下面的shellcode生成案例,我想win下面才是大家更想要的吧,选择了一个比较简单而且经典的,就是执行exec命令的shellcode,这里我还是打开计算器
注意看我的红框,这里描述了必要的选项,以及默认值
EXITFUNC指定进程完成的时候是退出线程还是进程或者其他选项,如果做注入的时候一定要指定线程,不然你的shellcode运行完就会退的。-o选项相比都容易理解,输出到一个位置,毕竟是exe文件,终端输出谁看得懂,在win下双击执行就是打开计算器了,不过被我的杀软杀掉了,从隔离区恢复就可以验证了。
那么怎么构造一个可以免杀的shellcode呢,当然需要编码器了,我使用了一个异或算法的编码器,-i迭代8次,结果就是呵呵没过AV赢家360,也许是因为我编码器没用好,也许是360的内存查杀技术导致这个简单的shellcode过不去。╮(╯▽╰)╭,怎么过呢,原理是是用杀软没见过的编码器,如果杀软支持内存查杀,恩就只能换shellcode了我用这个老shellcode过不了也正常。所以收集好的shellcode很重要,不过我一个没有,欢迎分享给我。
-b选项是用来过滤“坏字符”的,不同的漏洞根据需要要过滤不同的坏字符,需要对汇编有足够的理解才能说好这部分,目前我还无法以一个好的方式说出来,不过最长过滤的就是0x00,因为字符串遇到它就截断了
这句命令不一定是有效的,我只是说明这个用法。如果我想知道哪些是不能用的坏字符呢,一般看高人的exp描述,或者自己的shellcode无法运行的时候使用OD去debug,看到底是哪里导致的,然后针对性修改设置选项。
-x应该是一个常用的命令,这个命令是用来做程序注入的,是不是叫寄生会好点,就是把你的shellcode程序寄生在另一个程序上,然后目标人打开另外一个程序即可执行shellcode
生成的文件没能在WIN7下运行,XP下可以,说明目前免费版的msf有些功能win7不适用了,回头OD看下为什么不能直接运行,不过使用方式就是如此,还可以加上-e进行编码
给大家看下XP下的结果,当然win7我没有注入成功不过可以OD看下为什么(就是需要不少时间),不知道收费版win7下能否成功注入,怀疑中。。。
-k 选项会将你的payload作为一个新的进程运行。但目前这个选项只支持老版本的windows系统比如windows xp。
-b 设定有效载荷的长度,这个要看EXP,如果没有大小要求救不要设置
MSF图形化工具是WEB工具,不知道新版是不是了,因为从来没用过收费版。另外还有一个GUUI工具armitage,CobaltStrike是armitage 的收费版,armitage 是图形化的msf使用工具,不过功能不全,收费版想来个人也不会购买,因此只能使用命令行了。
这里我想说的其实自动生成的shellcode很多时候并不能用,经常需要我们手动修改一些字符,最后请大家努力收集好的shellcode吧,并给我用吧卡卡。。。。
下面给大家一个简单的shellcode装载器,也就是说把shellcode放在里面就是可以使用的,网上随便找了一个,evil0x.com有文章写了几个,有兴趣可以查看