本文目录导读:

PHP应急响应是指在PHP应用程序遭受攻击(如黑客入侵、webshell上传、勒索病毒等)后,为了阻止进一步损害、查找攻击源头、恢复系统安全而采取的一系列紧急措施。
以下是针对PHP环境的应急响应标准流程(黄金6小时内完成):
第一阶段:隔离与断网
- 切断网络:如果确认是高危攻击(如勒索病毒、内网横向渗透),立即拔掉网线或关闭网卡,防止数据扩散。
- 冻结证据:不要关闭服务器电源(因为内存数据可能丢失),如果可能,先拷贝内存镜像的dump,然后冷备份硬盘。
- 挂载只读:在分析阶段,将网站根目录(如
/var/www/html)和日志目录挂载为只读,防止恶意行为覆盖证据。
第二阶段:进程与系统排查
这是找出“攻击者现在在干什么”的关键步骤,需要在系统层面(非PHP层面)排查:
-
查看网络连接:
netstat -antlp # 或 ss -antlp
关注点:有没有非SSH(22)、非80/443的异常外联端口?攻击者通常会利用PHP反弹shell或下载后门,建立与C2服务器的连接。
-
查看运行进程:
ps auxf # 或 top -c
关注点:是否有名字是乱码、
/tmp目录下的进程?是否有wget、curl下载行为?CPU占用过高的PHP进程(可能在做挖矿或爆破)。 -
查看计划任务:
crontab -l cat /etc/crontab ls -la /etc/cron.d/ ls -la /var/spool/cron/
重点:这是持久化后门最喜欢的地方,经常有基于
curl下载执行脚本的任务。 -
查看自启动项:
chkconfig --list # 或 systemctl list-unit-files | grep enabled ls -la /etc/rc.d/rc.local
-
查看登录记录:
lastlog | grep -v "Never logged in" last cat /var/log/secure | grep "Accepted" # 查看SSH登录成功记录
关注点:有没有来自异常IP的root登录?
第三阶段:PHP代码漏洞排查
这是PHP应急响应的核心,你需要进入代码层面,找出攻击入口。
定位恶意文件(Webshell)
- 使用专业扫描工具:
- 河马(SHELLPUB):国内最常用的Linux下PHP查杀工具(免费)。
- 暗泉(Yasso)、D盾(Windows GUI) 等。
- 命令:
hxm_proc -f /var/www/html(河马扫描指定目录)。
- 手工检索:查找高危险函数特征:
grep -rn "eval(" /var/www/html/ grep -rn "assert(" /var/www/html/ grep -rn "system(" /var/www/html/ grep -rn "base64_decode" /var/www/html/ grep -rn "shell_exec" /var/www/html/ - 时间戳抓查:攻击时间点(如最近24小时)内创建/修改的
.php文件。find /var/www/html -name "*.php" -mtime -1
查找隐藏的“图片马”或恶意上传文件
- 检查上传目录(如
/uploads/),看是否有非图片格式但包含PHP代码的文件。 - 使用
file命令检查文件真实类型:file 1.jpg(如果显示PHP script则危险)。
检查入口漏洞(漏洞是怎么来的?)
- 文件上传漏洞:查看代码中上传逻辑,是否有校验后缀、MIME类型缺失?是否解析了
User-Agent或Content-Type? - 代码执行漏洞:搜索
preg_replace中的/e修饰符(PHP5.5已废弃,但老代码可能遗留)。 - 反序列化漏洞:查看是否有
unserialize($_...)直接使用了用户输入。 - SQL注入:检查是否存在拼接SQL语句且未加引号的情况(这通常会导致数据库被拖库,进而配合日志写入Webshell)。
- 架构问题:Nginx/Apache配置错误(Fast-CGI 关闭导致的解析漏洞,如
php.jpg被解析为PHP)。
第四阶段:日志分析
日志是还原攻击路径的最佳证据。
-
Web访问日志:
# Nginx tail -f /var/log/nginx/access.log # Apache tail -f /var/log/httpd/access_log
分析技巧:
- 搜索异常请求后缀:
grep -E "([^a-z0-9])(php|phtml|php3|php5)([^a-z])" access.log识别伪装图片的PHP马。 - 搜索POST请求:攻击者上传webshell通常使用POST方法,筛选
POST /uploads/1.php的IP。 - 搜索User-Agent:很多自动化扫描工具的UA比较明显(如
sqlmap、nmap、python-requests)。
- 搜索异常请求后缀:
-
PHP错误日志:
find /var/log -name "php*error*" tail -f /var/log/php-fpm.log
注意:PHP错误日志经常会泄露攻击者的攻击路径和参数。
-
筛选异常IP:
# 统计访问次数最多的IP(可能是CC攻击) awk '{print $1}' access.log | sort | uniq -c | sort -rn | head -n 20
第五阶段:数据库排查
如果涉及SQL注入,数据库可能已沦陷。
- 查新增管理员:检查用户表,是否有新增加的高等级权限账号。
- 查日志表:检查是否被写入大量垃圾数据。
- 检查UDF提权:
SELECT * FROM mysql.func;查看是否有自定义的sys_exec等UDF函数(用于执行系统命令)。 - 利用备份恢复:如果数据库篡改严重,使用最近的冷备份进行恢复,但注意备份文件本身也可能被挂马。
第六阶段:清理与加固
- 删除恶意文件:删除所有确认的Webshell和恶意脚本。
- 修改密码:强制修改数据库密码(非root用户建议使用强密码),修改FTP、SSH、cPanel等所有管理端密码。
- 修复漏洞:
- 修补文件上传逻辑。
- 安装安全补丁(升级PHP版本至安全版,如8.1+)。
- 禁用危险函数:在
php.ini的disable_functions中加入exec,system,shell_exec,passthru,proc_open等(但注意如Composer等工具需要)。
- 部署WAF:安装云锁、安全狗、ModSecurity等Web应用防火墙,匹配规则拦截恶意Payload。
- 修改目录权限:最低权限原则,PHP文件只读(
444),上传目录禁用PHP执行权限(通过Nginxlocation ~ \.php$排除 /uploads)。
总结优先级
- 先拔网线(杀进程、隔离)。
- 看进程和netstat(确认攻击者当前行为)。
- 看最近24小时新建的文件(找Webshell)。
- 看访问日志(找漏洞点)。
- 打补丁+清理。
特别提醒:如果找不到Webshell但网站依然异常,请检查 .htaccess 或 nginx.conf 文件,攻击者可能把恶意代码注入了配置文件(如 auto_prepend_file 配置指向远程URL)。