我们在用Metasploit进行渗透测试时经常遇到这样的情况,成功执行了Payload,但获取不到Metasploit会话,一般常见情况有:1、直接获取不到会话;2、获取到会话后自动断开;3、获取到会话但是卡住不动了;。这篇文章就来给大家讲一下获取不到会话的一些常见原因,已经知道了问题所在,至于要怎么解决就看大家自己的了(该绕的绕,该免杀的免杀)!
(1) 快速判断Metasploit会话完整性
如果直接通过浏览器访问监听IP:Port,或者是在获取会话的过程中按Ctrl+C键强制结束掉了,这时我们获取到的会话可能都是不完整的,即使成功得到了Metasploit会话,进去之后会发现很多命令都是执行不了的,这时可以通过session命令来快速判断我们得到的Metasploit会话完整性,如果“Information”列中为空白则是不完整,反之则完整,如图8-10-1。
图8-10-1 查看Metasploit会话完整性
(2) Payload与目标系统架构不一样
这里说的系统架构不一样是因为我们生成的Payload是x64,而目标系统为x86,执行过程中会出现“不是有效的Win32应用程序”报错,所以无法获取到会话,这种情况一般出现在XP/2003,不过x86的Payload可以在x64系统上运行,不会存在兼容性的问题,如图8-10-2。
图8-10-2 不是有效的Win32应用程序
(3) Payload与监听模块设置不一样
我们生成的Msf Payload是x86的,但是在handler监听模块里设置的Payload为x64时就会出现这种会话自动断开的情况。不过在这种情况下如果Payload是可执行的,我们只需要将handler监听模块里设置的Payload改为对应的x86即可解决,重点注意:1、目标系统架构;2、Msfvenom生成Payload;3、handler监听模块Payload;,如图8-10-3。
图8-10-3 获取Metasploit会话自动断开
(4) 目标配置系统防火墙出入站规则
有时会遇到这样的情况,即使我们生成的Msf Payload、handler监听模块Payload和目标系统架构都是相对应的,但在执行Payload时仍然获取不到会话,这可能是因为目标已开启Windows自带防火墙并设置了出入站规则,也有可能是被其它流量监测类的安全设备所拦截,可以通过netstat -ano命令来查看我们执行的Payload与目标机器建立的网络连接状态是否为SYN_SENT,SYN_SENT的几种常见情况:1、MSF里没有监听;2、Windows系统防火墙;3、其它的安全设备;,如图8-10-4。
图8-10-4 执行Payload被系统防火墙拦截
(5) VPS配置系统防火墙出入站规则
记一次与朋友@Sin在他的Centos VPS上做测试时发现获取不到Metasploit会话,不过有一些特定端口能出网(21、22、80、8888),经过排查后发现问题是出在“宝塔防火墙”,其实调用的就是Centos自带的防火墙,在宝塔安装过程中会自动进行配置,默认规则如图8-10-5、8-10-6。
图8-10-5 查看系统防火墙的放行端口
图8-10-6 宝塔防火墙默认放行端口规则
解决方案:
在宝塔控制面板中没有找到关闭防火墙的相关设置选项,只能设置我们需要放行的端口,不过我们可以使用以下命令关闭Centos自带防火墙或使用规则中的放行端口进行监听即可成功获取到Metasploit会话,也可通过/etc/firewalld/zones/public.xml文件查看防火墙规则。
1、查看防火墙状态:
firewall-cmd --state
systemctl status firewalld.service
2、开启防火墙:
systemctl start firewalld.service
3、临时关闭防火墙:
systemctl stop firewalld.service
4、永久关闭防火墙:
systemctl disable firewalld.service
5、查看所有放行端口:
firewall-cmd --list-port
注:如果使用国内阿里、腾讯、百度、华为、京东等VPS搭建的MSF进行监听时可能会被厂商的流量监控设备拦截,可以尝试使用reverse_https并配置证书来绕过流量检测。
(6) VPS存在多个公网IP的监听问题
记一次朋友的华为云VPS,连接SSH用的140...162:62004,在已关闭防火墙的状态下Metasploit监听任何端口都获取不到会话,使用Telnet测试多个端口后发现只有62004能连,其他都不行。
telnet 140.***.***.162 62004 //ok
telnet 140.***.***.162 60123 //no
[...SNIP...]
后来他才说还有另一个IP:116..*.159,再次使用Telnet连接MSF监听端口时发现已经OK了,但不能用这个IP去连接SSH。这台华为云VPS有两个公网IP,一个用于连接SSH,一个用于对外通信。
telnet 116.**.***.159 62004 //no
telnet 116.**.***.159 60123 //ok
[...SNIP...]
(7) 反病毒软件特征查杀或流量检测
上传、执行Payload时可能会被反病毒软件的特征、行为、内存、流量检测到并查杀,笔者本地测试发现当我们把火绒“黑客入侵拦截”或赛门铁克“Enable Network intrusion prevention”开启后再执行Payload时就会出现发送stage到目标,但无法建立一个完整的会话回来,关闭后就能立即获取到目标会话,关于免杀和绕过不在本节讨论范围内,如图8-10-7、8-10-8。
- 特征查杀:上传的Payload以及各种恶意PE文件直接会被拦截并查杀(360杀毒)
- 流量检测:成功执行Payload并发送stage到目标,但一直卡着不动(ESET NOD32)
图8-10-7 被火绒的特征流量检测并拦截
图8-10-8 被赛门铁克的流量检测并拦截
(8) IIS应用程序池-启用32位应用程序
在以往的渗透中肯定有遇到过访问Metasploit的Aspx Payload秒解析,但是没能获取会话的情况,这可能是因为目标机器的IIS应用程序池中设置了“启用32位应用程序”选项为True或False了,可以尝试换到x86/x64的Payload再试试看,如图8-10-9、8-10-10。
- 当“启用32位应用程序”选项为True时Aspx Payload 32可以获取会话,64无法获取会话。
- 当“启用32位应用程序”选项为False时Aspx Payload 64可以获取会话,32无法获取会话。
图8-10-9 IIS启用32位应用程序选项
图8-10-10 Aspx Payload无法获取会话