Cacti rra_id参数SQL注入漏洞
来源:岁月联盟
时间:2010-05-18
影响版本:
Cacti <= 0.8.7e
程序介绍:
Cacti是一款轮循数据库(RRD)工具,可帮助从数据库信息创建图形,有多个Linux版本。
漏洞分析:
Cacti的graph.php脚本存在SQL注入漏洞:
case 'zoom': /* find the maximum time span a graph can show */ $max_timespan=1; if (sizeof($rras) > 0) { foreach ($rras as $rra) { if ($rra["steps"] * $rra["rows"] * $rra["rrd_step"] > $max_timespan) { $max_timespan = $rra["steps"] * $rra["rows"] * $rra["rrd_step"]; } } } /* fetch information for the current RRA */ $rra = db_fetch_row("select id,timespan,steps,name from rra where id=" . $_GET["rra_id"]); $_GET['rra_id']变量直接注入到了SQL查询中,通常这会导致SQL注入漏洞。但考虑到之前的代码段会执行某些过滤: /* ================= input validation ================= */ input_validate_input_regex(get_request_var_request("rra_id"), "^([0-9]+|all)$"); input_validate_input_number(get_request_var("local_graph_id")); input_validate_input_regex(get_request_var_request("view_type"), "^([a-zA-Z0-9]+)$"); /* ==================================================== */ 在get_request_var_request()函数中: function get_request_var_request($name, $default = "") { if (isset($_REQUEST[$name])) { return $_REQUEST[$name]; } else { return $default; } } |
所过滤的值是从$_REQUEST['rra_id']获得的,如果没有相同名称的POST或COOKIE变量的话$_REQUEST['rra_id']仅会包含有与$_GET['rra_id']相同的值。也就是攻击者只需通过rra_id URL变量提交SQL负载并通过POST或COOKIE发送无害的rra_id变量就可以执行SQL注入攻击。
解决方案:
厂商补丁:
Cacti
-----
目前厂商还没有提供补丁或者升级程序,我们建议使用此软件的用户随时关注厂商的主页以获取最新版本:
http://cacti.net/