我们在用Metasploit进行渗透测试时经常遇到这样的情况,成功执行了Payload,但获取不到Metasploit会话,一般常见情况有:1、直接获取不到会话;2、获取到会话后自动断开;3、获取到会话但是卡住不动了;。这篇文章就来给大家讲一下获取不到会话的一些常见原因,已经知道了问题所在,至于要怎么解决就看大家自己的了(该绕的绕,该免杀的免杀)!

(1) 快速判断Metasploit会话完整性

如果直接通过浏览器访问监听IP:Port,或者是在获取会话的过程中按Ctrl+C键强制结束掉了,这时我们获取到的会话可能都是不完整的,即使成功得到了Metasploit会话,进去之后会发现很多命令都是执行不了的,这时可以通过session命令来快速判断我们得到的Metasploit会话完整性,如果“Information”列中为空白则是不完整,反之则完整,如图8-10-1。
图片1.png
图8-10-1 查看Metasploit会话完整性

(2) Payload与目标系统架构不一样

这里说的系统架构不一样是因为我们生成的Payload是x64,而目标系统为x86,执行过程中会出现“不是有效的Win32应用程序”报错,所以无法获取到会话,这种情况一般出现在XP/2003,不过x86的Payload可以在x64系统上运行,不会存在兼容性的问题,如图8-10-2。
图片2.png
图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。
图片3.png
图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。
图片4.png
图8-10-4 执行Payload被系统防火墙拦截

(5) VPS配置系统防火墙出入站规则

记一次与朋友@Sin在他的Centos VPS上做测试时发现获取不到Metasploit会话,不过有一些特定端口能出网(21、22、80、8888),经过排查后发现问题是出在“宝塔防火墙”,其实调用的就是Centos自带的防火墙,在宝塔安装过程中会自动进行配置,默认规则如图8-10-5、8-10-6。
Image 4.png
图8-10-5 查看系统防火墙的放行端口
Image 6.png
图8-10-6 宝塔防火墙默认放行端口规则

解决方案:
在宝塔控制面板中没有找到关闭防火墙的相关设置选项,只能设置我们需要放行的端口,不过我们可以使用以下命令关闭Centos自带防火墙或使用规则中的放行端口进行监听即可成功获取到Metasploit会话,也可通过/etc/firewalld/zones/public.xml文件查看防火墙规则。

  1. 1、查看防火墙状态:
  2. firewall-cmd --state
  3. systemctl status firewalld.service
  4. 2、开启防火墙:
  5. systemctl start firewalld.service
  6. 3、临时关闭防火墙:
  7. systemctl stop firewalld.service
  8. 4、永久关闭防火墙:
  9. systemctl disable firewalld.service
  10. 5、查看所有放行端口:
  11. firewall-cmd --list-port

注:如果使用国内阿里、腾讯、百度、华为、京东等VPS搭建的MSF进行监听时可能会被厂商的流量监控设备拦截,可以尝试使用reverse_https并配置证书来绕过流量检测。

(6) VPS存在多个公网IP的监听问题

记一次朋友的华为云VPS,连接SSH用的140...162:62004,在已关闭防火墙的状态下Metasploit监听任何端口都获取不到会话,使用Telnet测试多个端口后发现只有62004能连,其他都不行。

  1. telnet 140.***.***.162 62004 //ok
  2. telnet 140.***.***.162 60123 //no
  3. [...SNIP...]

后来他才说还有另一个IP:116..*.159,再次使用Telnet连接MSF监听端口时发现已经OK了,但不能用这个IP去连接SSH。这台华为云VPS有两个公网IP,一个用于连接SSH,一个用于对外通信。

  1. telnet 116.**.***.159 62004 //no
  2. telnet 116.**.***.159 60123 //ok
  3. [...SNIP...]

(7) 反病毒软件特征查杀或流量检测

上传、执行Payload时可能会被反病毒软件的特征、行为、内存、流量检测到并查杀,笔者本地测试发现当我们把火绒“黑客入侵拦截”或赛门铁克“Enable Network intrusion prevention”开启后再执行Payload时就会出现发送stage到目标,但无法建立一个完整的会话回来,关闭后就能立即获取到目标会话,关于免杀和绕过不在本节讨论范围内,如图8-10-7、8-10-8。

  • 特征查杀:上传的Payload以及各种恶意PE文件直接会被拦截并查杀(360杀毒)
  • 流量检测:成功执行Payload并发送stage到目标,但一直卡着不动(ESET NOD32)

图片5.png
图8-10-7 被火绒的特征流量检测并拦截
图片6.png
图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无法获取会话。

图片7.png
图8-10-9 IIS启用32位应用程序选项
图片8.png
图8-10-10 Aspx Payload无法获取会话


public.png