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

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

缺陷编号:wooyun-2014-050942

漏洞标题:CSCMS V3.5 最新补丁后 又一个SQL注射(源码详析)

相关厂商:chshcms.com

漏洞作者: lxj616

提交时间:2014-02-14 14:43

修复时间:2014-05-15 14:44

公开时间:2014-05-15 14:44

漏洞类型:SQL注射漏洞

危害等级:高

自评Rank:10

漏洞状态:厂商已经确认

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

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

简要描述:

CSCMS V3.5 最新补丁后 又一个SQL注射(源码详析)
之前的注射已经修补了,但是还有几处注射点没有注意到

详细说明:

在addslash + 引号保护 的情况下 要格外注意数字型变量的处理
/app/controllers/home.php line:1020

public function gbookdel()
{
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Cache-Control: no-cache, must-revalidate");
header("Pragma: no-cache");
if(@!eregi($_SERVER['SERVER_NAME'],$_SERVER['HTTP_REFERER'])){exit('QQ:848769359');}
//测试时注意上一句,需要referer和host同名
//吐槽一下那个QQ是神马意思 - -
@header("Content-type: text/html;charset=utf-8");
$id = $this->security->xss_clean($this->input->get_post('id', TRUE)); //ID
//id经过安全过滤后addslashes了,当然也过滤XSS了
$users=$this->session->userdata('cs_name');
if(empty($id)){
exit("10000");//参数错误
}
if(!$this->CsdjUser->User_Login(1)){
exit("10001");//没有登入
}
$sql="SELECT * FROM ".CS_SqlPrefix."gbook where cs_id=".$id."";
//其实加上引号它也是数字,但是为什么不加呢?或者intval也可以呀
//和以下无关,不需要走到delete中去,因为已经select查询完了,之后只要让row为false终止就好了
$row=$this->CsdjDB->get_all($sql);
if($row){
if($row[0]->CS_Usera!=$users){
exit("10002");//没有权限
}
$this->db->query("delete from ".CS_SqlPrefix."gbook where CS_ID=".$id." or cs_fid=".$id."");
exit('10004');
}else{
exit("10003");//参数错误
}
}


漏洞位置:
/index.php/home/gbookdel/?id=6&random=你当时的random

address.png


是个人空间留言的删除链接
抓包后注意以下三点:
1.抓到后就放在那里,不要消耗掉random,注射后再放走
2.记住referer
3.记住cookie
好了,sqlmap
注意:cookie、referer、random 一个不能少,id一定要取不存在的值(不然random会被消耗)

sqlmap1.png


sqlmap2.png


以上是在本机上测试的,官网上自己个人空间留言居然需要等待网站管理审核…………难道不应该是用户审核么

漏洞证明:

sqlmap
注意:cookie、referer、random 一个不能少,id一定要取不存在的值(不然random会被消耗)

sqlmap1.png


sqlmap2.png

修复方案:

给id用一下intval
或者带上引号
建议仔细排查类似情况,给所有数字型用上intval,并且打上引号

版权声明:转载请注明来源 lxj616@乌云


漏洞回应

厂商回应:

危害等级:低

漏洞Rank:1

确认时间:2014-02-14 19:55

厂商回复:

您是2月5号之前下的程序吧,
程序更新的很快。
这个漏洞5号就修复了。

最新状态:

暂无


漏洞评价:

评论

  1. 2014-02-14 23:30 | lxj616 ( 普通白帽子 | Rank:438 漏洞数:90 | <hohoho>)

    @程氏舞曲CMS 我是用的最新版本测试的,也就是2月5日补丁后,根据我的观察,您所说的5号修补做了以下事情1.addslashes处理,导致之前举例music模块的注射被修复(无法逃脱单引号,因为外面被单引号包着)2.部分(因为有漏网的)数字型变量使用了intval已经修补的比如discuss.php中有一行如下$sid = intval($this->security->xss_clean($this->input->post('sid', TRUE))); //ID这样确实补上了这个文件但是我所列出的home.php中(见代码注释)没有使用intval,也没有单引号保护刚才我又到贵司官网上下载了刚刚2-14更新的程序包,发现home.php中仍然$id没有intval保护,敬请仔细排查漏网之鱼?

  2. 2014-03-28 10:50 | pandas ( 普通白帽子 | Rank:585 漏洞数:58 | 国家一级保护动物)

    厂商坑啊

  3. 2014-04-18 19:31 | 小贱人 ( 路人 | Rank:4 漏洞数:3 | 资深菜鸟,)

    mark