### 简要描述:
XDcms企业网站管理系统是一套完全开源的通用的内容管理系统。主要使用php+mysql+smarty技术基础进行开发,XDcms采用OOP(面向对象)方式进行基础运行框架搭建。模块化开发方式做为功能开发形式。框架易于功能扩展,代码维护,二次开发能力优秀。
XDcms开发团队具有多年网站开发经验,经过几年时间的沉淀,让我们更懂您的需求。
系统特点:
内容管理模型,自定义字段,更方便扩展功能。自带模型:单页模型、新闻模型、产品模型、招聘模型
栏目自定义,便于内容管理
模板管理,后台编辑模板更方便
邮件发送,表单留言自动发送邮件到邮箱
数据缓存,访问速度更快
会员自定义模型、字段
结合Smarty开发的万能loop标签,数据调用更简单、更方便
内容模块化,二次开发更便捷。自带模块:幻灯片、QQ客服、友情链接、自定义表单(在线留言、简历管理)
后台菜单智能管理,所有后台可添加、删除
### 详细说明:
fun.inc.php
```
function safe_html($str){
if(empty($str)){return;}
$str=preg_replace('/select|insert | update | and | in | on | left | joins | delete |\%|\=|\/\*|\*|\.\.\/|\.\/| union | from | where | group | into |load_file
|outfile/','',$str);
return htmlspecialchars($str);
}
注入文件member/index.php
public function register_save(){
$username=safe_html($_POST['username']);
$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'");//判断会员是否存在
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'");//插入主要字段——用户名、密码
$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}'";
}
$field_sql=substr($field_sql,1);
$query=$this->mysql->query($field_sql);
showmsg(C('register_success'),'index.php?m=member&f=register');
}
```
$fields没有过滤。
```
foreach($fields as $k=>$v){
$f_value=$v;
if(is_array($v)){
$f_value=implode(',',$v);
}
$field_sql.=",`{$k}`='{$f_value}'";
}
$field_sql=substr($field_sql,1);
$query=$this->mysql->query($field_sql);
```
重组sql语句。带入查询。
找到注册页面
输入用户密码 在姓名或者邮箱填写注入代码即可。
写了个软件测试下,有些版权敏感的就涂了
[<img src="https://images.seebug.org/upload/201503/15025132676395c6a7fb36d099d911e8176293df.jpg" alt="360截图20150315025029769.jpg" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201503/15025132676395c6a7fb36d099d911e8176293df.jpg)
### 漏洞证明:
fun.inc.php
```
function safe_html($str){
if(empty($str)){return;}
$str=preg_replace('/select|insert | update | and | in | on | left | joins | delete |\%|\=|\/\*|\*|\.\.\/|\.\/| union | from | where | group | into |load_file
|outfile/','',$str);
return htmlspecialchars($str);
}
注入文件member/index.php
public function register_save(){
$username=safe_html($_POST['username']);
$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'");//判断会员是否存在
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'");//插入主要字段——用户名、密码
$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}'";
}
$field_sql=substr($field_sql,1);
$query=$this->mysql->query($field_sql);
showmsg(C('register_success'),'index.php?m=member&f=register');
}
```
$fields没有过滤。
```
foreach($fields as $k=>$v){
$f_value=$v;
if(is_array($v)){
$f_value=implode(',',$v);
}
$field_sql.=",`{$k}`='{$f_value}'";
}
$field_sql=substr($field_sql,1);
$query=$this->mysql->query($field_sql);
```
重组sql语句。带入查询。
找到注册页面
输入用户密码 在姓名或者邮箱填写注入代码即可。
写了个软件测试下,有些版权敏感的就涂了
[<img src="https://images.seebug.org/upload/201503/15025132676395c6a7fb36d099d911e8176293df.jpg" alt="360截图20150315025029769.jpg" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201503/15025132676395c6a7fb36d099d911e8176293df.jpg)
暂无评论