为什么源码木马难发现
网站源码木马通常是一段伪装成正常功能的代码,比如藏在functions.php、upload.php或压缩包里的eval、assert调用。它不破坏页面显示,只等待外部指令,因此单看前台很难察觉。检测的核心思路是:找出“不该存在”的文件、代码和请求。
文件层面的比对与排查
与官方版本比对
下载同版本程序官方包,用diff -r或Beyond Compare对比目录差异。重点关注:
- 新增的
.php文件,尤其是名称随机、体积很小的文件; - 被修改的核心文件,如
index.php、config.php; - 时间戳异常的文件,比如深夜批量修改。
搜索高危函数
在源码目录执行:
grep -rnE “eval\(|assert\(|base64decode\(|gzinflate\(|strrot13\(|preg_replace./e” –include=”.php” .
eval和assert常被用来执行混淆后的payload,base64_decode配合eval是典型一句话木马结构。但也要注意,部分正常框架也会用到这些函数,需结合上下文判断。
代码特征与混淆识别
木马作者常用混淆隐藏意图,常见特征包括:
- 超长单行代码,变量名类似
$a1、$b2; - 字符串被拆分成多个片段再拼接;
- 使用
$POST、$GET、$_COOKIE接收参数后直接进入执行函数; - 注释中出现乱码或与功能无关的标记。
如果一段代码只做“解码+执行”,且参数来自外部输入,基本可以判定为后门。
日志与行为分析
Web访问日志
查找可疑请求:
- 单次POST请求体异常大;
- 访问不存在的路径却返回200;
- 同一IP频繁请求特定文件名,如
shell.php、1.php。
文件完整性监控
用inotifywait或OSSEC监控网站目录,一旦有文件被创建或修改就告警。这能抓住木马上传的瞬间,比事后排查更有效。
清除与加固建议
确认木马后,先隔离样本再删除,避免直接rm导致线索丢失。随后:
- 更新程序与插件到最新版;
- 修改数据库、后台和FTP密码;
- 关闭不必要的文件写入权限;
- 在WAF或Nginx层拦截
eval类参数。
源码木马检测不是一次性任务,定期比对、监控写入、审计日志,才能把风险压在早期。

