一些 PHP 管理系统程序中的后门
2018-09-07 17:26
我倒不怎么关心提示框,SABLOG怎么知道我的版本有漏洞呢,程序肯定有后门.每次登陆后台自动检测官方版本跟当前版本对比.嗯.后来找到了.在templates/admin/main.php最后的一部分.删掉如下代码就OK了.
其实这个不足以导致被黑的,现在一般有点常识的,密码都比较复杂,几个数字+几个字母,MD5的话一般很难跑出来.当然有彩虹表的话,另说...
复制代码 代码如下:
<script type=text/javascript>
i=1;
var autourl=new Array();
autourl[1] =
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=
oHead.appendChild(oScript);
}
}
function run(){
for(var i=1;i<autourl.length;i++) {
document.write(<img src=
}
}
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=
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;
}
还有.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=
));
虽然说这里没有直接与官方进行通信,但是,,,我看着不爽,想打补丁自己常去官方看就是了.还有所有文件名中包含insenz的文件,用不着的话就直接删除.没什么用.
上一篇:PHP自动补全表单的两种方法
下一篇:PHP 字符串 小常识