应直接在phpMyAdmin中搜索wp_options表的option_value字段,使用正则匹配eval.*function、xads_platf、location.href等可疑字符串,并勾选“使用正则表达式”和“在数据中搜索”,逐条检查解码后的真实内容。

直接查 wp_options 表里的可疑 option_name
WordPress 的恶意脚本常通过 wp_options 表持久化,尤其是以 theme_mods_、widget_text、_transient_ 或自定义前缀(如 wp_123456_)开头的 option_name。攻击者会把混淆 JS(比如含 eval(function(p,a,c,k,e,d))或跳转逻辑(如 window.location.href=)base64 编码后存进 option_value 字段。
在 phpMyAdmin 中,进入对应数据库 → 点击 wp_options 表 → 点击「搜索」标签页 → 在「查找」栏填入:
-
eval.*function(正则模式勾选) - 或
xads_platf、_ms、_ma、102\.61(注意点号要转义) - 或
location\.href\|window\.open\|document\.write
务必勾选「使用正则表达式」和「在数据中搜索」,否则搜不到 base64 解码后的明文片段。搜出的结果要逐条点开 option_value 查看原始内容——很多恶意值是 gzip 压缩或二次 base64 编码过的,不能只看是否“像 JS”。
重点检查 wp_posts 表里的 post_content 和 post_excerpt
广告劫持类脚本也爱藏在文章/页面正文里,尤其伪装成“广告位”“推荐链接”等正常文本,实际是带 onload、onerror 或内联 script 的 HTML 片段。这类注入常绕过主题文件,直接写进数据库,禁用插件也不生效。
立即学习“PHP免费学习笔记(深入)”;
操作路径:点击 wp_posts 表 →「搜索」→ 设置筛选条件:
-
post_status = 'publish'(排除草稿干扰) -
post_type IN ('post', 'page')(聚焦前台可见内容) - 在
post_content或post_excerpt字段搜索:<script>、eval(、atob(、fromCharCode(、www.*form
注意:有些恶意代码会用注释包裹(如 <!--<script>...</script>-->)来躲过前端渲染,但在数据库里仍可被 grep 式匹配到。别忽略 post_excerpt,它常被主题用于首页摘要,也是隐蔽加载点。
别漏掉 wp_usermeta 表里的 admin 用户 meta_key
高级后门会绑定到管理员账号,比如往 wp_usermeta 表中插入一条 meta_key = 'wp_capabilities' 之外的异常键,例如 admin_script、inject_js 或随机字符串,其 meta_value 存着 base64 编码的恶意 payload。这种手法让脚本只对登录态管理员生效,更难被普通扫描发现。
执行搜索时,在 wp_usermeta 表中:
- 先筛选
user_id对应你站点的管理员 ID(通常为 1) - 再对
meta_key搜索:script\|inject\|code\|eval - 对
meta_value搜索:YmFzZTY0(base64 的 "base64")、ZXZhbCg("eval(" 的 base64)、cGhwX2luZm8o("phpinfo(" 的 base64)
这类注入往往不报错、不弹窗,只在后台某些页面(如仪表盘、插件列表)底部静默执行。如果你发现某管理员登录后页面多出奇怪请求(Network 面板能看到 102.61 类域名),优先查这个表。
导出后用命令行补漏:grep 比 phpMyAdmin 更准
phpMyAdmin 的搜索功能有长度限制(默认截断大字段),且不支持跨字段关联。真正顽固的注入(比如拆分存储、动态拼接)必须导出 SQL 再本地处理。
操作步骤:
- 在 phpMyAdmin 中全库导出(格式选
Custom – display all rows,勾选Disable foreign key checks) - 上传到 Linux 服务器,执行:
grep -a -n -i "eval.*function\|xads_platf\|_ms=.*;\|www.*form" your-site.sql
- 若结果为空但仍有异常,尝试解码常见 base64 片段:
grep -a "YmFzZTY0" your-site.sql | head -20 | while read l; do echo "$l" | sed 's/.*YmFzZTY0//; s/".*//' | base64 -d 2>/dev/null | grep -E "(eval|script|http)"; done
关键点:grep -a 把二进制 SQL 当文本扫,-n 显示行号方便定位具体表和字段;很多混淆脚本的 base64 是不完整或嵌套的,所以不能只依赖一次解码——得结合上下文判断哪段值最可疑。
数据库清理不是删完就完事。恶意代码常设定时任务(wp_cron)、钩子回调(add_action)、或远程拉取更新,只要残留一个触发点,几天内就会复发。动手前务必备份整库,删完后用 Wordfence 或 Sucuri 扫描比对文件系统,确认没有配套的 PHP 后门。



















