一些 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 相关文章推荐
php5数字型字符串加解密代码
Apr 24 PHP
PHP stristr() 函数(不区分大小写的字符串查找)
Jun 03 PHP
深入file_get_contents函数抓取内容失败的原因分析
Jun 25 PHP
PHP 获取文件权限函数介绍
Jul 11 PHP
PHP中copy on write写时复制机制介绍
May 13 PHP
浅析PHP程序设计中的MVC编程思想
Jul 28 PHP
图文介绍PHP添加Redis模块及连接
Jul 28 PHP
浅谈PHP中关于foreach使用引用变量的坑
Nov 14 PHP
简单谈谈PHP中的Reload操作
Dec 12 PHP
简单实现php上传文件功能
Sep 21 PHP
如何解决PHP获取不到SESSION信息之一般情况
Oct 10 PHP
PHP使用PDO 连接与连接管理操作实例分析
Apr 21 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中文字符串截取函数
2013/11/12 PHP
PHP GD库生成图像的几个函数总结
2014/11/19 PHP
php使用指定编码导出mysql数据到csv文件的方法
2015/03/31 PHP
Laravel关联模型中过滤结果为空的结果集(has和with区别)
2018/10/18 PHP
laravel实现前后台路由分离的方法
2019/10/13 PHP
JQuery 图片延迟加载并等比缩放插件
2009/11/09 Javascript
jquery中ajax调用json数据的使用说明
2011/03/17 Javascript
基于jQuery的合并表格中相同文本的相邻单元格的代码
2011/04/06 Javascript
jsonp原理及使用
2013/10/28 Javascript
JavaScript html5 canvas绘制时钟效果
2016/03/01 Javascript
全面解析Bootstrap中transition、affix的使用方法
2016/05/30 Javascript
基于js里调用函数时,函数名带括号和不带括号的区别
2016/07/28 Javascript
javascript设计模式Constructor(构造器)模式
2016/08/19 Javascript
JavaScript实现页面无操作倒计时退出
2016/10/22 Javascript
完美解决手机网页中输入框被输入法遮挡的问题
2017/12/19 Javascript
使用webpack构建应用的方法步骤
2019/03/04 Javascript
JS实现li标签的删除
2019/04/12 Javascript
Vue中computed和watch有哪些区别
2020/12/19 Vue.js
urllib2自定义opener详解
2014/02/07 Python
python删除列表中重复记录的方法
2015/04/28 Python
Python制作爬虫抓取美女图
2016/01/20 Python
使用Python多线程爬虫爬取电影天堂资源
2016/09/23 Python
python+pandas分析nginx日志的实例
2018/04/28 Python
Python调用C++,通过Pybind11制作Python接口
2018/10/16 Python
用python实现刷点击率的示例代码
2019/02/21 Python
numpy.ndarray 实现对特定行或列取值
2019/12/05 Python
python3使用Pillow、tesseract-ocr与pytesseract模块的图片识别的方法
2020/02/26 Python
Java ExcutorService优雅关闭方式解析
2020/05/30 Python
通过实例解析Python RPC实现原理及方法
2020/07/07 Python
荷兰街头时尚之家:Funkie House
2019/03/18 全球购物
小学校本培训方案
2014/06/06 职场文书
法定代表人身份证明书
2014/09/10 职场文书
优秀英文求职信范文
2015/03/19 职场文书
高中化学教学反思
2016/02/22 职场文书
Python下opencv库的安装过程及问题汇总
2021/06/11 Python
java后台调用接口及处理跨域问题的解决
2022/03/24 Java/Android