Mao10cms最新版本可遍历所有用户id致可CSRF提升自己为管理员

2015-05-18T00:00:00
ID SSV:95159
Type seebug
Reporter Root
Modified 2015-05-18T00:00:00

Description

简要描述:

Mao10cms最新版本可遍历所有用户id致可CSRF提升自己为管理员 测试版本为官方最新版Mao10CMS V3.3.4

详细说明:

看到这个 WooYun: Mao10cms最新版本存在CSRF越权导致管理员发表文章 ,我也来个CSRF,这容易实现,给管理员发条站内信或者留言说自己的商品或网站有问题了,求帮助。热心的管理员就点链接啦。 要提升自己为管理员,首先要知道自己的id,mao10cms可以这样获得自己的id,并且可以遍历所有用户(包括管理员)的用户名及id(无需登陆)。 在查看商品时,访问链接http://localhost/index.php?m=pro&c=index&a=single&id=1,只要把id从1开始加1遍历就可以得到所有用户(包括管理员)的用户名及id,如图,以管理员为例

<img src="https://images.seebug.org/upload/201505/162345180d6a51f18600ae06d591154800829daf.jpg" alt="查看用户用户名及id副本.jpg" width="600" onerror="javascript:errimg(this);">

知道了自己的id,那就可以通过CSRF来提升自己为管理员了。 Mao10cms在后台修改用户权限时没有对token或referer进行处理,可以CSRF 看看代码吧

public function manage($page=1){ if(is_numeric($page)) { if(mc_user_id()) { if(mc_is_admin()) { if(is_numeric($_POST['user_level']) && is_numeric($_POST['user_id'])) { if($_POST['user_id']==mc_user_id()) { $this-&gt;error('您不能修改自己的身份!',U('Control/index/manage')); } else { mc_update_meta($_POST['user_id'],'user_level',$_POST['user_level'],'user'); $this-&gt;success('修改用户身份成功!'); }; } else { $this-&gt;page = M('page')-&gt;where("type='user'")-&gt;order('id desc')-&gt;page($page,mc_option('page_size'))-&gt;select(); $count = M('page')-&gt;where("type='user'")-&gt;count(); $this-&gt;assign('count',$count); $this-&gt;assign('page_now',$page); $this-&gt;theme('admin')-&gt;display('Control/manage'); } } else { $this-&gt;error('您没有权限访问此页面!'); }; } else { $this-&gt;success('请先登陆',U('User/login/index')); }; } else { $this-&gt;error('参数错误!'); } }

POC如下:

<img src="https://images.seebug.org/upload/201505/162347130c75b08252db8a8c3ba341e241afe76c.jpg" alt="POC.JPG" width="600" onerror="javascript:errimg(this);">

修改过程:

<img src="https://images.seebug.org/upload/201505/16234725c6ba2ba25ea52fd447166383ff11f051.jpg" alt="执行的语句副本.jpg" width="600" onerror="javascript:errimg(this);">

修改成功:

<img src="https://images.seebug.org/upload/201505/16234739c88051f236e1fe678cace786d7775129.jpg" alt="成功副本.jpg" width="600" onerror="javascript:errimg(this);">

漏洞证明:

见 详细说明