PHP 怎么应急响应

wen PHP项目 1

本文目录导读:

PHP 怎么应急响应

  1. 第一阶段:隔离与断网
  2. 第二阶段:进程与系统排查
  3. 第三阶段:PHP代码漏洞排查
  4. 第四阶段:日志分析
  5. 第五阶段:数据库排查
  6. 第六阶段:清理与加固
  7. 总结优先级

PHP应急响应是指在PHP应用程序遭受攻击(如黑客入侵、webshell上传、勒索病毒等)后,为了阻止进一步损害、查找攻击源头、恢复系统安全而采取的一系列紧急措施。

以下是针对PHP环境的应急响应标准流程(黄金6小时内完成):

第一阶段:隔离与断网

  1. 切断网络:如果确认是高危攻击(如勒索病毒、内网横向渗透),立即拔掉网线或关闭网卡,防止数据扩散。
  2. 冻结证据:不要关闭服务器电源(因为内存数据可能丢失),如果可能,先拷贝内存镜像的dump,然后冷备份硬盘。
  3. 挂载只读:在分析阶段,将网站根目录(如 /var/www/html)和日志目录挂载为只读,防止恶意行为覆盖证据。

第二阶段:进程与系统排查

这是找出“攻击者现在在干什么”的关键步骤,需要在系统层面(非PHP层面)排查:

  1. 查看网络连接

    netstat -antlp  # 或 ss -antlp

    关注点:有没有非SSH(22)、非80/443的异常外联端口?攻击者通常会利用PHP反弹shell或下载后门,建立与C2服务器的连接。

  2. 查看运行进程

    ps auxf  # 或 top -c

    关注点:是否有名字是乱码、/tmp目录下的进程?是否有 wgetcurl 下载行为?CPU占用过高的PHP进程(可能在做挖矿或爆破)。

  3. 查看计划任务

    crontab -l
    cat /etc/crontab
    ls -la /etc/cron.d/
    ls -la /var/spool/cron/

    重点:这是持久化后门最喜欢的地方,经常有基于 curl 下载执行脚本的任务。

  4. 查看自启动项

    chkconfig --list  # 或 systemctl list-unit-files | grep enabled
    ls -la /etc/rc.d/rc.local
  5. 查看登录记录

    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-AgentContent-Type
  • 代码执行漏洞:搜索 preg_replace 中的 /e 修饰符(PHP5.5已废弃,但老代码可能遗留)。
  • 反序列化漏洞:查看是否有 unserialize($_...) 直接使用了用户输入。
  • SQL注入:检查是否存在拼接SQL语句且未加引号的情况(这通常会导致数据库被拖库,进而配合日志写入Webshell)。
  • 架构问题:Nginx/Apache配置错误(Fast-CGI 关闭导致的解析漏洞,如 php.jpg 被解析为PHP)。

第四阶段:日志分析

日志是还原攻击路径的最佳证据。

  1. 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比较明显(如 sqlmapnmappython-requests)。
  2. PHP错误日志

    find /var/log -name "php*error*"
    tail -f /var/log/php-fpm.log

    注意:PHP错误日志经常会泄露攻击者的攻击路径和参数。

  3. 筛选异常IP

    # 统计访问次数最多的IP(可能是CC攻击)
    awk '{print $1}' access.log | sort | uniq -c | sort -rn | head -n 20

第五阶段:数据库排查

如果涉及SQL注入,数据库可能已沦陷。

  1. 查新增管理员:检查用户表,是否有新增加的高等级权限账号。
  2. 查日志表:检查是否被写入大量垃圾数据。
  3. 检查UDF提权SELECT * FROM mysql.func; 查看是否有自定义的 sys_exec 等UDF函数(用于执行系统命令)。
  4. 利用备份恢复:如果数据库篡改严重,使用最近的冷备份进行恢复,但注意备份文件本身也可能被挂马。

第六阶段:清理与加固

  1. 删除恶意文件:删除所有确认的Webshell和恶意脚本。
  2. 修改密码:强制修改数据库密码(非root用户建议使用强密码),修改FTP、SSH、cPanel等所有管理端密码。
  3. 修复漏洞
    • 修补文件上传逻辑。
    • 安装安全补丁(升级PHP版本至安全版,如8.1+)。
    • 禁用危险函数:在 php.inidisable_functions 中加入 exec, system, shell_exec, passthru, proc_open 等(但注意如Composer等工具需要)。
  4. 部署WAF:安装云锁、安全狗、ModSecurity等Web应用防火墙,匹配规则拦截恶意Payload。
  5. 修改目录权限:最低权限原则,PHP文件只读(444),上传目录禁用PHP执行权限(通过Nginx location ~ \.php$ 排除 /uploads)。

总结优先级

  1. 先拔网线(杀进程、隔离)。
  2. 看进程和netstat(确认攻击者当前行为)。
  3. 看最近24小时新建的文件(找Webshell)。
  4. 看访问日志(找漏洞点)。
  5. 打补丁+清理

特别提醒:如果找不到Webshell但网站依然异常,请检查 .htaccessnginx.conf 文件,攻击者可能把恶意代码注入了配置文件(如 auto_prepend_file 配置指向远程URL)。

抱歉,评论功能暂时关闭!