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

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

缺陷编号: WooYun-2013-25803

漏洞标题: tipask 2.0 后台任意代码执行

相关厂商: tipask

漏洞作者: 猪头子

提交时间: 2013-06-13 10:38

公开时间: 2013-09-11 10:39

漏洞类型: 命令执行

危害等级: 中

自评Rank: 10

漏洞状态: 未联系到厂商或者厂商积极忽略

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

Tags标签: PHP getshell tipask

1人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2013-06-13: 积极联系厂商并且等待厂商认领中,细节不对外公开
2013-09-11: 厂商已经主动忽略漏洞,细节向公众公开

简要描述:

Tipask问答系统是一款开放源码的PHP仿百度知道程序。以国人的使用习惯为设计理念,采用MVC构架,系统具有速度快,SEO友好,界面操作简洁明快等特点。
但是Tipask后台中存在问题,所以导致进入后台的用户可以执行任意代码。

详细说明:

在control/admin/db.php onimport()函数中

code 区域
/*数据库导入*/
function onimport() {
set_time_limit(0);
if(substr(trim(ini_get('memory_limit')),0,-1)<32&&substr(trim(ini_get('memory_limit')),0,-1)>0) {
@ini_set('memory_limit','32M');
}
$filename=str_replace('*','.',$this->get[2]);
$filenum=$this->get[3]?$this->get[3]:1;
$filedir="./data/db_backup/";
$filetype=$this->get[4]?$this->get[4]:substr($filename,-3);
if($filetype!='zip'&&$filetype!='sql') {
$this->message('文件格式不正确','BACK');
}else {
if($filenum==1) {
if($filetype=='zip') {
require_once TIPASK_ROOT.'/lib/zip.class.php';
$zip=new zip();
if(!$zip->chk_zip) {
$this->message('chkziperror','');
}
$zip->Extract($filedir.$filename,$filedir);
$filename=substr($filename,0,-4)."_1.sql";
}else {
$num=strrpos($filename,"_");
$filename=substr($filename,0,$num)."_1.sql";
}
}
if(file_exists($filedir.$filename)) {
$sqldump=readfromfile($filedir.$filename);
preg_match('/#\sVersion:\sTipask\s([^\n]+)\n/i',$sqldump,$tversion);
if($tversion[1]!=TIPASK_VERSION) {
$this->message('导入的备份数据文件版本不正确','admin_db/backup');
}
$sqlquery = $_ENV['db']->splitsql($sqldump);
unset($sqldump);
foreach($sqlquery as $sql) {
$sql = $_ENV['db']->syntablestruct(trim($sql), $this->db->version() > '4.1', DB_CHARSET);
if($sql != '') {
$this->db->query($sql, 'SILENT');
if(($sqlerror = $this->db->error()) && $this->db->errno() != 1062) {
$this->db->halt('MySQL Query Error', $sql);
}
}
}
if($filetype=='zip') {
@unlink($filedir.$filename);
}
$filenum++;
$num=strrpos($filename,"_");
$filename=str_replace('.','*',substr($filename,0,$num)."_".$filenum.".sql");
$this->message("<image src='css/default/loading.gif'><br />".'第 '.($filenum-1).' 个文件已经完成!正在进入下一个备份!', "admin_db/import/$filename/$filenum/$filetype");
}else {
$this->cache->remove('import_files');
$this->message('导入数据成功!','admin_db/backup');
}
}
}







code 区域
$zip->Extract($filedir.$filename,$filedir);



其中可以看到如果导入的是zip,那么将解压缩get[2]中的zip包到/data/db_backup/中,其中get[2]可控。



code 区域
$filename=str_replace('*','.',$this->get[2]);



在开始将*替换回.

所以使用**\来进行目录跳转。

漏洞证明:

首先在提问那上传一个含有shell的zip文件,记下路径,然后在后台数据库备份处选导入,抓包,把文件路径替换为zip的路径。



example:

**.**.**.**/tipask2/index.php?admin_db/import/**\attach\1306\dBhFIKDQ*zip



之后shell将解压到./data/db_backup中

3.jpg

修复方案:

估计厂商不会认领,so...

版权声明:转载请注明来源 猪头子@乌云


漏洞回应

厂商回应:

未能联系到厂商或者厂商积极拒绝


漏洞评价:

对本漏洞信息进行评价,以更好的反馈信息的价值,包括信息客观性,内容是否完整以及是否具备学习价值

漏洞评价(共0人评价):
登陆后才能进行评分

评价

登录后才能发表评论,请先 登录