phpmyadmin后门最常藏于libraries/setup.lib.php、export.php、import.php及.htaccess等非显眼文件中,尤其需筛查体积小于1kb的.php/.lib.php文件和.user.ini等隐藏文件,并用grep检测eval|assert|base64_decode等动态执行函数及其可控参数调用链。
phpmyadmin目录里哪些文件最可疑
后门不总在setup.php或index.php这种显眼位置,反而爱藏在“看起来合理但没人动”的角落。比如:libraries/setup.lib.php被篡改后可绕过登录直接加载恶意配置;export.php或import.php若被注入eval()调用,就能执行任意命令;还有.htaccess里偷偷加的php_value auto_prepend_file指向外部脚本——这种根本不算phpmyadmin原生文件,但危害更大。
实操建议:
- 重点检查
/usr/share/phpmyadmin/(Debian/Ubuntu)或/var/www/html/phpmyadmin/(CentOS)下所有.php、.inc.php、.lib.php文件,尤其libraries/和scripts/子目录 - 用
find /path/to/phpmyadmin -name "*.php" -size -1k -ls筛出体积小于1KB的PHP文件——一句话后门常只有200–500字节 - 别漏掉隐藏文件:
ls -la /path/to/phpmyadmin | grep "^\.",特别留意.user.ini或.php.swp这类临时文件
怎么确认一个PHP文件是不是后门
光看文件名没用,db_sql.php.bak或tbl_replace.php.new都可能是伪装。关键得看内容是否含动态执行逻辑,且参数可控。
实操建议:
- 用
grep -n "eval\|assert\|system\|shell_exec\|base64_decode\|gzinflate" /path/to/file.php快速定位高危函数——如果出现在$_GET、$_POST或$_REQUEST之后,基本坐实 - 检查是否有非标准解码链:
base64_decode($_POST['x'])→gzinflate(...)→eval(...)是经典三件套,哪怕中间夹着str_rot13或urldecode也逃不过 - 运行
php -l /path/to/file.php验证语法——有些后门故意写错if括号或用/* */包裹<?php来躲静态扫描,但PHP仍能执行 - 打开文件后搜
$_COOKIE、$_SESSION、session_start()附近有没有异常赋值,比如$_SESSION['auth'] = true;硬编码绕过登录
phpMyAdmin配置层是否被劫持
后门不一定写在文件里。攻击者可能通过php.ini的auto_prepend_file、数据库里的config.inc.php内容、甚至session.save_path指向恶意目录,让每次请求都自动加载恶意代码。
实操建议:
- 查
php --ini定位配置文件,再grep -i "auto_prepend\|auto_append\|disable_functions" /etc/php/*/apache2/php.ini——如果disable_functions被清空或删了exec,说明早被控制 - 运行
phpinfo()页面,搜索session.save_path,确认路径是否为/tmp或/var/lib/php/sessions这类可写目录;再ls -l看该目录属主是不是www-data,权限是不是777 - 进phpMyAdmin后台,点“设置”→“导出”,看生成的
config.inc.php里有没有$cfg['Servers'][$i]['host'] = 'attacker.com'这类异常配置 - 检查MySQL中
mysql.user表,确认有没有新增的root@%或''@localhost这种空用户名账户
删之前必须冻结运行时环境
直接rm -f一个疑似后门的setup.php,可能触发它预埋的反制逻辑:清空日志、重写.htaccess、甚至删库。得先让它“动不了”,再动手。
实操建议:
- 立刻禁用Web用户shell:
sudo usermod -s /usr/sbin/nologin www-data(Apache)或www-data(Nginx) - 临时锁死PHP危险函数:
sed -i 's/^disable_functions.*/disable_functions = exec,passthru,shell_exec,system,proc_open,popen,pcntl_exec/' /etc/php/*/fpm/php.ini,然后sudo systemctl restart php*-fpm - 对可疑文件只做
chmod 000而非删除,比如chmod 000 /usr/share/phpmyadmin/scripts/setup.php——既阻断访问,又保留现场供分析 - 备份当前全部配置:
tar -czf pma-conf-backup-$(date +%s).tar.gz /etc/php/ /usr/share/phpmyadmin/config.inc.php /var/lib/php/sessions/
真正麻烦的不是找到那个shell.php,而是它背后是否连着数据库定时任务、cron脚本、或已被写入auto_prepend_file的绝对路径——这些不挖干净,删一百次文件也没用。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











