一些 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 相关文章推荐
关于Intype一些小问题的解决办法
Mar 28 PHP
php后台程序与Javascript的两种交互方式
Oct 25 PHP
PHP中的string类型使用说明
Jul 27 PHP
php xml常用函数的集合(比较详细)
Jun 06 PHP
ThinkPHP实现动态包含文件的方法
Nov 29 PHP
详解php的socket通信
Aug 11 PHP
PHP实现数组array转换成xml的方法
Jul 19 PHP
PHP实现生成模糊图片的方法示例
Dec 21 PHP
PHP实现上传图片到数据库并显示输出的方法
May 31 PHP
基于swoole实现多人聊天室
Jun 14 PHP
php简单计算权重的方法示例【适合抽奖类应用】
Jun 10 PHP
laravel 错误处理,接口错误返回json代码
Oct 25 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日期操作技巧小结
2016/06/25 PHP
CI框架实现框架前后端分离的方法详解
2016/12/30 PHP
laravel框架实现为 Blade 模板引擎添加新文件扩展名操作示例
2020/01/25 PHP
JavaScript 编写匿名函数的几种方法
2010/02/21 Javascript
探索Emberjs制作一个简单的Todo应用
2012/11/07 Javascript
Javascript中call与apply的学习笔记
2014/09/22 Javascript
浅谈javascript:两种注释,声明变量,定义函数
2016/10/05 Javascript
利用fecha进行JS日期处理
2016/11/21 Javascript
jquery手机触屏滑动拼音字母城市选择器的实例代码
2017/12/11 jQuery
vue项目部署上线遇到的问题及解决方法
2018/06/10 Javascript
Node.js事件的正确使用方法
2019/04/05 Javascript
高性能js数组去重(12种方法,史上最全)
2019/12/21 Javascript
js实现贪吃蛇游戏 canvas绘制地图
2020/09/09 Javascript
vue中echarts的用法及与elementui-select的协同绑定操作
2020/11/17 Vue.js
[14:50]2018DOTA2亚洲邀请赛开幕式
2018/04/03 DOTA
python对数组进行反转的方法
2015/05/20 Python
Python的Django框架中if标签的相关使用
2015/07/15 Python
Python在信息学竞赛中的运用及Python的基本用法(详解)
2017/08/15 Python
Tensorflow中的placeholder和feed_dict的使用
2018/07/09 Python
uwsgi+nginx部署Django项目操作示例
2018/12/04 Python
Tensorflow 实现分批量读取数据
2020/01/04 Python
Python OpenCV去除字母后面的杂线操作
2020/07/05 Python
使用PyCharm官方中文语言包汉化PyCharm
2020/11/18 Python
canvas学习和滤镜实现代码
2018/08/22 HTML / CSS
html5视频常用API接口的实战示例
2020/03/20 HTML / CSS
圣诞树世界:Christmas Tree World
2019/12/10 全球购物
英语系本科生个人求职信
2013/09/21 职场文书
如何进行有效的自我评价
2013/09/27 职场文书
2014校长四风问题对照检查材料思想汇报
2014/09/16 职场文书
婚前财产协议书范本
2014/10/19 职场文书
圆明园纪录片观后感
2015/06/03 职场文书
2015年暑期社会实践方案
2015/07/14 职场文书
2015年民兵整组工作总结
2015/07/24 职场文书
2016年百日安全生产活动总结
2016/04/06 职场文书
工作自我评价范文
2019/03/21 职场文书
mysql 如何获取两个集合的交集/差集/并集
2021/06/08 MySQL