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

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

缺陷编号:wooyun-2014-071299

漏洞标题:Finecms大众版 v2.3.4前台getshell(一定条件)

相关厂商:dayrui.com

漏洞作者: phith0n

提交时间:2014-08-07 17:43

修复时间:2014-11-02 17:44

公开时间:2014-11-02 17:44

漏洞类型:文件上传导致任意代码执行

危害等级:高

自评Rank:20

漏洞状态:漏洞已经通知厂商但是厂商忽略漏洞

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2014-08-07: 细节已通知厂商并且等待厂商处理中
2014-08-12: 厂商主动忽略漏洞,细节向第三方安全合作伙伴开放
2014-10-06: 细节向核心白帽子及相关领域专家公开
2014-10-16: 细节向普通白帽子公开
2014-10-26: 细节向实习白帽子公开
2014-11-02: 细节向公众公开

简要描述:

愉快地打脸打脸打脸,厂商你真的考虑周到了吗?
我已不在乎你是否忽略,给多少rank,我是来宣传我们团队的:parsec.me~~

详细说明:

依旧是finecms用户头像上传部分:/member/controller/Account.php 412行:

public function upload() {
// 大众版头像上传处理 2014-6-15
if (!isset($GLOBALS['HTTP_RAW_POST_DATA'])) {
exit(function_exists('iconv') ? iconv('UTF-8', 'GBK', '环境不支持') : 'The php does not support');
}
// 创建图片存储文件夹
$dir = FCPATH.'member/uploadfile/member/'.$this->uid.'/';
if (!file_exists($dir)) {
mkdir($dir, 0777, true);
}
$filename = $dir.'avatar.zip'; // 存储flashpost图片
file_put_contents($filename, $GLOBALS['HTTP_RAW_POST_DATA']);
// 解压缩文件
$this->load->library('Pclzip');
$this->pclzip->PclFile($filename);
$content = $this->pclzip->listContent();
if (!$content) {
@unlink($filename);
exit(function_exists('iconv') ? iconv('UTF-8', 'GBK', '文件已损坏') : 'The file has damaged');
}
// 验证文件
foreach ($content as $t) {
if (strpos($t['stored_filename'], '..') !== FALSE ||
strpos($t['filename'], '..') !== FALSE ||
strpos($t['filename'], '/') !== FALSE ||
strpos($t['stored_filename'], '/') !== FALSE) {
@unlink($filename);
exit(function_exists('iconv') ? iconv('UTF-8', 'GBK', '非法名称的文件') : 'llegal name file');
}
if (substr(strrchr($t['stored_filename'], '.'), 1) != 'jpg') {
@unlink($filename);
exit(function_exists('iconv') ? iconv('UTF-8', 'GBK', '文件格式校验不正确') : 'The document format verification is not correct');
}
}
// 解压文件
if ($this->pclzip->extract(PCLZIP_OPT_PATH, $dir, PCLZIP_OPT_REPLACE_NEWER) == 0) {
@dr_dir_delete($dir);
exit($this->pclzip->zip(true));
}
@unlink($filename);
if (!is_file($dir.'45x45.jpg') || !is_file($dir.'90x90.jpg')) {
exit('文件创建失败');
}


看逻辑,首先将zip文件写入目录,然后用$this->pclzip->listContent();先将文件中内容列出来,然后逐一判断:
1.含有..、/的不允许解压,也就是说不能再通过../../../的方式解压到首页了
2.后缀不是.jpg不允许解压
3.之前的删除操作没有了,以上判断完成后就直接解压。
且不深入研究zip内部的格式,只需要按照小白的想法想一下,这样真的过滤周到了么?
在IIS6中,可以利用解析漏洞来绕过这个限制:
文件名改成1.php;.jpg即可
一个分号解决各种问题。
详见漏洞证明。

漏洞证明:

我手上没有IIS6服务器,就只演示说明一下可以解压为1.php;.jpg就行了。
先本地把压缩包弄好:

01.jpg


上传抓包:

02.jpg


上传成功,查看网站目录即可看到文件:

03.jpg


04.jpg


因为我本地是apache就不演示代码执行的了,在IIS6下可以通过解析漏洞来执行代码。

修复方案:

呵呵

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


漏洞回应

厂商回应:

危害等级:无影响厂商忽略

忽略时间:2014-11-02 17:44

厂商回复:

最新状态:

暂无