Meterpreter执行不了shell原因

前言

我们在进入Meterpreter会话后经常会遇到执行不了shell命令的情况,报出各种不一样的错误提示,执行不了shell命令的原因有很多,如常见的:1、cmd.exe文件被降权或删除;2、PHP Payload不支持shell命令;3、安装有WAF或反病毒软件等,笔者这里也只是记录了以前在实战和本地测试中遇到的几个例子,在实际渗透测试过程中还得根据自身经验去分析判断其原因!

(1) Payload没有正确执行

这应该是一些新手朋友刚学MSF时经常犯的一个错误,没有正确执行我们生成的Msf Payload,而是直接在浏览器URL中访问了监听的IP和端口http://192.168.1.120:443,如图8-11-1。

图8-11-1 直接访问监听IP:Port

(2) PHP Payload命令限制

Windows环境下通过php/meterpreter/reverse_tcp或php/meterpreter_reverse_tcp获取的会话很多命令和脚本都是执行不了的,如常用的ps、kill、shell、hashdump、mimikatz等,不过portfwd和execute可以执行,大家可以自己去测试一下!
不能执行shell命令的原因可能是与目标的Web中间件IIS/Apache/Nginx或权限IUSR/Admin/System等有关,笔者当前的测试环境如下:
  • IIS7.5 PHP5.3.0(IUSR),如图8-11-2。

  • Apache2.4.23 PHP5.4.45(SYSTEM),如图8-11-3。

图8-11-2 IIS7.5 PHP5.3.0(IUSR)
图8-11-3 Apache PHP5.4.45(SYSTEM)

(3) cmd.exe被降权或删除

当cmd.exe文件被降权时在中国菜刀虚拟终端执行命令时就会提示“[Err] 拒绝访问”,这时我们虽然可以将Msf Payload上传至可读/写目录中来执行,但是在获取的Meterpreter会话中执行shell命令时会仍然会提示“Access is denied”拒绝访问,如图8-11-4、8-11-5。
图8-11-4 中国菜刀执行Msf Payload
图8-11-5 目标的cmd.exe文件被降权
XP/2003中将cmd.exe文件删除后在Meterpreter会话执行shell命令时也会出现报错,但是能够进入Cmdshell执行命令,它会自己在C:\Windows\System32\目录下生成一个cmd.exe,如图8-11-6。
图8-11-6 目标的cmd.exe文件被删除

(4) WAF软件拦截命令执行

通过白名单方式绕过WAF获取Meteroreter会话后执行shell时仍然会提示“Access is denied”拒绝访问,因为D盾、云锁、安全狗、护卫神等防护软件会对执行命令的行为进行拦截,如图8-11-7、8-11-8、8-11-9。
但可尝试使用 ps、service_manager等命令来查看目标机器上是否存在WAF相关进程和服务,这里笔者只测试了D盾、网站安全狗和服务器安全狗,
图8-11-7 D盾-IIS防火墙命令执行防护
图8-11-8 服务器安全狗进程行为控制

图8-11-9 网站安全狗禁止IIS执行程序


(0)

相关推荐