MolyX Board 2.81论坛db_base.php页面SQL注入漏洞

来源:岁月联盟 编辑:老鹰 时间:2010-06-08

影响版本:
MolyX Board 2.81

漏洞描述:
魔力论坛(MolyX Board) 是魔力系列Web应用软件产品之一,由魔力工作室(MolyX Studios) 经过数年的市场技术调研及学习研究,在融合了当今众多论坛程序技术和实践优点的基础上,针对中国人的使用习惯开发研制的一款功能强大、速度飞快、性能卓越、安全性极高的论坛系统。

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/