PHP后门怎么删除_异常进程占用高是否因后门作祟查法【汇总】

2次阅读

php后门通常不长期驻留进程,而是通过Web请求动态执行,高CPU/内存的PHP进程不等于正在运行后门;需结合进程树、打开文件、环境变量等定位真实入口及后门文件位置。

PHP后门怎么删除_异常进程占用高是否因后门作祟查法【汇总】

确认异常进程是否由PHP后门触发

PHP后门通常不长期驻留进程,而是通过Web请求动态执行(比如被上传的shell.php),所以「高CPU/内存的PHP进程」不等于「正在运行后门」——更可能是被恶意脚本反复调用、或后门启用了持久化手段(如写入cron、fork子进程、或利用pcntl_fork逃逸)。先别急着杀进程,得看它从哪来。

实操建议:

  • ps aux --forest | grep php 查进程树,重点看父进程是不是apache2php-fpmnginx——如果是,说明是Web服务器正常派生的,问题大概率出在被请求的PHP文件上
  • lsof -p [pid] | grep -E '.php|.log|/tmp|/dev/shm' 看该进程打开了哪些文件,尤其留意非常规路径下的.php或匿名临时文件(如/tmp/phpXXXXXX
  • 对可疑进程执行 cat /proc/[pid]/environ | tr '' 'n' | grep -E '(http_|REQUEST_|QUERY_STRING)',能还原出原始HTTP上下文,常暴露被调用的恶意URL路径

定位PHP后门文件的4个关键位置

后门不总在网站根目录。攻击者会藏进日志、缓存、甚至合法cms插件里。别只扫wwwroot,优先查这些地方:

  • /var/log/apache2/access.log/var/log/nginx/access.log:用 awk '{print $7}' access.log | sort | uniq -c | sort -nr | head -20 找高频访问的陌生.php路径(如/wp-includes/js/tinymce/plugins/compat3x/css.php
  • /tmp/dev/shm:PHP后门常通过file_put_contents('/tmp/xxx.php', base64_decode(...))落地,用 find /tmp -name "*.php" -mmin -60 查1小时内新建的PHP文件
  • php-fpm.conf 中的 php_admin_value[open_basedir] 设置范围外的目录(如/home/*/public_html下未被限制的子站)
  • wordPress等CMS的wp-content/plugins/wp-content/themes/里,检查最近修改时间异常的.php文件,特别是名字像index_old.phpcache.phpupdate.php这种

删后门不能只删文件:必须同步清理3类残留

删掉一个shell.php就以为安全了?大概率白干。后门往往已建立多层控制链:

立即学习PHP免费学习笔记(深入)”;

  • Web层后门可能只是入口,真正的C2通信藏在curl_execfile_get_contents调用中,检查error_log里是否有大量Failed to open stream: Connection refused指向境外IP
  • 检查crontab -l/etc/cron.d/ 下是否有伪装成系统任务的PHP调用,例如:* * * * * /usr/bin/php /tmp/.cache/run.php
  • mysql里可能存有WebShell配置,连库执行:select * FROM information_schema.columns WHERE column_name LIKE '%pass%' OR column_name LIKE '%key%';,再查对应表内容——有些后门把密钥写进wp_optionstheme_mods_*字段

验证是否还有隐蔽PHP后门的2个硬核方法

静态扫描容易漏,得靠运行时行为捕获。两个低成本但有效的办法:

  • 临时启用PHP的auto_prepend_file,在php.ini里加一行:auto_prepend_file = "/path/to/log_calls.php",然后在log_calls.php里写:file_put_contents('/tmp/php_calls.log', date('Y-m-d H:i:s') . " " . $_SERVER['SCRIPT_FILENAME'] . "n", FILE_appEND);。重启PHP服务后跑几小时,再查/tmp/php_calls.log里有没有非预期路径
  • strace盯住一个疑似正常的PHP-CGI进程:strace -p [pid] -e trace=openat,connect,sendto 2>&1 | grep -E '.php|.so|:[0-9]{4,}',直接看到它打开了什么文件、连了哪些IP、发了什么数据

后门清理最麻烦的不是找文件,而是它可能已改写PHP扩展、替换libphp.so、或在opcache里缓存了恶意opcode——如果反复出现同类行为,别犹豫,重装PHP并关闭allow_url_includeenable_dl

text=ZqhQzanResources