PHP后门怎么删除_如何批量扫描站点排除潜在威胁【汇总】

3次阅读

php后门需多维度检测:静态扫描(yara规则)、运行时行为(strace)、数据库/配置项、系统痕迹;单纯删文件或关键词搜索易漏检。

PHP后门怎么删除_如何批量扫描站点排除潜在威胁【汇总】

PHP后门不能靠“删文件”就完事——它可能藏在正常文件里、伪装成图片、嵌在日志或缓存中,甚至通过数据库触发。单纯找 evalsystembase64_decode 这类关键词会漏掉大量变形后门(比如用 str_rot13 绕过、拆分字符串拼接、或利用 preg_replace/e 修饰符)。

识别可疑 PHP 文件:别只盯 webroot

后门常不在显眼路径,而藏在上传目录、备份压缩包、旧版本 CMS 插件、甚至被忽略的 .git.svn 目录里。

  • 先检查所有可写目录:find /var/www -type d -perm -2 -o -perm -20 | grep -E "(upload|cache|tmp|backup)"
  • 扫描隐藏文件和压缩包:find /var/www -name ".*" -o -name "*.zip" -o -name "*.tar*" -o -name "*.7z",解压后递归查 PHP 内容
  • 重点盯这些文件名:shell.php1.phpwp-cache.phplicense.txt(有些后门故意放 txt 后缀但内容是 PHP)
  • 注意图片文件:用 file image.jpg 看真实类型,再用 strings image.jpg | grep -i "php|eval|assert" 提取可读文本

静态扫描要绕过混淆:用 yara + 自定义规则

正则匹配容易失效,yara 规则能处理多层编码、变量重命名、函数别名等场景。官方 PHP 后门规则集(如 FLARE-YARA)覆盖常见变种,但需配合自定义逻辑。

  • 安装 yara:apt install yaradebian/ubuntu)或 brew install yaramacos
  • 下载基础规则:git clone https://github.com/InQuest/yara-rules,启用 php-webshell.yarobfuscation.yar
  • 关键自定义点:加一条匹配“字符串拼接后执行”的规则,例如:$a = "as"; $b = "sert"; $c = $a.$b; $c($_POST['x']); → yara 中用正则 /$[a-z_]+s*=s*["']as["'].*$[a-z_]+s*=s*["']sert["'].*$w+.$w+s*;s*$w+s*($_/s
  • 扫描命令:yara -r -f -C ./yara-rules/php/ /var/www-C 显示匹配上下文)

运行时行为检测:用 strace 捕获异常系统调用

很多后门不改文件但会调用 execproc_openshell_exec,strace 能抓到真实动作,比静态分析更准。

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

  • 定位疑似进程:先用 ps aux | grep php-fpm | grep -v "master|pool" 找 worker 进程 PID
  • 挂载 strace:strace -p <pid> -e trace=execve,openat,connect -s 256 -o /tmp/trace.log 2>&1</pid>
  • 触发可疑请求(比如访问某个上传的 PHP 文件),观察日志中是否出现:execve("/bin/sh", ["sh", "-c", "..."] 或连接外网 IP 的 connect(3, {sa_family=AF_INET, sin_port=htons(443), sin_addr=inet_addr("185.199.108.153")}, 16)
  • 注意:strace 开销大,仅用于短时排查;生产环境建议用 eBPF 工具(如 bcc 的 execsnoop)替代

数据库和配置项也是后门温床

wordpresswp_options 表、Discuzcommon_setting、甚至 nginxfastcgi_param 都可能被注入恶意代码,这类后门不落地文件,重启服务即复活。

  • 查 WordPress 主题/插件选项:select option_name, option_value FROM wp_options WHERE option_value LIKE "%eval%" OR option_value LIKE "%base64_decode%";
  • 检查 Nginx 配置中是否滥用 fastcgi_param SCRIPT_FILENAME,比如硬编码为 /var/www/html/shell.php
  • 导出数据库全文搜索:mysqldump --skip-extended-insert your_db | grep -E "(eval|assert|system|passthru)s*("
  • CMS 缓存目录(如 Drupal 的 public://php/twig)也要扫:Twig 模板编译后可能含恶意 PHP 字节码

最麻烦的不是找到后门,而是确认它有没有被用于横向移动——比如是否新建了管理员账号、是否修改了 cron、是否在 /etc/passwd 里加了新用户。清理完 PHP 文件,务必检查系统层痕迹。

text=ZqhQzanResources