当前位置: 首页 > news >正文

网站日志里面老是出现{pboot:if((\x22file_put_co\x22.\x22ntents\x22)(\x22temp.php\x22.....

这段日志里出现的代码很像一次典型的 PHP 后门(Web‑Shell)注入
下面先拆解一下它的大致含义,再给出 排查、清理、以及防御 的完整步骤,帮助你把站点恢复到安全状态。


1️⃣ 代码拆解(帮你快速定位问题)

{pboot:if((\x22file_put_co\x22.\x22ntents\x22)(\x22temp.php\x22,(\x22base6\x22.\x224_decode\x22) … )}
片段实际意义
\x22十六进制的双引号 ",所以 \x22file_put_co\x22.\x22ntents\x22 实际是 "file_put_co"."ntents",即 file_put_contents
\x22temp.php\x22"temp.php",目标文件名
\x22base6\x22.\x224_decode\x22"base6"."4_decode" → base64_decode
(后面省略)通常会跟一段 base64 编码的恶意 PHP 代码,它被解码后写入 temp.php,从而在服务器上留下后门文件。

示例恶意 URL(解码后)

/index.php?pboot:if(file_put_contents('temp.php',base64_decode('PD9waHA...')));

完整的攻击思路

  1. 利用某个漏洞(模板标签、上传漏洞、SQL 注入等) 触发 pboot:if(可能是 PbootCMS 的模板标签)。

  2. 调用 file_put_contents('temp.php', base64_decode('...')) 把攻击者的 PHP 代码写入网站根目录。

  3. 攻击者随后访问 temp.php 即可执行任意命令、下载数据库、植入更多后门等。


2️⃣ 快速应急处理(先把危害止住)

目标:阻止后门继续运行、恢复网站基本功能、避免数据进一步泄露。

步骤操作说明
① 立刻下线在防火墙或云平台上把站点切换到 Maintenance / 只读 模式,或临时关闭 HTTP/HTTPS 端口。防止攻击者继续利用后门。
② 更改所有凭证- FTP / SFTP / SSH 密码<br>- 数据库(MySQL)账号<br>- 后台管理(CMS)账号使已经泄露的凭证失效。
③ 暂时禁用 PHP在站点根目录(或受影响的子目录)放置 php_flag engine off(Apache)或 disable_functions = exec,shell_exec,system,passthru,proc_open,show_source(php.ini)让已写入的 temp.php 失去执行能力,给排查争取时间。
④ 备份当前文件复制全站(包括隐藏文件)到安全的离线存储,不要直接覆盖到生产环境。供后续法务取证、对比分析。
⑤ 查杀已写入的后门文件- 搜索 temp.php*.php 中出现 base64_decode(eval(assert(preg_replace('/e' 等关键字的文件。<br>- 常用命令(Linux):<br>grep -RIl "base64_decode" .<br>find . -type f -name "*.php" -exec grep -l "eval(" {} +先把已知后门删掉或改名(最好直接删除)。
⑥ 暂停所有自动化脚本如 CI/CD、计划任务(cron)等,防止它们在清理期间把后门重新写回。

注意:在 关闭 PHP 前,请先确保站点仍能提供必要的静态资源(HTML、CSS、JS)。如果站点依赖 PHP 渲染页面,您可以先把站点切换到 维护页面(静态 HTML),以免用户看到错误信息。


3️⃣ 深度排查(找出根因并彻底清理)

3.1 检查入口点

可能的漏洞来源检查要点
模板标签/自定义标签(如 {pboot:if(...}- 搜索所有 .html.htm.tpl.php 中出现 pboot: 的地方。<br>- 确认是否有未过滤的用户输入直接拼接到 eval()include()file_put_contents() 中。
文件上传功能- 检查上传目录是否有执行权限(chmod 755/chmod 700),是否限制文件后缀。<br>- 确认是否对上传的文件做了 MIME 类型文件头 检查。
数据库注入- 搜索所有 INSERT/UPDATE 语句是否使用了预处理(PDO/prepare)或严格过滤。
旧版或未更新的插件/模块- 列出所有第三方插件的版本号,对比官方安全公告。
弱口令 / 默认账号- 检查 adminrootpboot 等常见用户名是否仍在使用默认密码。
服务器配置- 确认 allow_url_fopenallow_url_include 已关闭。<br>- open_basedir 是否限制了 PHP 脚本的访问范围。

3.2 代码审计

  1. 全局搜索(Linux):

    # 关键函数
    grep -RIl "file_put_contents" .
    grep -RIl "base64_decode" .
    grep -RIl "eval(" .
    grep -RIl "preg_replace" .
    grep -RIl "assert(" .
  2. 审计可疑文件
    对每个返回的文件,打开查看是否有 拼接字符串(如 "file_put_"."contents")或 十六进制转义\x22)的写法,这正是攻击者用来规避审计的手法。

  3. 检查日志

    • 访问日志access.log): 查找对 temp.php/upload//admin/ 等路径的异常请求,尤其是 POSTGET 含有 base64eval<?php 等关键字的请求。

    • 错误日志error.log): 看是否有 PHP Warning: file_put_contents(): 的报错,这说明后门写入尝试被阻止或失败。

3.3 对比文件完整性

如果你之前有 文件完整性校验工具(如 md5sumsha1sumtripwireintegrity-checker),可将当前文件与已知安全基线进行比对,快速发现被篡改的文件。

没有基线?
可以从官方发布的源码包(对应相同版本)解压,对比 diff -r 或 rsync --dry-run -c

3.4 数据库检查

有时候攻击者会把恶意代码写进数据库(例如 CMS 内容字段中),并在页面渲染时直接输出。执行以下查询:

SELECT id, title, content
FROM   your_table
WHERE  content LIKE '%base64_decode%' OR content LIKE '%eval(%';

如果发现异常记录,立刻 清理 并 重新生成 正常内容。


4️⃣ 完整清理方案(恢复到安全状态)

步骤操作备注
① 重新部署干净代码- 从官方源码包或 Git 仓库检出 全新 代码。<br>- 用 版本控制系统(Git)对比本地与官方代码,确保没有额外文件。

已经检查了,没发现temp.php文件,有影响么?

1️⃣ 先别慌——没有 temp.php 并不等于“一切安全”

可能的情况说明下一步建议
文件已被删除代码仍在其它位置攻击者往往会把后门写入 多个文件,或把真正的恶意代码埋在已有业务文件里(index.php、config.php、theme‑xxx.php 等)。继续全站搜索关键函数(见下文)。
写入的文件名被改了攻击者常用随机名字(temp123.php、a1b2c3.php、uploads/xxxx.php)来躲避检测。用 通配符或 hash 检索所有可执行 PHP 文件。
后门不是 PHP 文件有时会利用 .phtml、.inc、.txt、.asp、.js等后缀,配合服务器的 AddHandler 配置让它们能被当作 PHP 解释。把 所有文本类文件(*.php, *.phtml, *.inc, *.txt, *.js)都列出来检查。
后门已被 chmod 000 或放在不可访问的目录攻击者可能先写入后门,随后把文件权限调为不可读,等到后面再切换回来。用 find /path -type f -perm -u=x -o -perm -g=x -o -perm -o=x 查找 任何可执行 的文件。
后门通过 .htaccess  web‑server 配置 执行例如 AddHandler application/x-httpd-php .txt,把 .txt 当成 PHP 运行。检查站点根目录、子目录以及服务器配置(.htaccessnginx.confhttpd.conf)。

结论:仅凭“没有 temp.php”不能说明系统已被彻底清理,仍需要一次 全局、细粒度的安全审计


2️⃣ 推荐的 全站扫描清单(一步步执行)

先在维护模式/仅本地访问下 完成,防止误删导致业务中断。

2.1 基础文件定位(Linux 示例)

# ① 只列出所有 php、phtml、inc、txt、js、html(所有可能被当成脚本的后缀)
find /var/www/your_site -type f \( -iname "*.php" -o -iname "*.phtml" -o -iname "*.inc" -o -iname "*.txt" -o -iname "*.js" -o -iname "*.html" \) > /tmp/all_files.txt# ② 过滤出可能的恶意关键字(大小写不敏感)
grep -i -E "base64_decode|eval\(|assert\(|preg_replace\(|shell_exec|system\(|passthru|phpinfo|proc_open|chmod\(|chmod\(|ini_set|php://input|php://filter|php://memory|php://temp|exec\(|popen\(|dl\(|ob_start|ob_get_contents|file_put_contents|fopen\(|fwrite\(|include\(|require\(|require_once|include_once" -f /tmp/all_files.txt > /tmp/suspect_candidates.txt

提示

  • -i:不区分大小写。

  • 正则里用 | 列举常见后门函数。

  • grep -E 支持扩展正则,配合 -f 从文件读取待检查路径,避免一次性把所有文件名直接塞进命令行(可能超出字符长度限制)。

2.2 高阶检测(把“混淆/十六进制/Unicode”也抓出来)

# 十六进制字符(\x??)或 Unicode \u??
grep -i -E "(\\x[0-9a-fA-F]{2})|(\\u[0-9a-fA-F]{4})" -f /tmp/all_files.txt >> /tmp/suspect_candidates.txt# base64 长串(通常 > 30 字符)+ eval/exec 组合
grep -i -E "eval\((base64_decode|gzinflate|str_rot13|strrev|str_replace|preg_replace).{30,}\)" -f /tmp/all_files.txt >> /tmp/suspect_candidates.txt

2.3 进一步细化——对每个嫌疑文件做人工审计

步骤操作检查点
打开文件vim -c "set nowrap" 或使用 IDE(VSCode、PHPStorm)让长行不会自动换行,防止混淆隐藏。
搜索关键字:g/base64_decode:g/eval( 等确认是否是 单行 或 分块(比如 $a="ba". "se64_". "decode";)。
检查字符串拼接常见技巧:$f="file_put_". "contents";${"_".'GET'}["a"]这种代码在普通业务里很少出现。
看是否有 obfuscation(压缩、加密)gzinflate(base64_decode(...))str_rot13(... )preg_replace("/.*/e", ...)这类组合几乎都是后门。
确认是否有写文件/执行系统命令file_put_contentsexecsystemshell_execpassthruproc_openpopen只要出现,就需要重点检查。
审计入口变量$GLOBALS$_GET$_POST$_REQUEST$_COOKIE$_SERVER["HTTP_…"]看是否直接把外部数据喂给 evalbase64_decode
审计文件权限ls -l <file>权限过宽 (777) 需要立刻收回。

2.4 在线/离线工具(可选)

工具适用场景快速安装/使用方式
ClamAV病毒/木马扫描(有针对 PHP WebShell 的规则)apt-get install clamavclamscan -r --detect-pua=yes /var/www/your_site
rkhunter主机层面的 rootkit 检测apt-get install rkhunterrkhunter --checkall
LMD (Linux Malware Detect)专门针对 Linux + WebShellwget -O - http://www.rfxn.com/downloads/maldetect-current.tar.gz | tar xzvf -./install.shmaldetect -r /var/www/your_site
PHPStan / Psalm静态代码分析,能发现未使用的 evalinclude 等风险composer require --dev phpstan/phpstanvendor/bin/phpstan analyse src/
Git‑Diff对比官方源码git clone https://github.com/pbootcms/pbootcms.gitdiff -r pbootcms/ /var/www/your_site/

强烈建议:先在 测试机(或 Docker 容器)里跑一次完整的 LMD / ClamAV 扫描,确认结果再在生产机上执行删除操作。


3️⃣ 进一步排查 日志(找出攻击路径)

3.1 访问日志(nginx/Apache)

# ① 查找包含 base64、eval、shell、pboot:if 的请求
grep -iE "base64|eval|shell|pboot:if|php%5C" /var/log/nginx/access.log > /tmp/log_suspect.txt# ② 聚合出现次数最高的 URL
awk '{print $7}' /tmp/log_suspect.txt | sort | uniq -c | sort -nr | head -20

常见攻击载体

攻击手法典型载体(出现频率高的入口)常见关键字 / 代码片段(搜索关键词)说明
SQL InjectionURL 参数、POST 表单、JSON、XML、GraphQLUNION SELECT' OR '1'='1/**//*sleep(benchmark(pg_sleep(利用未过滤的用户输入拼接到 SQL 语句,常见于登录、搜索、分页、过滤接口。
LFI / RFI(本地/远程文件包含)?file=?page=?template=?inc=../..\\/etc/passwdphp://data://http://https://expect://通过 include/require 加载用户可控路径的文件,实现代码执行或信息泄露。
文件上传漏洞上传接口 multipart/form-data(图片、文档、Excel).php.phtml.php5.phar.inc.txt.js<?phpeval(base64_decode(上传后文件被放置在 webroot,或在服务器临时目录通过 move_uploaded_file 移动后仍能执行。
命令执行(Command Injection)?cmd=?action=?run=, 任何系统调用参数system(exec(shell_exec(, ```, passthru(proc_open(popen(cmd.exebash -c用户输入直接拼接到系统命令,常见于 “ping”、 “traceroute”、 “whois” 等工具的后端实现。
代码注入(PHP code injection)模板标签、CMS 自定义字段、URL 参数、POST 参数、HTTP Header、Cookieeval(assert(create_function(preg_replace('/e'base64_decode(gzinflate(${_GET}${_POST}${_REQUEST}通过 evalassertpreg_replace(/e)等执行用户提供的 PHP 代码。
WebShell / Backdoor任意 .php.phtml.inc.txt.js.asp.aspx 等文件<?phpshell_execbase64_decodegzinflate$_REQUEST$_POST$_FILES,常配合 混淆\x..chr()str_rot13攻击者写入可以执行系统命令的脚本,一旦访问即可完全控制服务器。
跨站脚本(XSS)反射型 URL 参数、表单输入、评论、富文本编辑器、HTTP Header<script>onerror=javascript:src=href=<svg/onload=可劫持用户会话、执行任意前端代码,亦可配合 CSRF+XSS 发起内部请求。
跨站请求伪造(CSRF)任意 POST/GET 请求,尤其是 状态修改 接口csrf_token 缺失、Referer 不检查、SameSite=None利用受信任用户的浏览器向目标站点发起恶意请求。
文件包含/读取漏洞(File Disclosure)?download=?view=?file=../..\\/etc/passwdphp://filterphp://input读取服务器敏感文件,泄露源码、配置、密钥。
反序列化(Object Injection)?data=POST bodyCookieHeader(如 X-Auth-TokenO:(PHP 序列化)、__PHP_Incomplete_Class_Nameunserialize(yaml_load(触发魔术方法 __wakeup/__destruct 执行恶意代码。
目录遍历(Path Traversal)任何接受路径的参数../%2e%2e%2f%2e%2e%5c..%2f跳出预设目录读取或写入任意文件。
服务器端请求伪造(SSRF)?url=?host=?target=curlfile_get_contentshttp://https://ftp://gopher://dict://ldap://file://诱导服务器去请求内部网络资源,常用于探测内网、读取 metadata(如 AWS metadata)或执行端口扫描。
业务逻辑漏洞任意业务流程(优惠券、订单、充值)price=0discount=100balance=绕过业务校验,获取非法利益。
暴力破解 / 帐号枚举登录接口、密码找回、API 密钥查询username=adminlogin=reset=高频失败请求、返回不同错误码或时延差异。
爬虫/信息泄露公开目录、robots.txt、.git、.svn、.env、.htaccess、readme.htmlAuthorization: Basicapi_keyAWS_ACCESS_KEY_IDDB_PASSWORD攻击者利用公开文件收集信息后发动精准攻击。
http://www.dtcms.com/a/355329.html

相关文章:

  • Leetcode 深度优先搜索 (15)
  • 【大前端】React Native(RN)跨端的原理
  • 比较两个字符串的大小
  • 使用CDN后如何才不暴露IP
  • EtherNet/IP 转 Modbus 协议网关(三格电子)
  • SOME/IP-SD通信中的信息安全保证
  • leetcode_73 矩阵置零
  • (LeetCode 面试经典 150 题) 103. 二叉树的锯齿形层序遍历(广度优先搜索bfs)
  • [n8n] 工作流数据库管理SQLite | 数据访问层-REST API服务
  • 解决PyCharm打开PowerShell终端报错找不到conda-hook.ps1文件
  • 前端javascript在线生成excel,word模板-通用场景(免费)
  • Spring Boot 定时任务入门
  • 使用Java实现PDF文件安全检测:防止恶意内容注入
  • ubuntu20安装lammps
  • PDFMathTranslate,完全免费的电脑 PDF 文档翻译软件
  • 怎么保护信息安全?技术理论分析
  • Shell 脚本编程规范与变量
  • [调试][实现][原理]用Golang实现建议断点调试器
  • 裸金属服务器与虚拟机、物理机的核心差异是什么?
  • 鸿蒙Harmony-从零开始构建类似于安卓GreenDao的ORM数据库(二)
  • Kea DHCP高危漏洞CVE-2025-40779:单个数据包即可导致服务器崩溃
  • 获取小红书某个用户列表
  • Swift 解法详解 LeetCode 365:水壶问题
  • day083-Filebeat数据采集案例与Kibana可视化应用
  • Leetcode 494. 目标和 动态规划-01背包
  • 【踩坑记录】SpringBoot 项目报 Communications link failure 的解决方法
  • 数据结构初阶:详解双链表
  • 在angular20中使用monaco-editor
  • LLM Agent工具设计规范总结
  • Python 实现归并排序:从原理到代码