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

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

缺陷编号:wooyun-2015-0130980

漏洞标题:tipask注入漏洞(条件限制)

相关厂商:tipask

漏洞作者: 村长叔叔

提交时间:2015-08-05 16:58

修复时间:2015-11-04 10:06

公开时间:2015-11-04 10:06

漏洞类型:SQL注射漏洞

危害等级:高

自评Rank:20

漏洞状态:已交由第三方合作机构(cncert国家互联网应急中心)处理

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2015-08-05: 细节已通知厂商并且等待厂商处理中
2015-08-06: cncert国家互联网应急中心暂未能联系到相关单位,细节仅向通报机构公开
2015-08-09: 细节向第三方安全合作伙伴开放
2015-09-30: 细节向核心白帽子及相关领域专家公开
2015-10-10: 细节向普通白帽子公开
2015-10-20: 细节向实习白帽子公开
2015-11-04: 细节向公众公开

简要描述:

tipask注入漏洞

详细说明:

漏洞细节:
tipask url格式类似如此 index.php?classname/methodname
然后再初始化的index.php 会实例化名为classname 的类, run 后面的方法在method 名前面加上字符串on
这个是个$_FILES 注入吧。漏洞比较奇葩。
tipask 有全局的过率机制,虽然过率了post get 等数据可是忽略了$_FIELS ,但是这个地方

function onuploadimage() {
//上传配置
$config = array(
"uploadPath" => "data/attach/", //保存路径
"fileType" => array(".gif", ".png", ".jpg", ".jpeg", ".bmp"),
"fileSize" => 2048
);
//原始文件名,表单名固定,不可配置
$oriName = htmlspecialchars($this->post['fileName'], ENT_QUOTES);
//上传图片框中的描述表单名称,
$title = htmlspecialchars($this->post['pictitle'], ENT_QUOTES);
//文件句柄
$file = $_FILES["upfile"];//全局绕过
//文件上传状态,当成功时返回SUCCESS,其余值将直接返回对应字符窜并显示在图片预览框,同时可以在前端页面通过回调函数获取对应字符窜
$state = "SUCCESS";
//格式验证
$current_type = strtolower(strrchr($file["name"], '.'));
if (!in_array($current_type, $config['fileType'])) {//白名单限制
$state = $current_type;
}
//大小验证
$file_size = 1024 * $config['fileSize'];
if ($file["size"] > $file_size) {
$state = "b";
}
//保存图片
if ($state == "SUCCESS") {
$targetfile = $config['uploadPath'] . gmdate('ym', $this->time) . '/' . random(8) . strrchr($file["name"], '.');//后缀限制
$result = $_ENV['attach']->movetmpfile($file, $targetfile);
if (!$result) {
$state = "c";
} else {
//文件名未过滤
$_ENV['attach']->add($file["name"], $current_type, $file["size"], $targetfile);
}
}
echo "{'url':'" . $targetfile . "','title':'" . $title . "','original':'" . $oriName . "','state':'" . $state . "'}";
}


可以看到$file 数组变量 直接从$_FILES 当中获取的,在进行入库操作的时候,并没有过率。
下面是入库操作代码:

function add($filename,$ftype,$fsize,$location,$isimage=1) {
$uid=$this->base->user['uid'];
$this->db->query("INSERT INTO ".DB_TABLEPRE."attach(time,filename,filetype,filesize,location,isimage,uid) VALUES ({$this->base->time},'$filename','$ftype','$fsize','$location',$isimage,$uid)");
return $this->db->insert_id();
}

漏洞证明:

然后以下是利用过程,

选区_117.png


选区_118.png

修复方案:

修复方案:
把名字从过率的name取过来。

版权声明:转载请注明来源 村长叔叔@乌云


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:11

确认时间:2015-08-06 10:04

厂商回复:

CNVD未直接复现所述漏洞情况,暂未建立与软件生产厂商(或网站管理单位)的直接处置渠道,待认领。

最新状态:

暂无