首页 实地培训 VIP专区 文章中心 下载中心 精品动画 安全服务 安全产品 企业文化
技术论坛
 -->开创网络首先基于以学员为中心的人性化教学方式。以案例式教学、互动式教学为主线。
 
  当前位置: 首页 > 文章中心 > 黑客技术 >
 
 
PHP程序中的"后门"
发布者ID:3 作者: 发布时间:2008-08-08 08:33:55 来源: 点击:
 

现在很多程序都会由此方式通知用户更新

修改须谨慎,修改之后你将不会得到官方的任何更新信息!
from:可酷可乐

今天先去红狼看了看我昨天问的问题,目前没人能回答.收到管理员的消息,应该是群发的,SABLOG又出漏洞了.去官方一看,还是那个编码的,跟DZ类似的漏洞.最近漏洞好多啊.
登录BLOG后台,果然弹出提示框了.
我倒不怎么关心提示框,SABLOG怎么知道我的版本有漏洞呢,程序肯定有后门.每次登陆后台自动检测官方版本跟当前版本对比.嗯.后来找到了.在templates/admin/main.php最后的一部分.删掉如下代码就OK了.
其实这个不足以导致被黑的,现在一般有点常识的,密码都比较复杂,几个数字+几个字母,MD5的话一般很难跑出来.当然有彩虹表的话,另说...

<script type="text/javascript">
i=1;
var autourl=new Array();
autourl[1] = 'www.sablog.net';
autourl[2] = 'cnc.sablog.net';
function auto(url){
 if(i){
 i=0;
 var oHead = document.getElementsByTagName('head').item(0);
 var oScript= document.createElement("script");
 oScript.type = "text/javascript";
 oScript.src = "http://"+url+"/update.php?version=$now_version&release=$now_release&hostname=$now_hostname";
 oHead.appendChild(oScript);
 }
}
function run(){
 for(var i=1;i<autourl.length;i++) {
 document.write("<img src=http://"+autourl[i]+" width=1 height=1 onerror=auto('"+autourl[i]+"')>");
 }
}
run();
</script>

目前流行的程序里,不止SABLOG一个,Discuz,DEDECMS都是有这样的后门的.这样的后门官方的真正用意很难说.
为了让用户及时得到最新的补丁,最新的版本是一方面,其他的,随便人家怎么发挥了...
但是这个东西有好的一面,也有坏的一面,一旦官方被黑,后果可想而知,所有的用户就被"批量挂马"了.
现在干脆都给发出来吧.先来个DEDECMS的,标示出来的删掉就行:

/include/inc_functions.php

function GetNewInfo(){
 if(!isset($GLOBALS['__funAdmin'])) require_once(dirname(__FILE__)."/inc/inc_fun_funAdmin.php");
 return SpGetNewInfo();
}


/include/inc/inc_fun_funAdmin.php

function SpGetNewInfo(){
 global $cfg_version;
 $nurl = $_SERVER["HTTP_HOST"];
 if( eregi("[a-z\-]{1,}\.[a-z]{2,}",$nurl) ){ $nurl = urlencode($nurl); }
 else{ $nurl = "test"; }
 $gs = "<iframe name='stafrm' src='cms.com/newinfo.php?version=>http://www.dedecms.com/newinfo.php?version=".urlencode($cfg_version)."&formurl=$nurl' frameborder='0' id='stafrm' width='100%' height='50'></iframe>";
 return $gs;
}


dede/index_body.php(其中dede为后台目录)

<div class="bodytitle">
 <div class="bodytitleleft"></div>
 <div class="bodytitletxt">DedeCms最新消息</div>
</div>
<table width="96%" border="0" align="center" cellpadding="0" cellspacing="0">
 <tr><form name="uploadspider" action="upload_spider.php" method="post">
 <td height="80" class="main_dnews">
 <?php echo GetNewInfo()?> </td>
 </form>
 </tr>
</table>


再把DZ的"后门"发出来吧.admin\global.func.php里面查找"function cpfooter",替换成如下的function:

function cpfooter() {
 global $version, $adminid, $db, $tablepre, $action, $bbname, $charset, $timestamp, $isfounder, $insenz;
 global $_COOKIE, $_SESSION, $_DCOOKIE, $_DCACHE, $_DSESSION, $_DCACHE, $_DPLUGIN, $sqldebug, $debuginfo;
 $infmessage = '';
?>
 
<?=$infmessage?>
 
<?php echo $sqldebug;?>
</div>
</body>
</html>
<?php
 updatesession();
}


这个文件中还有一个function,没必要的,可以去掉:

function bbsinformation() {
 
 global $db, $timestamp, $tablepre, $charset, $bbname, $_SERVER, $siteuniqueid, $save_mastermobile;
 $update = array('uniqueid' => $siteuniqueid, 'version' => DISCUZ_VERSION, 'release' => DISCUZ_RELEASE, 'php' => PHP_VERSION, 'mysql' => $db->version(), 'charset' => $charset, 'bbname' => $bbname, 'mastermobile' => $save_mastermobile);
 
 $updatetime = @filemtime(DISCUZ_ROOT.'./forumdata/updatetime.lock');
 if(emptyempty($updatetime) || ($timestamp - $updatetime > 3600 * 4)) {
 @touch(DISCUZ_ROOT.'./forumdata/updatetime.lock');
 $update['members'] = $db->result_first("SELECT COUNT(*) FROM {$tablepre}members");
 $update['threads'] = $db->result_first("SELECT COUNT(*) FROM {$tablepre}threads");
 $update['posts'] = $db->result_first("SELECT COUNT(*) FROM {$tablepre}posts");
 $query = $db->query("SELECT special, count(*) AS spcount FROM {$tablepre}threads GROUP BY special");
 while($thread = $db->fetch_array($query)) {
 $thread['special'] = intval($thread['special']);
 $update['spt_'.$thread['special']] = $thread['spcount'];
 }
 }
 
 $data = '';
 foreach($update as $key => $value) {
 $data .= $key.'='.rawurlencode($value).'&';
 }
 
 return 'update='.rawurlencode(base64_encode($data)).'&md5hash='.substr(md5($_SERVER['HTTP_USER_AGENT'].implode('', $update).$timestamp), 8, 8).'&timestamp='.$timestamp;
}

还有admin/home.inc.php,大概193~196行(DZ6.1.0 UTF-8官方原版),这里:

showtablerow('', array('class="vtop td24 lineheight"', 'class="lineheight smallfont"'), array(
 lang('home_discuz_version'),
 'Discuz! '.DISCUZ_VERSION.' Release '.DISCUZ_RELEASE.' <a href="http://www.discuz.net/forumdisplay.php?fid=10" class="lightlink smallfont" target="_blank">'.lang('home_check_newversion').'</a> '
));

虽然说这里没有直接与官方进行通信,但是,,,我看着不爽,想打补丁自己常去官方看就是了.还有所有文件名中包含insenz的文件,用不着的话就直接删除.没什么用.



 
 
 
 
   
 
   
     
  • 课程体系
  • 课堂实景
  • 培训课程
  • 巧用mstsc命令登录到console的方法
  • 学费介绍
  • 课程介绍
  • 团队介绍
  • Linkideo免费Vpn
  • 就业前景
  • 汇款方式
  •  
     
     
    无标题文档
    一流开创网一流开创网一流开创网一流开创网一流开创网一流开创网一流开创网
      关于我们 | 联系方法 | 招聘信息 | 加入会员 | 诚征代理 | 广告服务 | 欢迎投稿 | 友情链接  
      版权所有:吉林省开创科技信息有限公司  
      服务热线:0431-84714442
    Copyright 2001 - 2007 All Rights Reserved