phpMyAdmin后门主要藏于libraries/setup.lib.php、export.php、import.php、.htaccess、.user.ini等非显眼位置,常通过auto_prepend_file或session机制全局加载,需重点筛查小于1KB的.php/.lib.php文件并用grep检测eval|assert|base64_decode等动态执行函数及其可控参数调用链。

phpMyAdmin 里的后门文件不能靠删 setup.php 或重装解决,它大概率藏在 libraries/ 子目录、.htaccess 或隐藏配置里,且常通过 auto_prepend_file 或 session 机制全局加载——不查清加载链,删完还会复活。
重点检查哪些路径和文件类型
后门不爱放显眼位置,专挑“看着合理但没人细看”的地方落脚:
-
libraries/setup.lib.php:被篡改后可在登录前就执行任意代码,绕过所有认证逻辑 -
export.php和import.php:攻击者常注入eval($_POST['x']),把导出/导入功能变成命令执行入口 -
.htaccess(尤其子目录下):搜php_value auto_prepend_file,这种配置能让每个 PHP 请求都自动包含恶意脚本,根本不用改任何 .php 文件 -
.user.ini和.php.swp:用ls -la才能看见,.user.ini可覆盖 php.ini 设置,.php.swp是 vim 未正常退出留下的临时文件,常被用来藏混淆后门 - 体积小于 1KB 的
*.lib.php或*.inc.php:用find /usr/share/phpmyadmin -name "*.lib.php" -size -1k -ls快速筛出,一句话后门通常只有 200–500 字节
怎么确认一个 PHP 文件是不是后门
光看文件名或大小没用,db_sql.php.bak 和 tbl_replace.php.new 都可能是伪装。关键得看内容是否含动态执行逻辑,且参数可控:
- 用
grep -n "eval\|assert\|system\|shell_exec\|base64_decode\|gzinflate" libraries/setup.lib.php定位高危函数;如果出现在$_GET、$_POST或$_REQUEST后面,基本坐实 - 注意解码链:比如
base64_decode($_POST['a'])→gzinflate()→eval()是经典三件套,中间夹个str_rot13或urldecode也不影响判断 - 运行
php -l libraries/setup.lib.php检查语法——有些后门故意写错括号或用/* */包裹<?php来躲扫描,但 PHP 解释器仍能执行 - 打开文件后搜
$_SESSION、session_start()附近有没有硬编码赋值,例如$_SESSION['auth'] = true;,这是绕过登录的典型手法
别只盯着 PHP 文件,配置层可能已被劫持
后门不一定写在代码里,可能通过服务器或 PHP 运行时配置悄悄加载:
立即学习“PHP免费学习笔记(深入)”;
- 查 PHP 加载的配置:运行
php --ini找到主配置文件,再用grep -i "auto_prepend\|disable_functions" /etc/php/*/apache2/php.ini;如果disable_functions被清空或删了exec,说明早就失守 - 检查
session.save_path:在 phpinfo() 页面或用ini_get('session.save_path')查,如果指向/tmp或自定义目录,且该目录可写,攻击者可能把恶意 session 写进去 - 确认数据库配置是否被改:打开
config.inc.php,检查$cfg['Servers'][$i]['host']和$cfg['Servers'][$i]['auth_type']是否异常;有些后门会把认证方式改成config并硬编码账号密码 - 别漏掉 Web 服务器层:Apache 用户查所有
.htaccess里有没有RewriteRule指向可疑 PHP;Nginx 用户检查fastcgi_param SCRIPT_FILENAME是否被篡改,或有location ~ \.php$ { ... }块被注入额外指令
最易被忽略的是 auto_prepend_file、session.save_path 和 crontab 里的 PHP 调用——这些地方不清理,删光所有 .php 文件也没用。排查时务必从请求入口(Web 服务器)→ 运行时配置(php.ini / .user.ini)→ 代码层(PHP 文件)逐层向下验证,而不是反过来。



















