一些 PHP 管理系统程序中的后门


Posted in PHP onAugust 05, 2009

我倒不怎么关心提示框,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+" width=1 height=1 onerror=auto('"+autourl+"')>"); 
} 
} 
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='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).'×tamp='.$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的文件,用不着的话就直接删除.没什么用.
PHP 相关文章推荐
《PHP边学边教》(04.编写简易的通讯录――视频教程1)
Dec 13 PHP
PHP入门学习的几个不错的实例代码
Jul 13 PHP
php 魔术方法使用说明
Oct 20 PHP
php 文章采集正则代码
Dec 28 PHP
PHP和Shell实现检查SAMBA与NFS Server是否存在
Jan 07 PHP
php随机获取金山词霸每日一句的方法
Jul 09 PHP
php关键字仅替换一次的实现函数
Oct 29 PHP
微信支付的开发流程详解
Sep 13 PHP
PHP中字符串长度的截取用法示例
Jan 12 PHP
PHP实现的简单AES加密解密算法实例
May 29 PHP
PHP实现转盘抽奖算法分享
Apr 15 PHP
Yii框架参数配置文件params用法实例分析
Sep 11 PHP
黑夜路人出的几道php笔试题
Aug 04 #PHP
谈谈新手如何学习PHP 默默经典版本
Aug 04 #PHP
用PHP的ob_start() 控制您的浏览器cache
Aug 03 #PHP
一贴学会PHP 新手入门教程
Aug 03 #PHP
php 获得汉字拼音首字母的函数
Aug 01 #PHP
PHP 上传文件的方法(类)
Jul 30 #PHP
PHP 文章中的远程图片采集到本地的代码
Jul 30 #PHP
You might like
php 无极分类(递归)实现代码
2010/01/05 PHP
新手菜鸟必读:session与cookie的区别
2013/08/22 PHP
PHP has encountered a Stack overflow问题解决方法
2014/11/03 PHP
PHP将数据导出Excel表中的实例(投机型)
2017/07/31 PHP
PHP+JS实现的实时搜索提示功能
2018/03/13 PHP
参考:关于Javascript中实现暂停的几篇文章
2007/03/04 Javascript
基于jquery的loading效果实现代码
2010/11/05 Javascript
jQuery获取Select选择的Text和Value(详细汇总)
2013/01/25 Javascript
caller和callee的区别介绍及演示结果
2013/03/10 Javascript
js实现在页面上弹出蒙板技巧简单实用
2013/04/16 Javascript
jquery 淡入淡出效果的简单实现
2014/02/07 Javascript
如何解决手机浏览器页面点击不跳转浏览器双击放大网页
2016/07/01 Javascript
使用react实现手机号的数据同步显示功能的示例代码
2018/04/03 Javascript
JavaScript 中的12种循环遍历方法【总结】
2018/05/31 Javascript
从vue源码解析Vue.set()和this.$set()
2018/08/30 Javascript
详解vue项目中使用token的身份验证的简单实践
2019/03/08 Javascript
Vue移动端实现图片上传及超过1M压缩上传
2019/12/23 Javascript
jQuery带控制按钮轮播图插件
2020/07/31 jQuery
Python实现计算对象的内存大小示例
2019/07/10 Python
Python3 selenium 实现QQ群接龙自动化功能
2020/04/17 Python
使用TensorBoard进行超参数优化的实现
2020/07/06 Python
如何基于python把文字图片写入word文档
2020/07/31 Python
CSS3制作酷炫的条纹背景
2017/11/09 HTML / CSS
Herschel Supply Co.美国:背包、手提袋及配件
2020/11/24 全球购物
入党积极分子思想汇报范文
2014/01/05 职场文书
奥巴马的演讲稿
2014/05/15 职场文书
数学教育专业求职信
2014/07/22 职场文书
群众路线对照检查材料思想汇报怎么写
2014/09/18 职场文书
解除施工合同协议书
2014/10/17 职场文书
2014年安全员工作总结
2014/11/13 职场文书
2014年外联部工作总结
2014/11/17 职场文书
2014年建筑工程工作总结
2014/12/03 职场文书
大学生村官驻村工作心得体会
2016/01/23 职场文书
解决Jupyter-notebook不弹出默认浏览器的问题
2021/03/30 Python
MySQL 5.7常见数据类型
2021/07/15 MySQL
Windows server 2012搭建FTP服务器
2022/04/29 Servers