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

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

缺陷编号:wooyun-2015-0117868

漏洞标题:finecms某处sql注入

相关厂商:dayrui.com

漏洞作者: yunxu

提交时间:2015-06-03 19:12

修复时间:2015-09-02 08:58

公开时间:2015-09-02 08:58

漏洞类型:SQL注射漏洞

危害等级:高

自评Rank:12

漏洞状态:厂商已经确认

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

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

简要描述:

绕过过滤规则进行sql注入

详细说明:

问题文件:controllers\member\ContentController.php

public function indexAction() {
if ($this->post('ids')) { //刷新
$ids = implode(',', $this->post('ids'));
if (empty($ids)) $this->memberMsg(lang('m-con-6'));
$this->content->update(array('updatetime'=>time()), "userid=" . $this->memberinfo['id'] . " and username='" . $this->memberinfo['username'] . "' and sysadd=0 and id in(" . $ids . ")");
}
.........


可以看到通过post方式获取到ids的值,然后把ids数组值组合成sql语句去执行update的
在看一下他对post的过滤检查
在core/controller.php文件中可以看到上面代码调用的post函数,而post函数又使用了check_post()函数检查内容

public static function post($string, $a=0) {
$name = $a ? $string : (isset($_POST[$string]) ? $_POST[$string] : null);
if (is_null($name)) return null;
if (!is_array($name)) {
self::check_Post($string, $a);
return htmlspecialchars(trim($name));
}
foreach ($name as $key=>$value) {
$post_array[$key] = self::post($value, 1);
}
return $post_array;
}


在看check_post()函数,他会加载atackcode这个配置的内容区检查是否包含非法字符,来看看这个配置文件的过滤规则

/**
* 记录$_POST中的非法字符
*/
public static function check_Post($var, $a=0) {
static $cfg = null;
$post = $a ? $var : (isset($_POST[$var]) ? $_POST[$var] : null);
$cfg = is_array($cfg) ? $cfg : self::load_config('attackcode');
$bad = $cfg['post'];
if (empty($post) || empty($bad)) return null;
foreach ($bad as $t) {
if (substr_count(strtolower($post), $t) > 0) self::save_attack_log('POST', $post);
}
}


在config/attackcode.ini.php这个规则是怎么写的

/**
* GET和POST非法字符过滤配置(防非法字符攻击)
*/

return array(
/*
* GET参数非法字符过滤
*/

'get' => array(
'select ',
'insert ',
'\'',
'/*',
'*',
'../',
'..\\',
'union ',
'into ',
'load_file(',
'outfile ',
'<script',
),

/*
* POST值非法字符过滤
*/

'post' => array(
'<script',
'<style',
'<meta',
)


总体来说,对get过滤很严,基本上union,select包括注释符号都过滤了,但是post就只过滤了几个标签,而上面的代码是通过post提交的,所以要注入,并没什么影响。。

1.jpg


2.jpg


漏洞证明:

2.jpg

修复方案:

post也过滤

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


漏洞回应

厂商回应:

危害等级:低

漏洞Rank:5

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

厂商回复:

呵呵

最新状态:

暂无


漏洞评价:

评论

  1. 2015-06-17 07:55 | 1c3z ( 实习白帽子 | Rank:88 漏洞数:29 | 我读书少,你可别骗我!!!)

    洞主,厂商对你呵呵了,你怎么看??

  2. 2015-08-22 21:12 | qhwlpg ( 普通白帽子 | Rank:226 漏洞数:54 | 潜心代码审计。)

    麻痹,post完全没过滤啊