热门关键字:   网站安全  系统安全  安全漏洞  黑客攻防  网络安全

tipask 2.0 后台任意代码执行

发布时间:2013-09-11 20:13文章来源:wooyun文章作者:猪头子 点击次数:
摘要:漏洞作者: 猪头子 提交时间: 2013-06-13 10:38 公开时间: 2013-09-11 10:39 漏洞类型: 命令执行 简要描述: Tipask问答系统是一款开放源码的PHP仿百度知道程序。以国人的使用习惯为设计理念,采用MVC构架,系统具有速度快,SEO友好,界面操作简洁明快等...

漏洞作者: 猪头子

提交时间: 2013-06-13 10:38
公开时间: 2013-09-11 10:39

漏洞类型: 命令执行
简要描述:

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

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

/*数据库导入*/

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');

}

}

}

 

 

 

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

 

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

 

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

 

在开始将*替换回.

所以使用**\来进行目录跳转。
漏洞证明:

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

 

example:

http://yunsec.net/tipask2/index.php?admin_db/import/**\attach\1306\dBhFIKDQ*zip

 

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

标签分类:

上一篇:yxcms二次SQL注入漏洞
下一篇:tipask问答系统2.0 ajaxsearch二次编码注入漏洞