MolyX论坛系统db_base.php页面SQL注入缺陷

影响版本:
MolyX Board 2.81

程序介绍:

魔力论坛(MolyX Board) 是魔力系列Web应用软件产品之一,由魔力工作室(MolyX Studios) 经过数年的市场技术调研及学习研究,在融合了当今众多论坛程序技术和实践优点的基础上,针对中国人的使用习惯开发研制的一款功能强大、速度飞快、性能卓越、安全性极高的论坛系统。其采用PHP及MySql构建,整体架构采用最先进的面向对象思想,在功能、速度、性能、安全及开发理念和创新意识上均超越了目前国内外市场同类产品。魔力论坛推出的短短数月间,就获得了大量用户和业界专家的一致好评和认可,越来越多的用户选择了魔力论坛作为应用网站论坛社区的解决方案。

漏洞分析:

includes/db/db_base.php 注入

 
  1. function insert($table$array$type = ‘INSERT’$func = ‘query_unbuffered’)  
  2.   
  3. if (($sql = $this->sql_insert($table$array$type)))  
  4. {  
  5.  return $this->$func($sql);  
  6. }  
  7. return false;  

接着看sql_insert()函数

 
  1.  function sql_insert($table$array$type = ‘INSERT’$prefix = ‘INSERT’)  
  2.   
  3. if (!is_array($array) || emptyempty($array))  
  4. {  
  5.  return false;  
  6. }  
  7. return "$prefix INTO $table " . $this->sql_clause($type$array);  

再看sql_clause()函数

 
  1. function sql_clause($query$array)  
  2. {  
  3.    if (!is_array($array))  
  4.    {  
  5.     return false;  
  6.    }  
  7.   
  8.    $query = strtoupper($query);  
  9.    $fields = $values = ;  
  10.    if ($query == ‘INSERT’ || $query == ‘INSERT_SELECT’)  
  11.    {  
  12.     foreach ($array as $key => $var)  
  13.     {  
  14.      $fields .= ‘, `’ . $key . ‘`’;  
  15.   
  16.      if (is_array($var) && is_string($var[0]))  
  17.      {  
  18.       // INSERT SELECT  
  19.       $values .= ‘, ‘ . $var[0];  
  20.      }  
  21.      else  
  22.      {  
  23.       $values .= ‘, ‘ . $this->validate($var);  
  24.      }  
  25.     }  
  26.     $fields = substr($fields, 2);  
  27.     $values = substr($values, 2);  
  28.     $query = ($query == ‘INSERT’) ? ‘ (‘ . $fields . ‘) VALUES (‘ . $values . ‘)’ : ‘ (‘ . $fields . ‘) SELECT ‘ . $values . ‘ ‘;  
  29.    }  
  30. …………………………………省略无关代码  
$values .= ‘, ‘ . $var[0]; 变量$var[0]两边并没有用到单引号,问题产生了!!
 
但要注意global.php中的init_input()函数对全局变量做了array(‘&#032;’, ‘<!–‘, ‘–>’, ‘>’, ‘<‘, ‘"’, ‘!’, "’", "\n", ‘$’, "\r")过滤成array(‘ ‘, ‘&#60;&#33;–‘, ‘–&#62;’, ‘&gt;’, ‘&lt;’, ‘&quot;’, ‘&#33;’, ‘&#39;’, ‘<br />’, ‘&#036;’, ”)

漏洞利用:

 

查找$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 条评论。

发表评论