大商创Dscmall多用户商城 2.0版存在多个SQL注入漏洞,
在fofa.info输入body=”dsc-choie”,显示有8431个网站存在这个漏洞。
已经可以批量POC啦,找到他们官方,给的回复都是售后要给钱,购买系统使用权给了钱。
出了漏洞竟然不是系统程序升级,修复漏洞,而是说要进行售后续费,需要给3000/月,5000/半年,8000块/年的售后服务费用,表示无语和钦佩。
1,wholesale_flow.php
注入漏洞:$_REQUEST[‘rec_ids’]没有过滤
$_REQUEST[‘rec_ids’]没有验证是否是数字,导致可以把数组中的字符连接成SQL语句。
$_REQUEST[‘rec_ids’]没有验证是否是数字,导致可以把数组中的字符连接成SQL语句。
原代码
else if ($_REQUEST['step'] == 'ajax_update_cart') { require_once ROOT_PATH . 'includes/cls_json.php'; $json = new JSON(); $result = array('error' => 0, 'message' => '', 'content' => ''); $rec_ids = empty($_REQUEST['rec_ids']) ? array() : $_REQUEST['rec_ids'];//验证了$_REQUEST['rec_ids']是否为空,但是没有验证是否是数字 $rec_ids = implode(',', $rec_ids);
修改为
else if ($_REQUEST['step'] == 'ajax_update_cart') { require_once ROOT_PATH . 'includes/cls_json.php'; $json = new JSON(); $result = array('error' => 0, 'message' => '', 'content' => ''); $rec_ids = empty($_REQUEST['rec_ids']) ? array() : $_REQUEST['rec_ids'];//验证了$_REQUEST['rec_ids']是否为空,但是没有验证是否是数字 $rec_ids = array_map('intval', $rec_ids); //验证$rec_ids数组中每一个所有元素是否为数字,含非数字字符时返回0 $rec_ids = implode(',', $rec_ids);//然后连接数组
2,ajax_dialog.php
注入漏洞:_REQUEST[‘brand_id’]没有过滤
原代码
else if ($_REQUEST['act'] == 'getUserInfo') { $seckillid = ''; $_REQUEST['seckillid'] = !empty($_REQUEST['seckillid']) ? stripslashes($_REQUEST['seckillid']) : ''; $temp = !empty($_REQUEST['temp']) ? trim($_REQUEST['temp']) : ''; $_REQUEST['seckillid'] = json_str_iconv($_REQUEST['seckillid']); if (!empty($_REQUEST['seckillid'])) { $seckillid = json_decode($_REQUEST['seckillid'], true); } $brand_id = !empty($_REQUEST['brand_id']) ? trim($_REQUEST['brand_id']) : ''; //只检查了$_REQUEST['brand_id'])是否为空,但是没有检查是否是数字 $smarty->assign('user_id', $user_id);
修改为
else if ($_REQUEST['act'] == 'getUserInfo') { $seckillid = ''; $_REQUEST['seckillid'] = !empty($_REQUEST['seckillid']) ? stripslashes($_REQUEST['seckillid']) : ''; $temp = !empty($_REQUEST['temp']) ? trim($_REQUEST['temp']) : ''; $_REQUEST['seckillid'] = json_str_iconv($_REQUEST['seckillid']); if (!empty($_REQUEST['seckillid'])) { $seckillid = json_decode($_REQUEST['seckillid'], true); } $brand_id = !empty($_REQUEST['brand_id']) ? intval(trim($_REQUEST['brand_id'])) : ''; //如果brand_id为字符串,结果就为0 $smarty->assign('user_id', $user_id);
3,flow.php
注入漏洞:$_REQUEST[‘rec_id’]、$_REQUEST[‘sel_id’]没有过滤
原代码
else if ($_REQUEST['step'] == 'ajax_cart_goods_amount') { require_once ROOT_PATH . 'includes/cls_json.php'; $json = new JSON(); $result = array('error' => 0, 'message' => ''); get_request_filter(); $rec_id = !empty($_REQUEST['rec_id']) ? dsc_addslashes($_REQUEST['rec_id']) : ''; $act_sel_id = !empty($_REQUEST['sel_id']) ? dsc_addslashes($_REQUEST['sel_id']) : '';
修改为
else if ($_REQUEST['step'] == 'ajax_cart_goods_amount') { require_once ROOT_PATH . 'includes/cls_json.php'; $json = new JSON(); $result = array('error' => 0, 'message' => ''); get_request_filter(); //$rec_id = !empty($_REQUEST['rec_id']) ? dsc_addslashes($_REQUEST['rec_id']) : ''; $rec_id = !empty($_REQUEST['rec_id']) ? dsc_addslashes(intval($_REQUEST['rec_id'])) : ''; //intval $rec_id参数 //$act_sel_id = !empty($_REQUEST['sel_id']) ? dsc_addslashes($_REQUEST['sel_id']) : ''; $act_sel_id = !empty($_REQUEST['sel_id']) ? dsc_addslashes(intval($_REQUEST['sel_id'])) : ''; //intval $sel_id参数