土豆 发表于 2014-1-12 17:55:56

XDCMS企业管理系统SQL注入#1

本帖最后由 土豆 于 2014-1-12 17:57 编辑

简要描述:

最新版XDCMS企业管理系统,由于过滤不严,可绕过限制,导致多处SQL注入


注入在XDCMS企业管理系统的注册功能处,来看看\system\modules\member\index.php文件:

注册时会调用register_save,问题就出在index.php的register_save函数处:


public function register_save(){

                $username=safe_html($_POST['username']);//获取UserName,这里用safe_html函数进行过滤

                $password=$_POST['password'];

                $password2=$_POST['password2'];

                $fields=$_POST['fields'];

                if(empty($username)||empty($password2)||empty($password)){

                        showmsg(C('material_not_complete'),'-1');

                }

                if(!strlength($username,5)){

                        showmsg(C('username').C('str_len_error').'5','-1');

                }

                if(!strlength($password,5)){

                        showmsg(C('password').C('str_len_error').'5','-1');

                }

                if($password!=$password2){

                        showmsg(C('password_different'),'-1');

                }

                $password=md5(md5($password));

               

                $user_num=$this->mysql->num_rows("select * from ".DB_PRE."member where `username`='$username'");//判断会员是否存在,这里的UserName可被绕过过滤,导致注入,这是第一处SQL注入

                if($user_num>0){

                        showmsg(C('member_exist'),'-1');

                }

                $ip=safe_replace(safe_html(getip()));

                $this->mysql->db_insert('member',"`username`='".$username."',`password`='".$password."',`creat_time`='".datetime()."',`last_ip`='".$ip."',`is_lock`='0',`logins`='0',`groupid`='1'");//插入主要字段——用户名、密码,这里的UserName同意造成注入,第二处sql注入

                $last_id=$this->mysql->insert_id();

               

                //插入附属字段

                $field_sql='';

                foreach($fields as $k=>$v){

                        $f_value=$v;

                        if(is_array($v)){

                                $f_value=implode(',',$v);

                        }

                        $field_sql.=",`{$k}`='{$f_value}'";//这里没有过滤,直接进入了下面的update sql语句,导致第三处sql注入

                }

                $field_sql=substr($field_sql,1);

                $field_sql="update ".DB_PRE."member set {$field_sql} where userid={$last_id}";

                $query=$this->mysql->query($field_sql);

               

                showmsg(C('register_success'),'index.php?m=member&f=register');

        }


第一处sql注入,注册一个用户,然后抓包:






看回显,很明显存在注入。试试撸主给出的EXP 。



直接爆账号密码。。

因为在safe_html处虽然过了个SQL注入的敏感词,还过滤了=和*,但是没有考虑SQL注入敏感词的大小写,这里只过滤了小写,那么我们用大写绕过,这里过滤的=和*,我们可以使用不带*和=的常规保存SQL注入语句,EXP如下:

EXP:
**** Hidden Message *****

本文转载自:xfkxfk@乌云

蓝色_ 发表于 2014-1-12 17:59:25

沙发赞一个

world 发表于 2014-1-12 18:04:48

Diana 发表于 2014-1-12 18:06:05

本帖最后由 Diana 于 2014-1-12 19:01 编辑

楼主 竟然五杀了 超神了~{:soso__18403343281774895330_6:}

陈可逆 发表于 2014-1-12 19:17:21

2119 发表于 2014-1-12 21:55:00

;P大牛 谢谢了!

LostSoul 发表于 2014-1-13 07:06:41

神器经常隐藏了

quyang0421 发表于 2014-1-13 09:55:52

zhoujian017 发表于 2014-1-13 10:39:08

好东西,赞一个

Numlock 发表于 2014-1-13 20:00:35

谢土豆大牛分享。
页: [1] 2 3
查看完整版本: XDCMS企业管理系统SQL注入#1