Webshell命令执行失败实战场景下解决思路
字数 899 2025-08-29 22:41:01
Webshell命令执行失败实战场景下解决思路
0x01 前言
在红队渗透测试过程中,经常会遇到成功上传webshell后却无法执行命令的情况。本文系统性地总结了webshell命令执行失败的常见原因及解决方法,帮助渗透测试人员绕过限制成功执行命令。
0x02 命令执行失败常见场景
以哥斯拉工具为例,典型报错表现为无法fork进程调用cmd执行命令。可能原因包括:
- webshell本身的问题
- 杀毒软件的拦截
0x03 解决方案
1. 使用编程语言内置命令函数执行命令
以PHP webshell为例,首先检查phpinfo中的disable_functions选项,查看哪些命令执行函数被禁用。
示例代码测试未被禁用的函数:
<?php
$test1=exec('whoami');
echo $test1;
$test2=system('ipconfig');
echo $test2;
$test3=passthru('whoami');
echo $test3;
$test4=shell_exec('net user');
echo $test4;
常用PHP命令执行函数:
- exec()
- system()
- passthru()
- shell_exec()
2. 上传cmd或使用替代程序执行命令
(1) 上传自定义cmd.exe
- 上传本地cmd.exe绕过杀软对system32下cmd.exe的拦截
- 可以自行编写调用cmd的API
(2) 使用系统自带工具直接执行
- 直接调用system32下的工具:
- netstat.exe
- whoami.exe
- tasklist.exe
- 直接运行C2 loader,跳过命令执行阶段
(3) cmd.exe的替代程序
- forfiles.exe
- mshta.exe
- msxsl.exe
- 其他可执行命令的系统工具
3. 使用免杀大马绕过杀软进程链检测
典型进程链问题:
php-cgi.exe (或IIS下的w3wp.exe) → webshell的cmd.exe → cmd.exe → systeminfo
解决方案:
- 使用免杀大马代替webshell连接工具:
- 消除webshell工具特征
- 缩短进程链(直接大马执行命令,减少一层cmd.exe)
- 直接利用大马上线C2
- 可从GitHub获取开源大马项目或使用AI生成
0x04 总结
webshell命令执行失败主要涉及三个方面:
- webshell工具本身:尝试不同执行函数或使用大马
- 杀软进程链检测:缩短进程链或使用替代程序
- cmd工具限制:上传自定义cmd或使用系统替代工具
通过组合使用这些方法,可以有效解决webshell命令执行失败的问题。