乌云(WooYun.org)历史漏洞查询---http://wy.zone.ci/
乌云 Drops 文章在线浏览--------http://drop.zone.ci/
2014-09-28: 细节已通知厂商并且等待厂商处理中 2014-09-30: 厂商已经确认,细节仅向厂商公开 2014-10-03: 细节向第三方安全合作伙伴开放 2014-11-24: 细节向核心白帽子及相关领域专家公开 2014-12-04: 细节向普通白帽子公开 2014-12-14: 细节向实习白帽子公开 2014-12-27: 细节向公众公开
DouPHP 功能简单,因此防御起来比较容易,使用全局过滤很好的避免了问题,不过还是存在不严谨的地方。挖洞不易啊- -
在文件\www\admin\article.php中:
/** * +---------------------------------------------------------- * 文章列表 * +---------------------------------------------------------- */if ($rec == 'default') { $smarty->assign('ur_here', $_LANG['article']); $smarty->assign('action_link', array ( 'text' => $_LANG['article_add'], 'href' => 'article.php?rec=add' )); // 验证并获取合法的分类ID $cat_id = $check->is_number($_REQUEST['cat_id']) ? $_REQUEST['cat_id'] : (isset($_POST['cat_id']) ? $_POST['cat_id'] : ''); //这里的逻辑好像有点奇怪,判断了是否是数字,后一步直接带入了$_POST的数据 $keyword = isset($_POST['keyword']) ? trim($_POST['keyword']) : ''; if ($cat_id) { $child_id = $dou->dou_child_id($dou->fetch_array_all('article_category'), $cat_id); $where = " cat_id IN (" . $cat_id . $child_id . ") "; //存在就拼接了,而且这里是数字类型输入,所以无视了firewall文件的全局过滤。 } if ($cat_id && $keyword) $where .= 'AND'; if ($keyword) $where .= " title LIKE '%$keyword%' "; $where = $where ? ' WHERE' . $where : ''; // 验证并获取合法的分页ID $page = $check->is_number($_REQUEST['page']) ? $_REQUEST['page'] : 1; $limit = $dou->pager('article', 15, $page, $cat_id); $sql = "SELECT id, title, cat_id, image, add_time FROM " . $dou->table('article') . $where . "ORDER BY id DESC" . $limit; //这里带入了语句查询 $query = $dou->query($sql); //这里!!!!!执行了 while ($row = $dou->fetch_array($query)) { $cat_name = $dou->get_one("SELECT cat_name FROM " . $dou->table('article_category') . " WHERE cat_id = '$row[cat_id]'"); $add_time = date("Y-m-d", $row['add_time']); $article_list[] = array ( "id" => $row['id'], "cat_id" => $row['cat_id'], "cat_name" => $cat_name, "title" => $row['title'], "image" => $row['image'], "add_time" => $add_time ); }
在www\admin\product.php文件中同样存在问题,由于代码类似就不贴了。
由于这两个地方都属于完全未过滤,且存在显示位。注入很容易。post提交:cat_id=2) union all select 1,user(),3,4,5-- 1
判断数字
危害等级:低
漏洞Rank:3
确认时间:2014-09-30 10:14
已经修正,十分感谢
2014-09-30:已经修复