因为phpMyAdmin的setup/目录默认无访问控制,宝塔7.4.2版本在/pma路径下硬链接了含setup的完整实例,且未做认证拦截,导致http://ip:888/pma/setup/可被任意直接访问执行。
为什么访问 /phpmyadmin/setup 会直接执行而无需登录?
因为 phpmyadmin 的 setup/ 目录默认未做访问控制,只要 web 服务器能解析 php,该目录下所有脚本(如 index.php、save.php)就会被直接执行。攻击者通过 http://your-ip/phpmyadmin/setup/ 就能进入配置向导,生成或覆盖 config.inc.php,进而写入恶意配置(如 $cfg['servers'][$i]['host'] = 'evil.com';),甚至触发反序列化链。
宝塔面板中 /pma 路径暴露 setup 的真实风险点
宝塔 7.4.2 版本在 /www/server/phpmyadmin/PMA/ 下硬链接了完整 phpMyAdmin 实例,且未禁用 setup/ 目录 —— 这意味着 http://ip:888/pma/setup/ 可被任意访问。这不是“没关权限”,而是目录本身被有意暴露且无认证拦截。
- 该路径不依赖用户是否登录宝塔,也不校验 session 或 cookie
- 即使你没手动启用 phpMyAdmin,宝塔更新后自动生成的
PMA/目录就已包含可执行的setup/ -
setup/生成的配置文件若未设权限(如 644),可能被后续 LFI 漏洞读取(参考 CVE-2022-44898)
彻底禁用 setup 的三步实操(非简单删目录)
只删 setup/ 文件夹不行:新版 phpMyAdmin 的 index.php 仍会尝试加载 libraries/setup.lib.php,缺失时可能报错或降级行为;更重要的是,宝塔下次升级可能重建该目录。
- 在 Nginx 配置中显式屏蔽:
location ^~ /phpmyadmin/setup/ { return 403; }(宝塔用户编辑/www/server/panel/vhost/nginx/phpmyadmin.conf) - 确认
setup/目录权限为000或属主非 Web 用户:chmod -R 000 /www/server/phpmyadmin/setup - 检查并删除任何软链接指向 setup 的路径,例如宝塔旧版残留的
/www/server/phpmyadmin/PMA/setup -> /usr/share/phpmyadmin/setup
修复后必须验证的两个隐蔽环节
很多人改完配置就认为安全了,但以下两点不验证等于白做:
- 用 curl 测试:
curl -I http://localhost/phpmyadmin/setup/必须返回403 Forbidden,而非200 OK或302 Found - 检查 PHP 错误日志:
tail -f /www/wwwlogs/phpmyadmin.error.log,确认没有Warning: include(setup/lib.php)类报错 —— 这说明仍有代码路径试图加载 setup 组件
setup 目录不是功能入口,而是配置后门;它的存在本身就意味着风险敞口,而不是“不用就没事”。
立即学习“PHP免费学习笔记(深入)”;
文章来自机圈观察员网,发布者:,转载请注明出处:https://www.jqgcy.com/shoujipingce/112581.html