### 简要描述: Easytalk处理用户数据的时候未足够过滤,导致可以进行权限提升 ### 详细说明: 晚上习惯性的打开代码分析分析函数,看到了这样一处 漏洞文件: /Easytalk/Home/Lib/Action/GuideAction.class.php ``` //保存设置,注册用户时候,向导保存设置 public function doset() { $user=M('Users'); $userdata=$_POST["user"];//获取用户提交的所有数据 // ok,此处的用户userdata数据是来自post的,而并未过滤一些敏感字段 $userdata["nickname"]= daddslashes(strip_tags(trim($userdata["nickname"]))); $userdata['provinceid']=intval($userdata['provinceid']); $userdata['cityid']=intval($userdata['cityid']); $userdata['user_info']= daddslashes(trim(htmlspecialchars($userdata['user_info']))); // 过滤nickname if(!preg_match('/^[0-9a-zA-Z\xe0-\xef\x80-\xbf._-]+$/i',$userdata['nickname'])) { setcookie('setok', json_encode(array('lang'=>L('setting2'),'ico'=>2)),0,'/'); header('location:'.SITE_URL.'/?m=guide'); exit; } if (!$userdata['nickname'] || !$userdata['provinceid'] || !$userdata['cityid']) { setcookie('setok', json_encode(array('lang'=>L('setting1'),'ico'=>2)),0,'/'); header('location:'.SITE_URL.'/?m=guide'); exit; } //昵称检测 if...
### 简要描述: Easytalk处理用户数据的时候未足够过滤,导致可以进行权限提升 ### 详细说明: 晚上习惯性的打开代码分析分析函数,看到了这样一处 漏洞文件: /Easytalk/Home/Lib/Action/GuideAction.class.php ``` //保存设置,注册用户时候,向导保存设置 public function doset() { $user=M('Users'); $userdata=$_POST["user"];//获取用户提交的所有数据 // ok,此处的用户userdata数据是来自post的,而并未过滤一些敏感字段 $userdata["nickname"]= daddslashes(strip_tags(trim($userdata["nickname"]))); $userdata['provinceid']=intval($userdata['provinceid']); $userdata['cityid']=intval($userdata['cityid']); $userdata['user_info']= daddslashes(trim(htmlspecialchars($userdata['user_info']))); // 过滤nickname if(!preg_match('/^[0-9a-zA-Z\xe0-\xef\x80-\xbf._-]+$/i',$userdata['nickname'])) { setcookie('setok', json_encode(array('lang'=>L('setting2'),'ico'=>2)),0,'/'); header('location:'.SITE_URL.'/?m=guide'); exit; } if (!$userdata['nickname'] || !$userdata['provinceid'] || !$userdata['cityid']) { setcookie('setok', json_encode(array('lang'=>L('setting1'),'ico'=>2)),0,'/'); header('location:'.SITE_URL.'/?m=guide'); exit; } //昵称检测 if ($userdata['nickname'] && $userdata['nickname']!=$this->my['nickname']) { if (StrLenW($userdata['nickname'])<=12 && StrLenW($userdata['nickname'])>=3) { $newnickname=$user->where("nickname='$userdata[nickname]'")->find(); if ($newnickname) { setcookie('setok', json_encode(array('lang'=>L('setting4'),'ico'=>2)),0,'/'); header('location:'.SITE_URL.'/?m=guide'); exit; } } else { setcookie('setok', json_encode(array('lang'=>L('setting2'),'ico'=>2)),0,'/'); header('location:'.SITE_URL.'/?m=guide'); exit; } } // var_dump($userdata);die; $user->where("user_id='".$this->my['user_id']."'")->data($userdata)->save(); header('location:'.SITE_URL.'/?m=guide&a=followtopic'); } ``` 漏洞代码, $userdata=$_POST["user"];//获取用户提交的所有数据,然后进行了一些常规的检测之后,就执行了$user->where("user_id='".$this->my['user_id']."'")->data($userdata)->save();存入数据库了。 这样写的问题是,用户可以自己添加别的字段,而因为此cms管理员表跟普通用户表又在一个表里,(区分的标志是isadmin字段)因而可以造成权限提升 ### 漏洞证明: 注册普通用户,然后来到设置向导里,拦截发送的请求 [<img src="https://images.seebug.org/upload/201404/171002412a4387f03fce6a9a641eabd1dd58bfc8.jpg" alt="1.jpg" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201404/171002412a4387f03fce6a9a641eabd1dd58bfc8.jpg) 增加字段user%5Bisadmin%5D=1即可 [<img src="https://images.seebug.org/upload/201404/17100500e8e32866116ababd56576f57aa413a61.jpg" alt="2.jpg" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201404/17100500e8e32866116ababd56576f57aa413a61.jpg) 查看结果 [<img src="https://images.seebug.org/upload/201404/17100303e9ad7a41efe4940b3448b538dcbc8f4e.jpg" alt="3.jpg" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201404/17100303e9ad7a41efe4940b3448b538dcbc8f4e.jpg) 后台getshell不演示了,直接ucenter配置里添加一句话即可 getshell方法见 [WooYun: EasyTalk任意文件删除漏洞(可后台getshell)](http://www.wooyun.org/bugs/wooyun-2014-055812)