印象中,最近访问自己 Blog 某个页面的时候在页脚看到过以下代码,一直以为是某个插件的问题,都没有引起重视。
Not Found The requested URL /plugin/api/get_link.php was not found on this server.
今天才发现不仅是一个页面的问题,整站都有这个问题,才决定要找找是哪个插件的问题,真是不找不知道,一找吓一跳。首先想到的是将所有插件都禁止掉,再一个一个启动来排查,发现把所有插件禁止掉后,还是有同样的问题。
然后又想到可能是模板的问题,试着换回默认模板后问题解决了。因为问题是在页脚位置,开始检查使用模板的页脚文件源码,看了好几遍都没有发现有啥异常啊。
接着试着用 “get_link.php wordpress” 为关键字 Google,没找到解决办法,反而发现有很多网站都有类似的问题,继续汗… 这才想到不是个案。再次打开模板的 footer.php 文件与默认模板的代码对比,这次发现了我使用的模板中,多了一句到 /wp-includes/wp-vars.php 的引用,这名字看起来没啥问题啊,下载回来看看吧。将下载下来的 wp-vars.php 用 vim 打开,看到 eval(base64_decode 我的心就咯噔一下,明显是被挂马了…
赶紧用 wp-vars.php 为关键字搜索了一下,发现果然是被挂马了,接着在服务器上运行下面的命令,娘的,改的文件还不少:
1 2 3 4 5 6 7 | $ find ./ -iname "*.php" | xargs grep -H -n "eval(base64_decode" ./wp-admin/includes/users.php:6:eval(base64_decode("$d")); ./wp-admin/includes/class-wp-filesystem-check.php:3:eval(base64_decode("$dd")); ./wp-includes/images/crystal/license.php:3:eval(base64_decode("$dd")); ./wp-includes/common.php:3:eval(base64_decode("$dd")); ./wp-includes/class-read.php:6:eval(base64_decode("$d")); ./wp-content/themes/classic/archive.php:3:eval(base64_decode("$dd")); |
没辙,重装吧。把服务器上所有上传文件外的 php 文件全部删除掉,官方下了一份干净的 wordpress 重装了,历时一个小时,这里顺便 BS 一下 ixweb FTP 上传的蜗牛速度…
重装后问题解决了,不过起源还没找到,是某个插件的问题,还是 ixweb 服务商的服务器漏洞,还需要研究。有结果了我再更新。
鉴于解决问题前我用 get_link.php 为关键字搜索出来那么多 Blog 都有类似的问题,我花了十分钟整理了这篇文章,有用 WordPress 的朋友记得检查一下自己的 Blog 有没有类似的问题。
Comments 6
谢谢博主分享,正找这个呢
Posted 25 Sep 2010 at 3:42 pm ¶会不会是wordpress的问题,我曾经两度使用wordpress,最后系统blog都瘫痪了。
Posted 27 Oct 2010 at 3:45 pm ¶安全工作要做好。。
Posted 14 Nov 2010 at 5:56 pm ¶气愤啊!!
Posted 20 Nov 2010 at 11:31 pm ¶我也看过很多博主写过有关这方面的文章,最简单挂马的网站就是开源程序,是最基础的挂马第一课。
Posted 11 Dec 2010 at 10:08 am ¶这莫非是破解模板上的?
Posted 07 Jan 2011 at 10:04 am ¶Trackbacks & Pingbacks 1
[...] This post was mentioned on Twitter by David Pan, Avenger. Avenger said: 我的 WordPress 被挂马及解决过程:http://avenger.name/blog/blog-hacked/ [...]
Post a Comment