被黑后第一件事是断网并取证,而非删文件;需立即拔外网线或关闭云平台80/443/8888端口,用干净机器SSH连接,备份login.log和request.log日志。

宝塔面板后台被黑后,第一件事不是删文件,是断网+取证
别急着删 /www/server/panel 下的所谓“可疑文件”,攻击者很可能已植入持久化后门(比如修改 panel.sh、替换 class/panelPlugin.py 或在 /etc/rc.d/rc.local 加启动项)。直接清理会丢失攻击痕迹,还可能误删合法插件配置。
立刻执行:
– 拔掉服务器外网网线,或在云平台关闭安全组入方向 80/443/8888 端口
– 用另一台干净机器 SSH 连入(勿复用被黑终端)
– 备份当前面板日志:cp /www/server/panel/logs/login.log /tmp/login.log.bak、cp /www/server/panel/logs/request.log /tmp/request.log.bak
常见错误现象:
• 登录后自动跳转到广告页或恶意域名
• 面板首页显示异常 JS 脚本(检查 /www/server/panel/BTPanel/templates/default/index.html 是否被注入 <script src="...</code">)<br>
• 新建网站时自动添加恶意 <code>index.php</script> 或 .htaccess 重写规则
怎么快速定位被篡改的面板核心文件
宝塔 7.x/8.x 的关键逻辑集中在 Python 文件和前端模板里,重点查三类路径:
-
/www/server/panel/class/:尤其关注panelPlugin.py、panelSite.py、panelDatabase.py—— 攻击者常在这里加远程命令执行(RCE)钩子 -
/www/server/panel/data/:检查plugin.json和user.json是否含非法 URL 或 base64 编码的 payload -
/www/server/panel/BTPanel/static/js/:查找被注入的admin.js或伪造的login.js,内容通常包含eval(atob(...))或动态加载外部 script
实操建议:
• 用 find /www/server/panel -name "*.py" -mtime -30 | xargs ls -la 找近期修改的 Python 文件
• 对比官方 GitHub 仓库同版本代码(如 https://github.com/bt-cn/btpanel/tree/v8.0.5/class),别信“看起来像”的文件
• 用 grep -r "document.write\|eval(atob\|http://" /www/server/panel/BTPanel/ 快速扫前端注入
重装面板前必须手动清理的隐藏后门点
只卸载重装面板(curl http://download.bt.cn/install/bt-uninstall.sh|bash)无法清除系统级后门。以下位置常被忽略:
-
/root/.bash_history和/root/.bashrc:检查末尾是否追加了wget或curl下载恶意脚本的命令 -
/etc/cron.d/和/var/spool/cron/root:找非常规时间执行的python /tmp/*.py或sh /dev/shm/*.sh -
/usr/bin/下伪装成系统命令的二进制(如lsat、psaux):用md5sum /usr/bin/ls /usr/bin/ps对比正常系统哈希值 -
/proc/[0-9]*/environ:运行中进程若加载了恶意 so(如LD_PRELOAD=/tmp/libhook.so),需用cat /proc/$(pgrep python)/environ | tr '\0' '\n'检查
性能影响提示:某些内存马会 hook socket.connect(),导致面板内“网站监控”或“SSL 申请”功能莫名超时,但系统 netstat 看不到异常连接 —— 这是典型的用户态劫持,必须查 LD_PRELOAD。
加固不是加密码,是砍掉所有非必要入口
面板默认开放 8888 端口 + 弱口令 + root 权限运行,等于把钥匙挂在门把手上。加固本质是缩小攻击面:
- 把面板端口从
8888改成高位随机端口(如32767),并仅允许公司 IP 访问(云平台安全组 +iptables -A INPUT -p tcp --dport 32767 -s YOUR_IP -j ACCEPT) - 禁用面板内置的 FTP 和数据库远程访问功能(
设置 → 安全 → 关闭 MySQL 远程连接),Web 服务本身不依赖这些 - 把面板运行用户从
root改为独立低权用户(如btuser),需手动修改/www/server/panel/init.sh中的USER="root"并重置权限:chown -R btuser:btuser /www/server/panel - 定期用
bt 16(宝塔命令行)检查面板完整性:bt 16→ 选“检查文件完整性”,它会校验核心 py 文件的 md5,比人工更可靠
容易被忽略的复杂点:攻击者可能已通过面板漏洞上传 webshell 到某个网站根目录(如 /www/wwwroot/example.com/2024.php),即使面板重装,这个 shell 仍能反向连接控制服务器。清理完面板后,务必用 find /www/wwwroot -name "*.php" -type f -exec grep -l "system\|eval\|base64_decode" {} \; 扫一遍所有站点。

















